Voraussetzungen

Wie du jeden Host vor der Installation vorbereitest – Plattform, Namen, Betriebssystem, Plattform-Marker, privates Netzwerk, Firewall, Quota-Volume und Hetzner Cloud.

Überblick

Führe diese Schritte auf jedem Host vor der Installation aus. Befehle laufen als root.

1. Unterstützte Plattformen

PlattformCodenamePHPStatus
Ubuntu Server 24.04 LTSnoble8.3primär
Debian 13trixie8.4unterstützt
  • Verwende ein sauberes, minimales Server-Image. Nova übernimmt keinen Server, den ein anderes Panel konfiguriert hat. Die Installer verweigern einen Host, auf dem noch die Legacy-Basis des bisherigen Hosting-Panels installiert ist. Einen Umzug beschreibt das Kapitel Umzug.
  • Der kombinierte Installer unterstützt nur Apache.
  • Alle Hosts einer Flotte verwenden dieselbe Plattform. Ein Release-Bundle ist für genau eine Plattform gebaut, und der Installer verweigert einen Host einer anderen Plattform.
  • Zwischenreleases, andere LTS-Versionen, andere Debian-Versionen und abgeleitete Distributionen werden nicht unterstützt.

Plattform prüfen:

sh
. /etc/os-release; printf '%s %s %s\n' "$ID" "$VERSION_ID" "$VERSION_CODENAME"
# expected: ubuntu 24.04 noble   or   debian 13 trixie

2. Hostname, DNS und Zeit

  • Gib jedem Host einen stabilen, voll qualifizierten Namen (FQDN).
  • Wähle einen Panel-Namen (zum Beispiel panel.example.net), der keine Kunden-Website ist. Veröffentliche seinen A/AAAA-Eintrag, bevor du ein Zertifikat anforderst.
  • Mail-Hosts brauchen zueinander passende Forward- und Reverse-DNS-Einträge.
  • Die Zeit muss synchronisiert sein (timedatectl status zeigt System clock synchronized: yes).

3. Zustand des Betriebssystems

Warte zuerst, bis die Jobs des ersten Starts fertig sind. Auf Ubuntu-Cloud-Images halten cloud-init und unattended-upgrades eine Weile die dpkg-Sperre. Die Paketschicht von Nova wartet nicht auf diese Sperre.

sh
cloud-init status --wait            # Ubuntu cloud images
pgrep -a unattended                 # must print nothing before the install

Bringe den Host dann auf den aktuellen Stand und starte neu, wenn ein neuer Kernel installiert wurde:

sh
apt-get update && apt-get -y full-upgrade

Die Web-Quota-Prüfung betrachtet den laufenden und den neuesten installierten Kernel. Starte deshalb neu, bevor du das Quota-Volume einrichtest, damit beide gleich sind.

Installiere zuletzt die Werkzeuge, die die Installer brauchen: python3, php8.x-cli (8.3 auf Ubuntu, 8.4 auf Debian) und openssl.

sh
apt-get install -y python3 php8.3-cli openssl    # Ubuntu 24.04
apt-get install -y python3 php8.4-cli openssl    # Debian 13

Alles Weitere bringt das versiegelte Paket-Bundle (Steuerhost) bzw. die Host-Schicht (nova-host-bootstrap.py, alle anderen Hosts) mit, zum Beispiel zstd für Website-Backups auf Web-Hosts und python3-systemd für das Journal-Backend von fail2ban auf dem Steuerhost. Um fail2ban auf einem separaten Node kümmerst du dich selbst: Installiere dort fail2ban und python3-systemd, wenn du die Jails von Nova nutzen willst (siehe Sicherheit).

Wichtig: Installiere keinen Web-, Mail- oder DNS-Stack von Hand. Das erledigt Nova.

4. Was Nova installiert

Der kombinierte Installer bringt ein versiegeltes, per Digest gebundenes Paket-Bundle mit, das aus den Paketquellen der Distribution selbst aufgelöst wird (keine fremde PHP-Quelle). Auf dem Steuerhost installiert er das Bundle und übernimmt dann die Rollen dieses Nodes; jeder andere Node erhält seine Rollen mit nova-host-bootstrap.py --mode install.

RolleKomponenten
controlApache 2.4, MariaDB 10.11+, PHP 8.3 (Ubuntu) bzw. 8.4 (Debian) FPM/CLI (cURL, MySQL, SQLite, Mbstring, Intl, XML, ZIP, GD), OpenSSL, Python 3 mit python3-systemd (fail2ban-Journal), ACL, cron, nftables (Firewall), HAProxy (SNI-Router, aus, bis er eingeschaltet wird)
webApache 2.4 mit suEXEC und mod_fcgid, PHP FPM/CGI/CLI, quota, ACL, logrotate, AWStats, rsync, zstd, jailkit und wget (Cron-Jobs der Websites)
mailPostfix mit LMDB-Maps und den Cyrus-SASL-Plugins (Relay), Dovecot (IMAP, POP3, LMTP, ManageSieve, Sieve), Rspamd, ClamAV, fetchmail (Mailabruf), Mailman 3 mit python3-pymysql (Mailinglisten), curl, rsync
dnsBIND 9
databaseMariaDB-Server und -Client

Das versiegelte Bundle des Steuerhosts enthält außerdem die Pakete des Node Agent (acl, e2fsprogs, fetchmail, iproute2, jailkit, libsasl2-modules, mailman3, nftables, python3-pymysql, python3-systemd, quota, util-linux, wget, zstd) sowie haproxy. Mail-Benutzer authentifizieren sich gegen die nativen Dateien von Nova, FTP (Pure-FTPd, optional) über den externen Authentifizierungsanbieter von Nova; keines von beiden nutzt MariaDB.

Nova installiert keine Hardware-Firmware und keinen CPU-Microcode (firmware-*, *-microcode).

5. Host-Plattform-Marker

Der kombinierte Installer und die Paketschicht arbeiten nur auf einem Host, den du ausdrücklich für Nova bestimmt hast. Das hältst du mit einer Datei fest, die Plattform und Webserver nennt:

sh
install -d -m 0755 /etc/nova-controlpanel
printf 'nova-controlpanel-host-platform:%s:apache\n' ubuntu2404 > /etc/nova-controlpanel/host-platform   # or debian13
chmod 0644 /etc/nova-controlpanel/host-platform
  • Ohne diese Datei schlägt jeder kombinierte Befehl mit host platform marker required fehl.
  • Nennt sie eine andere Plattform als das Release-Bundle, scheitert er mit host platform marker differs from candidate.

6. Privates Netzwerk

Mehrere Hosts brauchen ein gemeinsames privates Netzwerk (RFC 1918, zum Beispiel 10.0.0.0/16), das alle verbindet. Die private Adresse des Steuerhosts wird zur Fleet-Adresse. Ein einzelner Host verwendet 127.0.0.1 als Fleet-Adresse.

Prüfe jeden Host:

sh
ip -4 -o addr show | awk '{print $2, $4}'
python3 /path/to/nova-controlpanel/src/installer/host/nova-fleet-network.py detect
# expected: {"address": "10.x.y.z", ...} with exactly one private address

Ubuntu: privates Interface nach dem ersten Start angehängt. Manche Anbieter hängen das private Interface erst nach dem ersten Start an. Ubuntu lässt es dann unkonfiguriert, und der Host hat keine private Adresse. Konfiguriere es mit netplan (Interface-Namen ersetzen):

sh
cat > /etc/netplan/60-private.yaml <<'EOF'
network:
  version: 2
  ethernets:
    enp7s0:
      dhcp4: true
EOF
chmod 0600 /etc/netplan/60-private.yaml
netplan apply

Debian: Ein Interface, das nach dem Start nicht aktiv ist, braucht einen Eintrag in /etc/network/interfaces.d/ (oder in der Netzwerkkonfiguration des Anbieters).

Das gilt für jedes Interface, das nach dem Start nicht aktiv ist. Der Agent-Koordinator versucht seine Bindung nach dem Start eine Weile erneut, kann aber keine Adresse binden, die nie erscheint.

7. Firewall

  • Lass die Host-Firewall eingeschaltet (UFW bzw. nftables). Schalte sie nie ab, damit eine Installation durchläuft.
  • Öffentlich: nur die Dienste der Rollen des Hosts (siehe Überblick). Beschränke SSH und den Panel-Port wo möglich auf vertrauenswürdige Quelladressen.
  • Privates Netzwerk – nur von den anderen Hosts der Flotte erlauben:
PortZielWer
19443/tcpSteuerhostjeder Node
Lease-PortsSteuerhostNodes mit dem jeweiligen Zweck
Port des Workspace GatewaySteuerhostWeb-Nodes
53/tcp und 53/udpzwischen DNS-Primary und SecondariesZonentransfer und NOTIFY über die registrierten Transfer-Adressen
3306/tcpDatenbank-Nodeswenn Websites auf anderen Hosts sie nutzen

8. Web-Nodes: Quota-Volume

Jeder Host mit der Rolle web braucht ein separates, frisches, unformatiertes Blockgerät für die Website-Daten (zum Beispiel ein Cloud-Volume). Nova setzt darauf die Speicherplatz-Quota je Website durch. Einen Modus ohne Quota gibt es nicht, und eine Loop-Datei wird nicht unterstützt.

  • Hänge das Gerät vor der Installation an. Formatiere und mounte es nicht.
  • Eingerichtet wird es mit nova-web-node-quota.sh setup DEVICE, nachdem der Node Agent installiert ist (siehe Installation).

Ubuntu 24.04: Kernel-Modul für die Quota

Web-Nodes setzen die Quota auf ext4 durch (quota_v2). Ubuntu-Cloud-Kernel (linux-image-virtual) liefern dieses Modul nur in linux-modules-extra-<kernel>. Die Web-Rolle der Host-Schicht installiert es nur für den laufenden Kernel.

Nova installiert linux-image-extra-virtual nicht, weil dieses Metapaket über linux-image-generic auch linux-firmware, intel-microcode und amd64-microcode nach sich zieht. Jeder neue Kernel braucht deshalb sein eigenes linux-modules-extra-<kernel>:

  • nova-web-node-quota.sh installiert auf einem ext4-Quota-Web-Node den Kernel-Hook /etc/kernel/postinst.d/nova-web-quota-module. Installiert ein Kernel-Update (zum Beispiel über unattended-upgrades) einen Kernel ohne quota_v2, lässt der Hook die Konfiguration dieses Kernels fehlschlagen, bevor update-grub ihn zum Standard-Boot-Kernel macht. Er protokolliert das Problem (journalctl -t nova-web-quota) und wiederholt es bei jedem APT-Lauf. Der Host bootet weiter den funktionierenden Kernel.
  • Reparatur: apt-get install --no-install-recommends linux-modules-extra-<kernel>, danach dpkg --configure -a. Der Quota-Preflight nennt dasselbe Paket für den Kernel des nächsten Starts.

Wer automatische Abdeckung bevorzugt, darf linux-image-extra-virtual selbst aus dem Distributionsarchiv installieren; Nova verlangt es weder, noch entfernt es dieses Paket.

Debian 13

Debian 13 liefert das Modul quota_v2 mit dem Kernel-Image aus, ein zusätzliches Kernel-Paket ist nicht nötig. Der Kernel-Hook, den nova-web-node-quota.sh installiert, lässt Debian-Kernel immer passieren.

9. Hetzner Cloud

Was du in der Hetzner Cloud wählst:

PunktWahl
ImageUbuntu 24.04 (primär) oder Debian 13; dasselbe Image für jeden Server der Flotte
Standortein Standort für die ganze Flotte; bei einem Umzug vom bisherigen Hosting-Panel derselbe Standort wie die Altserver (eine Primary IP wandert nur innerhalb ihres Standorts)
Privates Netzwerkein Hetzner-Netzwerk (zum Beispiel 10.0.0.0/16), an jeden Server angehängt; die Adresse des Steuerhosts darin ist die Fleet-Adresse. Unter Ubuntu ein nach dem ersten Start angehängtes Netzwerk mit netplan konfigurieren (Abschnitt 6)
Web-Quota-Volumeein Hetzner Volume je Web-Host, angelegt ohne „format“ und „automount“; seinen Pfad /dev/disk/by-id/scsi-0HC_Volume_<id> mit nova-web-node-quota.sh setup verwenden
Primary IPsauto_delete=false bei den IPs setzen, die du behalten willst; den Reverse-DNS (PTR) von IPv4 und IPv6 eines Mail-Hosts auf seinen Mail-Hostnamen setzen
Firewalleine Hetzner Cloud Firewall vor der Host-Firewall, mit den öffentlichen Ports aus Abschnitt 7; interne Ports nur im privaten Netzwerk
Snapshots und BackupsHetzner-Server-Snapshots und -Backups umfassen die Server-Platte, nicht angehängte Volumes (siehe Updates)

10. Kapazität

  • Root-Dateisystem: mindestens 4 GiB frei und 100.000 freie Inodes, beschreibbar (df -h /, df -i /, findmnt -n -o OPTIONS /).
  • Plane separate Kapazität für Websites (Quota-Volume), Mail, Datenbanken, Logs und Backups.

11. Bevor du installierst

  • Erstelle und teste ein vollständiges Backup von allem, was schon auf dem Host liegt.
  • Halte Geheimnisse aus der Shell-History und aus Befehlsargumenten heraus. Der Installer liest jedes Geheimnis aus einer Datei (0600, Eigentümer root); nova-installer-inputs.php init erzeugt sie.
  • Notiere den Quell-Commit des Releases, das du installierst; du brauchst ihn im Installationsprofil.
  • Plane die TOTP-Einrichtung für den Owner: Native Schreibvorgänge werden nur zusammen mit MFA, TOTP-Einrichtung und Capability-Elevation eingeschaltet, und jede Aktion mit Step-up verlangt Passwort + TOTP.

Weiter geht es mit der Installation.