Installation
Von der frischen Maschine zum Panel
Ein Debian- oder Ubuntu-Server, Root per SSH-Schlüssel, eine Stunde Zeit. Der Weg unten richtet Control Plane und ersten Node auf derselben Maschine ein; weitere Nodes kommen später mit einem Befehl dazu.
Voraussetzungen
| Was | Wie |
|---|---|
| Betriebssystem | Debian 12 oder 13, Ubuntu 22.04 oder 24.04, amd64 oder arm64, frisch aufgesetzt |
| Zugang | Root über SSH-Schlüssel. Die Passwortanmeldung wird im ersten Schritt abgeschaltet |
| Name | Ein öffentlich auflösbarer Hostname für das Panel, etwa panel.example.com. WebAuthn verlangt eine sichere Herkunft; ohne echten Namen gibt es kein Zertifikat und ohne Zertifikat keinen Passkey auf fremden Geräten |
| Ports | 80 und 443 von außen für Domains und Let's Encrypt; 8444 und 8445 erreichbar für die Nodes; 8447 für Administratoren, wenn die WildFly-Konsole gebraucht wird; alles Weitere nach Rolle des Nodes (25, 53, 143, 587, 993 …) |
| Datenbank | PostgreSQL 16 für die Control Plane; MariaDB richtet der Agent für die Kunden ein |
| Swap | Hat der Node keinen, legt der Agent bei der Installation /kastra.swap an — ein Viertel des Arbeitsspeichers, 1 bis 4 GiB, auf ext4 oder xfs und nicht in einem Container. Ohne Swap beendet der Kernel bei der ersten Lastspitze einen Prozess |
-
Node vorbereiten
Schlüssel ausrollen, Passwortanmeldung aus,
LogLevel VERBOSE— nur damit protokolliert sshd den Fingerabdruck des Schlüssels, und nur darüber zeigt das Panel später, wann welcher Schlüssel benutzt wurde.ssh-copy-id root@<node> cat > /etc/ssh/sshd_config.d/kastra.conf <<'EOF' # MANAGED BY KASTRA - DO NOT EDIT PermitRootLogin prohibit-password PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes LogLevel VERBOSE EOF sshd -t && systemctl restart ssh -
Paketquelle eintragen
Kastra kommt als drei Debian-Pakete aus einem signierten apt-Repository. Der Kanal ist zugleich die apt-Suite:
stabilfür freigegebene Fassungen,testfür jeden Bau. Fang mit stabil an — umstellen geht später im Panel, und ab dann rollt das Panel selbst aus.curl -fsSL https://kastra.softwelop.com/apt/kastra-archive-keyring.asc \ | gpg --dearmor -o /usr/share/keyrings/kastra-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/kastra-archive-keyring.gpg] https://kastra.softwelop.com/apt stabil main" \ > /etc/apt/sources.list.d/kastra.list apt-get update -
Control Plane installieren
PostgreSQL, die beiden Pakete, die Zugangsdaten in
/etc/kastra/control-plane.env. Die Werte für Herkunft und Name müssen zur Adresse passen, unter der das Panel erreichbar sein wird — WebAuthn prüft streng, ein Wildcard gibt es nicht.apt-get install -y postgresql kastra-control-plane kastra-ui su - postgres -c "psql -c \"CREATE ROLE kastra LOGIN PASSWORD '<geheim>'\"" su - postgres -c "createdb -O kastra kastra" su - postgres -c "psql -d kastra -c 'CREATE EXTENSION IF NOT EXISTS pgcrypto'" cat > /etc/kastra/control-plane.env <<'EOF' KASTRA_DB_URL=jdbc:postgresql://localhost:5432/kastra KASTRA_DB_USER=kastra KASTRA_DB_PASSWORD=<geheim> KASTRA_HTTP_PORT=8443 KASTRA_GRPC_PORT=8444 KASTRA_RP_ID=panel.example.com KASTRA_ORIGINS=https://panel.example.com KASTRA_SESSION_SECRET=<mindestens 32 Zeichen> EOF chmod 0600 /etc/kastra/control-plane.env systemctl enable --now kastra-control-planeBeim ersten Start legt Flyway das Schema an und erzeugt Organisation, Tarif und den Administrator. Das Einmal-Token für die erste Anmeldung steht im Protokoll:
journalctl -u kastra-control-plane | grep -A3 Einmal-Token -
Panel über HTTPS
Der nginx-Vhost für die Oberfläche kommt aus dem Paket; das erste Zertifikat stellt die interne CA aus. Das ist der Auslieferungszustand, nicht der Regelfall: sobald der Name öffentlich auflöst, holt Einstellungen › Panel-Zertifikat eines von Let's Encrypt und erneuert es selbst.
kastractl panel cert --out /etc/kastra/panel nginx -t && systemctl reload nginxBis das echte Zertifikat da ist, meldet der Browser die Seite als unsicher. Notdürftig hilft,
/etc/kastra/panel/ca.crtals vertrauenswürdig im Browser zu hinterlegen — auf einem fremden Gerät geht das nicht, und WebAuthn verweigert den Passkey. -
Node anmelden
Auf dem Panel-Host ein Token erzeugen, auf dem Node den Agent anmelden. Der Fingerabdruck der CA ist Pflicht: beim Anmelden gibt es noch keine Vertrauensbasis, und ohne ihn nähme der Node jede Gegenstelle an.
kastractl node tokengibt den fertigen Befehl samt Fingerabdruck aus, das Panel unter Nodes › Node aufnehmen ebenso.# auf dem Panel-Host kastractl node token --hostname web01.example.com --roles web,db,dns,mail # auf dem Node apt-get install -y kastra-agent kastra-agent enroll --token <token> --server panel.example.com:8445 \ --hostname web01.example.com \ --ca-fingerprint <64 Hexzeichen> systemctl enable --now kastra-agentEin Token mit Hostnamen gilt nur für genau diesen Namen. Der Name bleibt danach, wie er ist — an ihm hängt das Zertifikat des Agents.
Der Agent baut die Verbindung ausgehend auf; auf dem Node muss dafür kein Port geöffnet werden. Was zur Rolle fehlt — Postfix, PowerDNS, MariaDB, CrowdSec — zeigt das Panel unter Nodes › Komponenten und richtet es auf Wunsch ein.
-
Erste Anmeldung
Mit dem Einmal-Token aus dem Protokoll oder, wenn es abgelaufen ist, mit einem Notzugang. Danach sofort mindestens zwei Passkeys registrieren und die zehn Wiederherstellungscodes sichern — ein Passwort für das Panel gibt es nur, wenn du es bewusst einrichtest.
kastractl auth emergency-token --user admin -
Kanal wählen und aktualisieren
Unter Einstellungen › Aktualisierung steht der Kanal. Das Panel holt täglich die Versionsauskunft, zeigt vor dem Einspielen den Changelog samt Eingriffen am Node und startet erst nach deiner Bestätigung — Node für Node, mit Rückfall auf die alte Fassung, wenn etwas schiefgeht. Was in welchem Kanal liegt, steht unter Änderungen.
Der Kanal stabil ist stabiler als test, nicht durchgeprüft. Vor jedem Update gilt: Sicherung eingerichtet und einmal probeweise zurückgeholt.
Weitere Nodes
Schritt 1 und 5 auf der neuen Maschine, mit einem neuen Token und den Rollen, die sie übernehmen soll. Ein Node kann nur Web sein, nur DNS oder nur Mail; die Menüpunkte im Panel richten sich nach den Rollen, die es gibt.
Ein weiterer Node verbindet sich über die Ports 8445 (Anmeldung) und 8444 (dauerhafte Verbindung) zum Panel-Host. Die Kastra-Firewall dort öffnet beide von selbst, eine Firewall beim Anbieter muss sie für den neuen Node freigeben. Und der Agent prüft, ob das Zertifikat der Control Plane auf genau die Adresse lautet, die in --server steht — ab Werk auf den Panel-Namen aus KASTRA_RP_ID, localhost, 127.0.0.1 und ::1.
Erreicht der neue Node die Control Plane über eine IP-Adresse oder einen Namen im internen Netz, gelingt die Anmeldung, die Verbindung danach aber nicht. Die Adresse gehört dann in KASTRA_CERT_NAMES in /etc/kastra/control-plane.env, durch Komma getrennt, gefolgt von systemctl restart kastra-control-plane. Die Control Plane stellt ihr Serverzertifikat dabei neu aus; die CA bleibt, angemeldete Nodes behalten ihre Zertifikate.
Wenn etwas nicht geht
Jede Fehlermeldung im Panel nennt einen Code und die Originalausgabe des Befehls, der gescheitert ist. Das Handbuch im Panel erklärt jede Seite. Und der Changelog sagt, ob es an der Fassung liegt. Einen Support dahinter gibt es nicht — das ist der Preis, und für die richtigen Leute ist es keiner.