Aller au contenu

Blog ·

Automatiser la facturation avec Virtualmin

De la commande au compte Virtualmin actif, et ce que fait vraiment une facture impayée : suspendre, réactiver, supprimer (avec les commandes du panneau).

Par Provibr

Deux questions déterminent si un panneau d’hébergement peut porter des clients payants : une commande devient-elle un compte actif sans que vous y touchiez, et une facture impayée change-t-elle réellement quelque chose sur le serveur ?

Cette page répond aux deux pour Virtualmin, concrètement : quelle commande Virtualmin se trouve derrière chaque étape, ce qui est stocké où, et où l’automatisation s’arrête délibérément. Tout a été mesuré sur une installation réelle de Virtualmin GPL 8.1.2.

De la commande au compte

Une commande a besoin de quatre choses : un domaine, une adresse e-mail, un forfait et un mot de passe.

Le forfait est le point intéressant. Un forfait web Provibr épingle exactement un forfait Virtualmin sur exactement une intégration et lui donne un nom à vous. Cette indirection existe parce qu’un forfait Virtualmin est la description qu’a le panneau d’un compte (quota de disque, trafic mensuel, nombre de boîtes aux lettres et de domaines, fonctions activées), et son contenu peut changer sur votre machine sans qu’on nous le dise. Nous nous y référons donc par son nom et relisons ce qui s’est réellement passé, au lieu de conserver ce que nous croyons qu’il signifie.

En coulisses, la commande exécute create-domain sur le panneau, avec le domaine, le forfait et le mot de passe. Ensuite :

Commande ProvibrProgramme Virtualmin
Créer un comptecreate-domain
Suspendredisable-domain
Réactiverenable-domain
Changer de forfaitmodify-domain --plan
Lire l’étatlist-domains --domain
Supprimerdelete-domain

Deux détails de l’étape de création méritent d’être connus.

L’utilisateur Unix vient du domaine. mon-client.fr devient mon-client. Les traits d’union sont ici la forme normale, et le plafond est celui de Linux lui-même : 32 caractères, contrairement à DirectAdmin et cPanel, qui imposent leurs propres règles de nommage plus strictes. Vous ne choisissez pas le nom d’utilisateur ; le panneau le dérive.

Le mot de passe n’est jamais consigné. Provibr conserve le fait que vous en avez fourni un, pas la valeur. Le mot de passe voyage séparément de la trace d’audit qui enregistre la commande ; un mot de passe de compte d’hébergement n’existe donc nulle part dans l’historique de la plateforme. Si vous le perdez, vous en définissez un nouveau : vous ne le consultez pas.

Ce qui est stocké où

Un compte d’hébergement devient une ligne de serveur ordinaire, de type webserver. Son identifiant est le numéro interne que Virtualmin attribue au domaine, pas le nom.

Ce choix est délibéré et il compte pour la facturation. Virtualmin peut renommer un domaine, et un client ou un administrateur finira par le faire. Une clé fondée sur le nom se détache de sa ligne dès la première fois : votre facture continue de compter quelque chose que la plateforme ne retrouve plus. Un identifiant numérique survit au renommage.

La frontière du compte est l’utilisateur Unix, pas le domaine. Les sous-serveurs et les alias d’un même compte tomberaient sinon chacun dans le décompte de capacité comme un compte d’hébergement distinct, et vous paieriez de la capacité de licence pour des alias.

⚠️ Il y a ici une étape de traduction facile à rater si vous construisez cela vous-même. Les programmes de mutation de Virtualmin (disable-domain, enable-domain, modify-domain) n’acceptent que --domain comme sélecteur. Nous l’avons mesuré sur 8.1.2 : il n’existe pas de sélecteur --user. Or la plateforme adresse les comptes par nom d’utilisateur, car c’est cela l’identité du compte. Cette traduction revient à l’agent, qui effectue une lecture ciblée sur le panneau pour retrouver le domaine actuel, et non à la plateforme, qui devrait alors tenir une copie de vos noms de domaine et viserait silencieusement le mauvais domaine au premier renommage effectué hors de Provibr.

(Piège voisin : modify-domain --user signifie renommer, pas sélectionner. Ce paramètre n’est jamais envoyé.)

Le modèle de capacité en un paragraphe

Vous achetez de la capacité par type de ressource (machines virtuelles, machines dédiées, comptes d’hébergement, serveurs de jeu), et c’est à la fois une limite et un prix. Chaque compte compte, qu’il tourne ou non. Seul un compte suspendu ne compte pas, et un compte supprimé pas davantage. Arrêter quelque chose ne libère donc pas de place : supprimez-le, ou augmentez votre capacité. Augmenter prend effet immédiatement et le supplément pour le reste de la période est calculé au prorata sur la facture suivante ; diminuer prend aussi effet immédiatement, et la part non utilisée revient en avoir.

Les comptes importés comptent exactement comme les comptes commandés. Reprendre un panneau plein de clients existants est une décision de capacité, pas une action gratuite.

Ce que fait une facture impayée

Votre organisation porte un seul statut de licence : actif, délai de grâce ou suspendu. Deux choses indépendantes peuvent le faire bouger (un paiement en souffrance et un dépassement de capacité), et lorsque les deux s’appliquent, la plus stricte l’emporte, afin que le bandeau n’alterne pas entre deux récits.

La période d’essai illustre le mieux la forme. Une nouvelle organisation démarre sur deux semaines d’essai, sans qu’aucune coordonnée de paiement soit demandée, et tout fonctionne. Si elle se termine sans moyen de paiement, on vous le dit, et rien ne change encore. Une semaine plus tard, le panneau commence à avertir. Deux semaines après la fin de la période, les serveurs sont suspendus. Chaque étape est annoncée avant de se produire : c’est la règle autour de laquelle tout le calendrier est bâti, pas une politesse ajoutée après coup.

Pour un abonnement en cours, le mécanisme est le même : le statut passe par le délai de grâce avant d’aller à suspendu, le bandeau nomme la cause, et la solution y est liée. Une suspension pour paiement et une suspension pour capacité ne se ressemblent pas et ne se lisent pas pareil, parce qu’elles attendent de vous des choses différentes.

Ce que la suspension fait sur le panneau

Lorsque la plateforme suspend un compte d’hébergement, elle envoie disable-domain. Virtualmin verrouille le mot de passe de l’utilisateur d’administration et remplace le site par une page d’erreur. Les données restent.

Trois propriétés de ce flux méritent d’être explicitées, car ce sont elles qui séparent une véritable automatisation d’un script qui y ressemble.

La ligne n’est marquée suspendue qu’après confirmation de l’agent. Envoyer une commande n’est pas la même chose que le fait qu’elle ait eu lieu. Si la plateforme marquait la ligne à l’envoi, une suspension échouée laisserait un compte actif compté comme « ne compte pas dans votre limite », exactement l’erreur comptable que la mesure est censée empêcher.

Un agent injoignable signifie reporté, pas terminé. Si l’agent est inaccessible, l’application est ignorée, un événement le consigne, et la ronde suivante réessaie. Rien n’est discrètement marqué comme achevé.

Lire le résultat est une relecture fraîche, pas la réponse de la commande elle-même. disable-domain renvoie un mur de texte de progression (Locking administration user's password .., Replacing website with error page ..), et ce texte est une citation, pas un contrat. L’état provient d’un list-domains frais effectué après. C’est une règle maison sur tous les panneaux que nous intégrons : aucune mutation n’est crue sur sa propre réponse.

C’est cette dernière règle qui rend la détection correcte, et voici la raison mesurée. Sur un compte suspendu, list-domains gagne un champ nommé disabled. Sur un compte actif, ce champ est tout simplement absent : il n’existe pas de disabled: "No". Un analyseur qui cherche une valeur ne trouve rien et lit tous les comptes comme actifs, y compris les suspendus. Dans un contexte de facturation, ce n’est pas cosmétique : un compte suspendu pour impayé se déclare actif, et votre décompte de capacité est faux dans le sens qui vous coûte de l’argent.

Dépasser sa limite

Exploiter plus de comptes que vous n’en avez acheté n’est pas bloqué au moment où vous le faites. C’est détecté, on vous le dit, et on vous laisse du temps.

  1. Le dépassement est détecté. Vous recevez une notification et un bandeau nommant le type de ressource et l’ampleur du dépassement.
  2. Vous avez un jour ouvré complet pour y remédier : supprimer des comptes, ou augmenter votre capacité.
  3. Si le délai de grâce expire, la plateforme suspend les comptes les plus récents au-dessus de votre limite. Les plus récents d’abord, afin que ce que vous avez bâti en premier survive. Un compte suspendu conserve son disque et ses données.
  4. Dès que vous êtes revenu dans votre limite, le dépassement se clôt.

Un deuxième dépassement dans la semaine obtient une heure au lieu d’un jour. Sans cela, le délai de grâce pourrait être renouvelé indéfiniment en repassant brièvement sous la limite avant de la dépasser à nouveau.

⚠️ Rien n’est démarré à votre place lorsque le dépassement est résolu. Rallumer un compte est une décision, et la plateforme ne la prend pas pendant que personne ne regarde. Vous le réactivez vous-même, et cela envoie enable-domain.

Derrière l’étape 4 se cache un petit calcul facile à prendre à l’envers. Le dépassement n’est considéré comme résolu que lorsque les comptes qui comptent plus les comptes suspendus par ce dépassement rentrent dans la limite, pas seulement le premier nombre. Sans cette addition, la mesure se déclarerait résolue à l’instant même où elle agit, puisque le décompte passe sous la limite précisément par la suspension.

Ce qui n’est jamais automatique

La suppression. Aucune facture impayée, aucun dépassement et aucune période d’essai expirée ne supprime un compte d’hébergement. La suspension conserve le disque et les données ; la suppression est une action distincte et explicite que vous effectuez. La seule étape destructrice du cycle de vie est justement celle que la plateforme ne franchit pas à votre place.

Le règlement partiel par avoir. Vous pouvez approvisionner à l’avance, et le solde est un grand livre : une ligne par mouvement, jamais modifiée, les corrections étant des écritures inverses motivées plutôt que des réécritures. Si le solde couvre le mois entier, le mois est payé sur l’avoir et rien n’est prélevé. S’il ne le couvre pas, le montant total est prélevé et le solde reste intact. Il n’y a pas de moitié-moitié.

La réécriture de l’historique. Une ligne de facture enregistre le nom du forfait tel qu’il était au moment de la facturation. Renommer quelque chose plus tard ne change pas ce que dit une ancienne facture.

Ce que cela change

Virtualmin vous donne un panneau d’hébergement solide et aucune couche commerciale. L’écart n’est pas le provisionnement (create-domain est une seule commande) mais tout ce qui l’entoure : compter ce qu’un client possède, savoir qu’une facture est restée impayée, y répondre de façon réversible, et pouvoir expliquer ensuite ce qui s’est passé et quand.

Provibr se connecte à des panneaux de contrôle, des hyperviseurs et des panneaux de jeu côte à côte. Le modèle de facturation ci-dessus est identique pour tous, et c’est l’argument pratique pour un petit hébergeur : la machine Virtualmin que vous exploitez déjà continue de fonctionner exactement comme aujourd’hui, et le VPS ou le panneau de jeu que vous ajouterez l’an prochain atterrit dans le même décompte de capacité, la même facture et le même flux de suspension.

Questions fréquentes

Virtualmin a-t-il son propre panneau de facturation ?

Non. Virtualmin fournit un panneau d’hébergement solide et aucune couche commerciale. Le manque n’est pas le provisionnement, puisque create-domain tient en une commande ; il est dans le fait de compter ce qu’un client possède, de savoir qu’une facture est restée impayée, et d’y faire quelque chose de réversible.

Que se passe-t-il sur le panneau lorsqu’un compte est suspendu ?

La plateforme envoie disable-domain. Virtualmin verrouille le mot de passe de l’utilisateur d’administration et remplace le site web par une page d’erreur. Les données restent en place.

Une facture impayée supprime-t-elle un compte d’hébergement ?

Jamais. Aucune facture impayée, aucun dépassement et aucune période d’essai expirée ne supprime un compte. La seule étape destructrice du cycle de vie est précisément celle que la plateforme ne prend pas à votre place.

Comment détecte-t-on de façon fiable un compte Virtualmin suspendu ?

En relisant l’état plutôt qu’en croyant la réponse de la commande. Sur un compte suspendu, list-domains gagne un champ disabled ; sur un compte actif ce champ est simplement absent, si bien qu’un analyseur qui cherche une valeur lit tous les comptes comme actifs, y compris les comptes suspendus.

Un compte suspendu compte-t-il encore dans ma capacité ?

Non. Chaque compte compte, qu’il tourne ou non, et seul un compte suspendu ou supprimé ne compte pas. Arrêter quelque chose ne libère donc pas de place : supprimez-le, ou augmentez votre capacité.

Commencez avec un hôte et un agent

Créez un compte, installez l’agent avec une seule commande et connectez votre premier hôte Proxmox. La période d’essai dure 14 jours et ne demande aucune coordonnée de paiement.