Überblick
Kurze Abläufe für die Aufgaben, die du als Administrator tatsächlich erledigst. Jede Anleitung verweist auf das Kapitel mit den Details. Platzhalter wie in Installation.
Einen Web-Node hinzufügen
- Prüfe, ob die Lizenz einen weiteren Node abdeckt (
nova-update license status); sonst verweigertnode-registerihn (Lizenz). - Bereite den Host vor (Voraussetzungen), hänge ein frisches, unformatiertes Volume an und nimm den Host ins private Netz auf.
- Auf dem Node: Host-Layer
--roles web, dann der Node Agent (Installation). - Quota-Volume:
bash /opt/nova-controlpanel-node-agent/deploy/nova-web-node-quota.sh setup /dev/disk/by-id/<volume> /var/www/nova-controlpanel, dann... verify. - Registriere den Node mit der Rolle
webund den Lease-Zweckenuser-accessundweb. Verwende eine neue Node-ID und Server-ID (node_plus 22 bis 59 Zeichen,srv_plus 8 bis 59). - Trage die Schreib-Capabilities in
/etc/nova-controlpanel-node-agent/runtime.envein (Liste unten) sowieNOVA_AGENT_PLATFORM_PUBLISHER=systemd-socket-v1. Führeinstall-nova-node-agent.sherneut aus (seine Vorprüfung kontrolliert die Quota) undfinalize-nova-node-agent-update.sh / --discard-rollback; aktiviere den Timer. - Als Owner: Lege einen Plattform-Server für den Node an (
web_serverundfile_server), füge seine PHP-Runtime hinzu und gleiche den Web-PHP-Katalog ab. - Biete den Node in einem Plan an: Vorlagen-Selektor
web.nodes. Bestehende Kunden behalten ihre Platzierung; neue Websites von Kunden in diesem Plan können den Node nutzen. - Workspace auf diesem Node: siehe Workspace.
Schreib-Capabilities für einen Web-Node:
platform.php-runtime.apply.v1,platform.server.apply.v1,platform.address.apply.v1,platform.config.apply.v1,platform.directive.apply.v1,web.execute.v1,web.php.apply.v1,web.php.rollback.v1dazu der User-Access-Satz:
access.ftp-account.apply.v1,access.shell-account.apply.v1,access.webdav-account.apply.v1,scheduling.website-cron.apply.v1Hinweis: Speichere nach dem Beitritt eines Nodes jeden Abschnitt der globalen Konfiguration und jede Direktive einmal, damit der Node die aktuellen Werte erhält; bis dahin läuft er mit Standardwerten (Tagesbetrieb).
Ein separater Web-Node muss nicht in der Fleet-Topologie stehen. DNS- und Mail-Nodes brauchen dagegen einen Topologie-Eintrag, siehe „Die Fleet-Topologie ändern“.
Einen DNS-Secondary hinzufügen
- Neuer Host mit dem
dns-Host-Layer und dem Node Agent; registriere ihn mit der Rolledns-secondaryund dem Lease-Zweckdns. Ein Secondary läuft nie auf dem Host des DNS-Primary. - Auf dem Node:
activate-nova-bind-dynamic-zones.sh activate; Capabilitiesdns.secondary.apply.v1,dns.keyring.apply.v1,platform.server.apply.v1,platform.address.apply.v1,platform.config.apply.v1;nova-controlpanel-dns-engine.socketund den Agent-Timer aktivieren. - Als Owner: Plattform-Server nur mit
dns_server, dann den Endpunkt des Nodes (öffentlicher Nameserver-FQDN mit abschließendem Punkt, private Transferadresse) unter Systemverwaltung → DNS-Server & TSIG (/nova/infrastructure/dns-fleet) oder mitPUT /api/next/v1/dns-node-endpoints/{node_id}. - Erlaube 53/tcp und 53/udp zwischen den Transferadressen von Primary und Secondary.
- Nimm den Node in den Selektor
dns.secondary-nodesder Pläne auf.
Nova erzeugt den TSIG-Schlüssel für das Paar, installiert die Keyrings auf beiden Nodes und repliziert die Primärzonen des Plans bei ihrer nächsten Änderung oder ihrem nächsten Abgleich.
Wichtig: Der Node muss in der Fleet-Topologie stehen (bis zu acht Secondaries). Einen noch nicht enthaltenen Node fügst du nach seiner Registrierung und vor Schritt 3 mit einem Topologiewechsel hinzu.
DNS-TSIG-Schlüssel rotieren
Als Owner unter Systemverwaltung → DNS-Server & TSIG (/nova/infrastructure/dns-fleet) oder mit POST /api/next/v1/dns-tsig-keys/rotations. Die neuen Schlüssel werden an die Keyrings verteilt, bevor die alten außer Dienst gehen. Die Seite zeigt jedes Schlüsselpaar und den Keyring-Zustand pro Node. Eine zeitgesteuerte Rotation gibt es noch nicht.
Firewall-Verwaltung aktivieren
Firewall-Änderungen brauchen einen unabhängigen Wiederherstellungsweg; deshalb bleiben sie aus, bis du ihn bereitstellst.
- Erzeuge ein Ed25519-Schlüsselpaar außerhalb des Panel-Hosts. Bewahre den geheimen Schlüssel offline auf.
- Auf dem Panel-Host: Installiere den öffentlichen Schlüssel (base64url, ohne Padding) als
/etc/nova-controlpanel/firewall-recovery-public-key.base64(root,0644). - Auf jedem Node, dessen Firewall Nova verwaltet, trägst du in
/etc/nova-controlpanel-node-agent/runtime.envals zusammengehörigen Satz ein:NOVA_AGENT_FIREWALL_RECOVERY_PUBLIC_KEY_BASE64=<same key>,NOVA_AGENT_MANAGEMENT_TCP_PORT=22,NOVA_AGENT_MANAGEMENT_PROBE_ADDRESS=<independent recovery or control address>. Dann ergänzt duplatform.firewall.apply.v1bei den Schreib-Capabilities. Prüfe mitphp /opt/nova-controlpanel-node-agent/apps/node-agent/bin/verify-platform-administration-firewall-configuration.php. - Als Owner: Gib dem Plattform-Server die Firewall-Rolle (
PATCH /api/next/v1/servers/{id}mit{"firewall_server":true}). - Jeder Firewall-Schreibvorgang braucht eine Wiederherstellungs-Bestätigung für genau diese Regelsatz-Revision unter
/etc/nova-controlpanel/firewall-recovery/<server_id>.json, signiert außerhalb des Panel-Hosts. Ohne sie antwortet der Schreibvorgang mit409 FIREWALL_SAFETY_REQUIRED.
Wichtig: Achte darauf, dass deine Firewall-Regeln SSH, den Panel-Port und die internen Ports (19443, Lease-Ports, Gateway-Port, DNS-Transfers) für die Fleet offen halten.
Plan, Reseller und Kunde anlegen
- Kunden & Leistungen → Vorlagen: Lege eine Kundenvorlage mit den Limits (Dimensionen) und Platzierungen an (
web.nodes,mail.nodes,database.nodes,dns.primary-nodes,dns.secondary-nodes, PHP-Modi) und veröffentliche sie. Nicht aufgeführte Dimensionen sind deaktiviert. - Kunden & Leistungen → Reseller / Kunden → Neu: Das Onboarding zeigt eine Vorschau (15 Minuten gültig, ohne Wirkung) und wendet sie dann mit dem Initialpasswort an. Nur Administratoren legen Reseller an.
- Domainzuordnung: Weise die Domains des Kunden zu (verwaltete Domains). Schreibvorgänge für DNS, Mail und Web zu einer Domain brauchen diese Zuordnung.
- Bitte den Kunden, eine Wiederherstellungsadresse zu verifizieren (Einstellungen → Sicherheit) und MFA einzurichten.
Ein Planwechsel ist eine Kontoänderung (API: PATCH /clients/{id} mit {"plan":{"template_version_id":"ctv_..."}}; eigene Abweichungen des Kunden bleiben erhalten). Ein gekündigtes Konto kann nach 24 Stunden gelöscht werden, wenn delete-preview keine Hindernisse zeigt.
Die Fleet-Topologie ändern
Damit fügst du einen Node hinzu, ergänzt eine Rolle, entfernst eine leere Rolle oder einen leeren Node oder ersetzt einen Node.
Vorbereiten
| Vorhaben | Vorbereitung |
|---|---|
| Lizenz | Eine wachsende Topologie wird über die lizenzierte Node-Anzahl hinaus verweigert (NOVA_LICENSE_NODE_LIMIT). Installiere zuerst eine Lizenz für die neue Anzahl. |
| Verlorener Node | Ein Node, der sich nie leeren lässt, wird zuerst aufgegeben (Wiederherstellung) und dann hier entfernt. |
| Node hinzufügen | Host-Layer und Node Agent auf dem Node, Registrierung (Installation), dann die next_node-Zeile mit nova-node-bootstrap.php anlegen. Eine neue server_id darf noch nicht vergeben sein. |
| Rolle hinzufügen | Host-Layer für den neuen Rollensatz auf dem Node, dann der Fabric-Rollenablauf: node-role-request STATE NEW_ROLES (Node), node-role-sign und node-role-register PKI ROLE_SIGNED AGENT_CERT OPERATIONS_ROOT (Control-Host), node-role-install STATE ROLE_SIGNED CONFIG LEASE_SERVER_CA PURPOSE=ORIGIN... (Node), Node Agent neu starten. |
| Rolle oder Node entfernen | Zuerst alles darauf verschieben oder löschen (Ressourcen, Backups, offene Operationen, Mandanten-Platzierungen; bei einem Node auch sein Plattform-Server und Blueprint-Platzierungen). Sonst wird der Wechsel mit den Zählern abgelehnt, zum Beispiel role mail: mailboxes=2. |
| Node ersetzen | Neuen Node hinzufügen, alles verschieben, alten Node entfernen – drei Wechsel; ein Umbenennen gibt es nicht. |
Planen
Schreibe die neue Topologie in eine neue Datei und lass Nova die Deklaration berechnen:
umask 077
php /opt/nova-controlpanel/application/current/src/api/bin/native-topology-change.php plan \
/etc/nova-controlpanel/operations-client/agent-fleet.json $IN/agent-fleet-2.json > $IN/topology-change-2.jsonPrüfe sie. Kopiere das aktive Profil nach $IN/profile-topology-2.json und ändere nur native_dns.topology_source_file (auf die neue Datei); andere Änderungen gehören in eine eigene Rekonfiguration.
Ändern, prüfen, akzeptieren
$I reconfigure "$COMB" "$SHA" $IN/profile-topology-2.json "$S" --topology-change $IN/topology-change-2.json
$I verify "$COMB" "$SHA" $IN/profile-topology-2.json "$S"
$I accept "$COMB" "$SHA" $IN/profile-topology-2.json "$S"Ein rollback vor dem Akzeptieren stellt die vorherige Topologie wieder her.
Danach
- Nach einem hinzugefügten Node oder einer Rolle: Plattform-Server und Dienste, Schreib-Capabilities des Nodes, bei Bedarf
fresh-installation-enable.php, Plan-Platzierungen. - Nach einer entfernten Rolle: den Fabric-Rollenablauf mit dem reduzierten Satz ausführen.
- Nach einem entfernten Node: seine Registrierung widerrufen (
OPERATIONS_DATABASE=... php /opt/nova-controlpanel/operations/bin/agent-node.php revoke NODE_ID) und den Host stilllegen.
Der Control-Plane-Node wird nie hinzugefügt oder entfernt und behält master und web.
Weitere Kurzverweise
| Aufgabe | Vorgehen |
|---|---|
| Website-Backups aktivieren | siehe Backups |
| Workspace-Dateimanager und Uploads aktivieren | Release mit nativem Plattform-Bundle, Workspace-CA anlegen, Gateway und Leser in einer Rekonfiguration aktivieren, den Workspace-Node jedes Web-Nodes registrieren, dann Job-Abbruch, dann Uploads mit Profil v27 und node-capabilities <node> upload – siehe Workspace |
| Herausfinden, warum eine Anfrage scheiterte | die req_...-ID aus der Fehlermeldung nehmen und auf dem Control-Host die Support-Referenz abfragen – siehe Fehlersuche |
| Diagnosedaten für den Support sammeln | nova-support-bundle --since 2h auf jedem betroffenen Host |
| Betriebssystem-Updates einspielen | apt-get update && apt-get upgrade ist jederzeit erlaubt; für einen neuen Kernel neu starten und die Prüfliste „Nach einem Neustart“ abarbeiten (Tagesbetrieb, Updates) |
| Einen endgültig verlorenen Node aufgeben | siehe Wiederherstellung |
Zertifikate erneuern
| Zertifikat | Laufzeit | Vorgehen |
|---|---|---|
| Panel-TLS | deine Wahl (90 Tage bei einer öffentlichen ACME-CA) | neue Dateien unter die tls.*-Pfade des Profils legen, dann nova-panel-certificate.sh check CERT KEY und replace CERT KEY (behält das alte Paar, lädt apache2@nova neu, stellt bei Fehler wieder her; rollback tauscht zurück). Mit ACME replace aus dem Deploy-Hook aufrufen |
| Agent-Fabric (Coordinator, Nodes, Lease-Clients) | Leaves 825 Tage, CAs 3650 Tage (ältere Installationen: CAs so lang wie die Leaves) | mit nova-agent-fabric.sh status prüfen; Nodes mit node-renew-request/-sign/-install/-register/-finish, den Coordinator mit coordinator-renew und coordinator-renew-install erneuern, ohne Ausfall. CA-Rotation ist manuell |
| Workspace-Gateway | höchstens 825 Tage | nova-workspace-fabric.php gateway-issue |
| Workspace-Node | von node-issue ausgestellt | node-issue ... --rotate |
Den Ablauf siehst du unter Betrieb & Diagnose → Fleet & Agenten (Fabric-Zertifikate, Warnung ab 60 Tagen) und mit nova-panel-certificate.sh status. Vollständiges Verfahren: Zertifikate.
Eine fail2ban-Sperre aufheben
Betrieb & Diagnose → Fleet & Agenten → fail2ban-Sperren: Server wählen, Gesperrte Adressen abrufen, Entsperren. Dafür braucht der Node host-security.fail2ban.v1 in seinen Schreib-Capabilities (ein früher registrierter Node zusätzlich einen node-register-Lauf auf dem Control-Host). Auf dem Host selbst: nova-fail2ban.sh unban ADDRESS [JAIL]. Nimm Administrator- und Fleet-Netze mit nova-fail2ban.sh install --ignore-ip=... auf, damit sie nie gesperrt werden. Details: Sicherheit.
Die Lizenz installieren oder erneuern
nova-update license show-id liefert die Installations-ID. Für sie wird die Lizenz ausgestellt; installiere sie mit nova-update license install FILE (oder unter Einstellungen › Lizenz, Step-up erforderlich) und prüfe mit nova-update license status. Eine Verlängerung ist eine neue Lizenz mit späterem issued_at. Siehe Lizenz.
Einen verlorenen zweiten Faktor zurücksetzen
Hat ein Administrator (oder der Owner) den Authenticator und alle Wiederherstellungscodes verloren, führt ein Root-Operator auf dem Control-Host aus:
php /opt/nova-controlpanel/application/current/src/api/application/bin/nova-identity-mfa-break-glass.php reset <login|prn_id> '<reason>'Prüfe vorher die Identität der anfragenden Person über einen unabhängigen Kanal. Siehe Sicherheit.
Externer SMTP-Relay
Die Mailzustellung der Application (Wiederherstellungs-, Sicherheits- und Support-Mails sowie Step-up-Codes per E-Mail) funktioniert nur, wenn der Host Mails an die Ziel-Mailserver ausliefern kann. Sperrt dein Provider oder das Netz ausgehende Verbindungen auf TCP/25, hilft auch der Umweg über den internen Mail-Node nicht. Dann richtest du einen authentifizierten SMTP-Relay ein.
Benötigte Angaben
- Hostname des Relays;
- Port
587mit STARTTLS oder Port465mit implizitem TLS; - Benutzername;
- Passwort oder ein vom Anbieter ausgestelltes App-Passwort;
- autorisierte Absenderadresse und Absendername;
- ein Server-Zertifikat einer vertrauenswürdigen CA, dessen Name zum Hostnamen des Relays passt.
Wichtig: Gib Secrets nur über das schreibgeschützte Feld der Systemkonfiguration in Nova ein. Sie gehören in kein Repository, in keine Protokolldatei und in keinen Chat.
Einrichten
Unter Einstellungen → Systemkonfiguration → Mail setzt du:
- SMTP-Zustellung aktiviert;
- SMTP-Host und Port;
- Verschlüsselung (
tlsfür STARTTLS odersslfür implizites TLS); - SMTP-Benutzer und SMTP-Passwort;
- Absenderadresse und -name des Administrators.
Dieselbe Änderung ist über die authentifizierte API /api/next/v1/system-config/mail möglich. Sie ist an eine Revision gebunden und braucht die aktuelle bearbeitbare Revision, ein einmal verwendbares CSRF-Token und einen Idempotency-Key. Das Passwort ist nur schreibbar und erscheint danach nur noch als smtp_password_configured=true.
Abnahme
Bevor du E-Mail als verfügbar betrachtest, muss alles Folgende gelingen:
- TLS verbindet sich zum konfigurierten Hostnamen mit vollständiger Zertifikatsprüfung.
- Die SMTP-Authentifizierung gelingt, ohne Zugangsdaten preiszugeben.
- Eine Reauthentifizierungs-Anfrage liefert
202und stellt genau eine Nachricht in die Warteschlange. - Das Empfängerpostfach erhält diese Nachricht im vorgesehenen Zeitfenster.
- Der Einmalcode wird einmal akzeptiert, erzeugt genau eine Capability-Freigabe und wird bei Wiederverwendung abgelehnt.
- Die Mail-Warteschlange enthält keine zurückgestellten oder unzustellbaren Reste dieses Tests.
- Browser-Benachrichtigungen funktionieren unabhängig davon weiter.
Zurücknehmen
Notiere vor der Änderung des Mail-Abschnitts dessen Revision und die nicht geheimen Werte. Bei einem Fehler stellst du die vorherigen nicht geheimen Werte über dieselbe Oberfläche oder API wieder her und löschst oder ersetzt das Relay-Passwort über den dafür vorgesehenen Secret-Ablauf. Bearbeite die Datenbank nicht direkt.
Hinweis: Browser-Push bleibt ein Benachrichtigungskanal für den Betrieb. Er ersetzt bewusst nicht die unabhängige E-Mail- oder Wiederherstellungscode-Bestätigung, die der Step-up verlangt.
Web-Statistik (Beta)
Die Nova-Web-Statistik ist in Version 1.0 eine optionale Beta pro Website, die neben AWStats/Webalizer läuft. AWStats bleibt die Standardstatistik; die Beta dient dazu, beide auf echten Servern zu vergleichen, bevor Novas Statistik AWStats in Version 1.1 ablöst.
| Kennzahl | AWStats | Nova-Beta |
|---|---|---|
| Eindeutige Besucher | verschiedene volle IP-Adressen pro Monat; „Besuche“ pro 30 Minuten | täglich verschiedene (/24- oder /48-Netz + Browserklasse); ein Haushalt hinter einem /24 zählt einmal pro Browserklasse |
| Seiten / Hits | Seiten und Hits ohne Robots, Codes 200/304 | Seitenaufrufe (Menschen, 200/304, keine Assets); Anfragen = alle Zeilen |
| Robots | eigene Robot-Datenbank, separat ausgewiesen | feste User-Agent-Liste, als Bot-Anfragen ausgewiesen |
| Tagesgrenze | Logzeit | Logzeit; ein Tag ist 15 Minuten nach Mitternacht abgeschlossen |
Seitenaufrufe und Bytes sollten wenige Prozent vom „viewed“-Traffic in AWStats abweichen; eindeutige Besucher liegen niedriger (Adresskürzung, tägliche Zählung). Ist eine klassische Engine aktiv, verlinkt die Statistikseite auf deren Ausgabe (/stats/). Vorläufige Tage (heute, gestern vor Tagesabschluss) werden heller dargestellt.
Prüfungen für Betreiber
- Node:
systemctl status nova-controlpanel-web-statistics.service– die JSON-Quittung enthält einnova_beta-Objekt mitprocessed,failed(Code pro Website) undforgotten(Beta abgeschaltet oder Website entfernt). - Application:
nova-application-web-statistics.servicegibtsubmitted,pending,days_recorded,unavailable(Operations oder Node-Capability nicht bereit) undpurgedaus. - Die lesende Node-Capability
web.statistics.collectwird bei der Registrierung für die Rollewebaktiviert. Ein früher registrierter Node erhält sie, wenn das kombinierte Upgrade auf dieses Release akzeptiert wird; nur ein Node ohne erfassten Rollensatz braucht noch einen Rollenwechsel oder eine neue Registrierung. Ein Eintrag inNOVA_AGENT_WRITE_CAPABILITIESist nicht nötig.