Blog ·
Abrechnung automatisieren mit Virtualmin
Von der Bestellung zum fertigen Virtualmin-Konto, und was eine offene Rechnung bewirkt: stilllegen, wieder aktivieren, löschen, mit den Panel-Befehlen dazu.
Von Provibr
Zwei Fragen entscheiden, ob ein Hosting-Panel zahlende Kunden tragen kann: Wird aus einer Bestellung ein funktionierendes Konto, ohne dass Sie etwas tun, und ändert eine offene Rechnung tatsächlich etwas auf dem Server?
Diese Seite beantwortet beides für Virtualmin, und zwar konkret: welcher Virtualmin-Befehl hinter jedem Schritt steht, was wo gespeichert wird und wo die Automatisierung bewusst aufhört. Alles wurde an einer echten Installation von Virtualmin GPL 8.1.2 gemessen.
Von der Bestellung zum Konto
Eine Bestellung braucht vier Dinge: eine Domain, eine E-Mail-Adresse, einen Plan und ein Passwort.
Der Plan ist der interessante Teil. Ein Provibr-Webplan heftet genau einen Virtualmin-Plan an genau eine Integration und gibt ihm einen eigenen Namen. Dieser Zwischenschritt existiert, weil ein Virtualmin-Plan die Beschreibung ist, die das Panel selbst von einem Konto hat (Festplattenkontingent, monatlicher Datenverkehr, Anzahl der Postfächer und Domains, welche Funktionen aktiv sind), und sein Inhalt kann sich auf Ihrer Maschine ändern, ohne dass wir davon erfahren. Wir beziehen uns also namentlich darauf und lesen zurück, was tatsächlich geschehen ist, statt zu speichern, was wir dafür halten.
Im Hintergrund führt die Bestellung create-domain auf dem Panel aus, mit Domain, Plan und Passwort. Weiter:
| Provibr-Befehl | Virtualmin-Programm |
|---|---|
| Konto anlegen | create-domain |
| Stilllegen | disable-domain |
| Wieder aktivieren | enable-domain |
| Plan wechseln | modify-domain --plan |
| Status lesen | list-domains --domain |
| Löschen | delete-domain |
Zwei Details des Anlegens sind wissenswert.
Der Unix-Benutzer kommt aus der Domain. mein-kunde.de wird zu mein-kunde. Bindestriche sind hier die Normalform, und die Obergrenze ist die von Linux selbst: 32 Zeichen, anders als bei DirectAdmin und cPanel, die eigene, strengere Namensregeln vorgeben. Sie wählen den Benutzernamen nicht; das Panel leitet ihn ab.
Das Passwort wird nie festgehalten. Provibr speichert die Tatsache, dass Sie eines angegeben haben, nicht den Wert. Das Passwort reist getrennt von der Audit-Spur, die die Bestellung festhält, ein Hosting-Konto-Passwort existiert also nirgends in der Historie der Plattform. Geht es verloren, setzen Sie ein neues. Sie schlagen es nicht nach.
Was wo gespeichert wird
Ein Hosting-Konto wird eine gewöhnliche Serverzeile vom Typ webserver. Seine Kennung ist die interne Nummer, die Virtualmin der Domain gibt, nicht der Name.
Diese Entscheidung ist bewusst und für die Abrechnung wichtig. Virtualmin kann eine Domain umbenennen, und ein Kunde oder Administrator wird es irgendwann tun. Ein namensbasierter Schlüssel löst sich beim ersten Mal von seiner Zeile: Ihre Rechnung berechnet weiter etwas, das die Plattform nicht mehr findet. Eine numerische Kennung überlebt die Umbenennung.
Die Kontogrenze ist der Unix-Benutzer, nicht die Domain. Sub-Server und Aliasse unter einem Konto würden sonst je einzeln als eigenes Hosting-Konto in der Kapazitätszählung landen, und Sie zahlten Lizenzkapazität für Aliasse.
⚠️ Hier steckt ein Übersetzungsschritt, der leicht schiefgeht, wenn Sie das selbst bauen. Die Mutationsprogramme von Virtualmin (disable-domain, enable-domain, modify-domain) nehmen nur --domain als Selektor. Das haben wir auf 8.1.2 gemessen: Einen --user-Selektor gibt es nicht. Die Plattform adressiert Konten aber über den Benutzernamen, denn das ist die Identität des Kontos. Diese Übersetzung gehört zum Agenten, der eine eingegrenzte Abfrage auf dem Panel macht, um die aktuelle Domain zu bestimmen, und nicht zur Plattform, die dann eine Kopie Ihrer Domainnamen führen müsste und bei der ersten Umbenennung außerhalb von Provibr stillschweigend die falsche Domain ansteuern würde.
(Verwandte Falle: modify-domain --user bedeutet umbenennen, nicht auswählen. Dieses Flag wird nie gesendet.)
Das Kapazitätsmodell in einem Absatz
Sie kaufen Kapazität je Ressourcentyp (virtuelle Maschinen, dedizierte Maschinen, Hosting-Konten, Gameserver), und das ist Grenze und Preis in einem. Jedes Konto zählt, ob es läuft oder nicht. Nur ein stillgelegtes zählt nicht, und ein gelöschtes ebenso wenig. Etwas anzuhalten gibt also keinen Platz frei: entfernen Sie es, oder erhöhen Sie Ihre Kapazität. Erhöhen wirkt sofort, und der Mehrbetrag für den Rest der Periode kommt anteilig auf die nächste Rechnung; Senken wirkt ebenfalls sofort, und der ungenutzte Teil kommt als Guthaben zurück.
Importierte Konten zählen genau wie bestellte. Ein Panel voller bestehender Kunden zu übernehmen ist eine Kapazitätsentscheidung, keine kostenlose Handlung.
Was eine offene Rechnung bewirkt
Ihre Organisation trägt einen Lizenzstatus: aktiv, Nachfrist oder gesperrt. Zwei voneinander unabhängige Dinge können ihn verschieben (eine offene Zahlung und eine Kapazitätsüberschreitung), und wenn beide gelten, gewinnt das strengere, damit der Hinweis nicht zwischen zwei Geschichten hin und her springt.
Am deutlichsten zeigt die Testphase die Form. Eine neue Organisation läuft zwei Wochen zur Probe, ohne dass nach Zahlungsdaten gefragt wird, und alles funktioniert. Endet sie ohne Zahlungsmethode, wird Ihnen das gesagt, und es ändert sich noch nichts. Eine Woche später beginnt das Panel zu warnen. Zwei Wochen nach Ende der Periode werden Server stillgelegt. Jeder Schritt wird angekündigt, bevor er eintritt: Das ist die Regel, um die der gesamte Ablauf herum gebaut ist, keine nachträglich angeklebte Höflichkeit.
Bei einem laufenden Abonnement ist der Mechanismus derselbe: Der Status geht erst in die Nachfrist und dann auf gesperrt, der Hinweis nennt die Ursache, und die Lösung ist verlinkt. Eine Sperrung wegen Zahlung und eine wegen Kapazität sehen anders aus und lesen sich anders, weil sie Verschiedenes von Ihnen verlangen.
Was Stilllegen auf dem Panel bewirkt
Legt die Plattform ein Hosting-Konto still, sendet sie disable-domain. Virtualmin sperrt das Passwort des Verwaltungsbenutzers und ersetzt die Website durch eine Fehlerseite. Die Daten bleiben.
Drei Eigenschaften dieses Ablaufs sind es wert, ausgeschrieben zu werden, denn sie trennen eine echte Automatisierung von einem Skript, das so aussieht.
Die Zeile wird erst als stillgelegt markiert, wenn der Agent es bestätigt. Einen Befehl zu senden ist nicht dasselbe, wie dass er ausgeführt wurde. Würde die Plattform beim Senden markieren, ließe eine fehlgeschlagene Stilllegung ein laufendes Konto als „zählt nicht auf Ihre Grenze“ durchgehen, genau der Buchungsfehler, den die Durchsetzung verhindern soll.
Ein nicht erreichbarer Agent bedeutet aufgeschoben, nicht erledigt. Ist der Agent nicht erreichbar, wird die Durchsetzung übersprungen, ein Ereignis hält das fest, und die nächste Runde versucht es erneut. Nichts wird stillschweigend als abgeschlossen markiert.
Das Ergebnis zu lesen ist eine frische Abfrage, nicht die Antwort des Befehls selbst. disable-domain gibt eine Wand aus Fortschrittstext zurück („Locking administration user's password ..“, „Replacing website with error page ..“), und dieser Text ist ein Zitat, kein Vertrag. Der Zustand kommt aus einem frischen list-domains danach. Das ist eine Hausregel über jedes Panel hinweg, das wir anbinden: Keine Mutation wird ihrer eigenen Antwort geglaubt.
Genau diese Regel macht die Erkennung überhaupt erst richtig, und das ist der gemessene Grund. Bei einem stillgelegten Konto kommt in list-domains ein Feld disabled hinzu. Bei einem aktiven Konto fehlt dieses Feld schlicht; ein disabled: "No" gibt es nicht. Ein Parser, der nach einem Wert sucht, findet nichts und liest jedes Konto als aktiv, auch die stillgelegten. Im Abrechnungskontext ist das nicht kosmetisch: Ein wegen Nichtzahlung stillgelegtes Konto meldet sich als aktiv, und Ihre Kapazitätszählung steht in der Richtung falsch, die Sie Geld kostet.
Über die Grenze hinausgehen
Mehr Konten zu betreiben, als Sie gekauft haben, wird im Moment des Anlegens nicht blockiert. Es wird erkannt, Ihnen mitgeteilt, und Sie bekommen Zeit.
- Die Überschreitung wird erkannt. Sie erhalten eine Benachrichtigung und einen Hinweis, der den Ressourcentyp nennt und um wie viel Sie darüber liegen.
- Sie haben einen vollen Werktag, um es zu beheben: Konten entfernen oder Kapazität erhöhen.
- Läuft die Nachfrist ab, legt die Plattform die neuesten Konten oberhalb Ihrer Grenze still. Die neuesten zuerst, damit erhalten bleibt, was Sie zuerst aufgebaut haben. Ein stillgelegtes Konto behält seine Festplatte und seine Daten.
- Sobald Sie wieder innerhalb Ihrer Grenze sind, schließt sich die Überschreitung.
Eine zweite Überschreitung innerhalb einer Woche bekommt eine Stunde statt eines Tages. Sonst ließe sich die Nachfrist endlos erneuern, indem man kurz unter die Grenze taucht und wieder darüber geht.
⚠️ Es wird nichts für Sie gestartet, wenn die Überschreitung behoben ist. Ein Konto wieder einzuschalten ist eine Entscheidung, und die trifft die Plattform nicht, während niemand hinsieht. Sie aktivieren es selbst, und das sendet enable-domain.
Hinter Schritt 4 steckt eine kleine Rechnung, die leicht verkehrt herum gedacht wird. Die Überschreitung gilt erst als behoben, wenn zählende Konten plus durch diese Überschreitung stillgelegte Konten wieder innerhalb der Grenze liegen, nicht nur die erste Zahl. Ohne diese Addition erklärte sich die Durchsetzung im Moment ihres Handelns sofort für behoben, denn die Zählung fällt gerade durch das Stilllegen unter die Grenze.
Was nie automatisch geschieht
Löschen. Weder eine offene Rechnung noch eine Überschreitung noch eine abgelaufene Testphase löscht ein Hosting-Konto. Stilllegen behält Festplatte und Daten; Löschen ist eine eigene, ausdrückliche Handlung, die Sie vornehmen. Der eine zerstörerische Schritt im Lebenszyklus ist genau der, den die Plattform nicht für Sie geht.
Teilweise Verrechnung mit Guthaben. Sie können im Voraus aufladen, und der Saldo ist ein Hauptbuch: eine Zeile je Änderung, nie bearbeitet, Korrekturen sind Gegenbuchungen mit Begründung statt Überschreibungen. Deckt der Saldo den ganzen Monat, wird der Monat aus dem Guthaben bezahlt und nichts eingezogen. Deckt er ihn nicht, wird der volle Betrag eingezogen und der Saldo bleibt unberührt. Halb und halb gibt es nicht.
Historie umschreiben. Eine Rechnungszeile hält den Plannamen so fest, wie er zum Zeitpunkt der Rechnungsstellung lautete. Etwas später umzubenennen ändert nicht, was auf einer alten Rechnung steht.
Was das bedeutet
Virtualmin gibt Ihnen ein solides Hosting-Panel und überhaupt keine kommerzielle Schicht. Die Lücke ist nicht das Bereitstellen (create-domain ist ein Befehl), sondern alles darum herum: zählen, was ein Kunde hat, wissen, dass eine Rechnung offen blieb, etwas Umkehrbares dagegen tun, und hinterher erklären können, was wann geschehen ist.
Provibr verbindet sich mit Controlpanels, Hypervisoren und Gamepanels nebeneinander. Das Abrechnungsmodell oben ist über alle hinweg dasselbe, und das ist das praktische Argument für einen kleinen Hoster: Die Virtualmin-Maschine, die Sie bereits betreiben, arbeitet genau weiter wie bisher, und der VPS oder das Gamepanel, das Sie nächstes Jahr daneben stellen, landet in derselben Kapazitätszählung, derselben Rechnung und demselben Sperrablauf.
Häufige Fragen
Hat Virtualmin ein eigenes Abrechnungspanel?
Nein. Virtualmin gibt Ihnen ein solides Hosting-Panel und gar keine kommerzielle Schicht. Die Lücke liegt nicht im Provisionieren, denn create-domain ist ein einziger Befehl; sie liegt darin, zu zählen, was ein Kunde hat, zu wissen, dass eine Rechnung offen blieb, und etwas Umkehrbares dagegen zu tun.
Was passiert auf dem Panel, wenn ein Konto gesperrt wird?
Die Plattform sendet disable-domain. Virtualmin sperrt das Passwort des Verwaltungsbenutzers und ersetzt die Website durch eine Fehlerseite. Die Daten bleiben erhalten.
Löscht eine offene Rechnung ein Hosting-Konto?
Niemals. Keine offene Rechnung, keine Überschreitung und keine abgelaufene Testphase löscht ein Konto. Der einzige destruktive Schritt im Lebenszyklus ist genau der, den die Plattform nicht für Sie ausführt.
Wie wird ein gesperrtes Virtualmin-Konto zuverlässig erkannt?
Indem der Zustand zurückgelesen wird, statt der Antwort des Befehls zu glauben. Bei einem gesperrten Konto bekommt list-domains ein Feld disabled dazu; bei einem aktiven Konto fehlt dieses Feld schlicht, sodass ein Parser, der nach einem Wert sucht, jedes Konto als aktiv liest, die gesperrten eingeschlossen.
Zählt ein gesperrtes Konto weiter zu meiner Kapazität?
Nein. Jedes Konto zählt, ob es läuft oder nicht, und nur ein gesperrtes oder gelöschtes nicht. Etwas anzuhalten macht also keinen Platz frei: entfernen Sie es, oder erhöhen Sie Ihre Kapazität.