Zum Inhalt
Getestet, wie es benutzt wird. Kastra ist nicht unter Produktionsbedingungen geprüft — auch der Kanal stabil nicht. Was das heißt.
test 26.10.28.2 stabil 26.10.12.1

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

WasWie
BetriebssystemDebian 12 oder 13, Ubuntu 22.04 oder 24.04, amd64 oder arm64, frisch aufgesetzt
ZugangRoot über SSH-Schlüssel. Die Passwortanmeldung wird im ersten Schritt abgeschaltet
NameEin ö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
Ports80 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 …)
DatenbankPostgreSQL 16 für die Control Plane; MariaDB richtet der Agent für die Kunden ein
SwapHat 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
  1. 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
  2. Paketquelle eintragen

    Kastra kommt als drei Debian-Pakete aus einem signierten apt-Repository. Der Kanal ist zugleich die apt-Suite: stabil für freigegebene Fassungen, test fü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
  3. 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-plane

    Beim 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
  4. 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 nginx

    Bis das echte Zertifikat da ist, meldet der Browser die Seite als unsicher. Notdürftig hilft, /etc/kastra/panel/ca.crt als vertrauenswürdig im Browser zu hinterlegen — auf einem fremden Gerät geht das nicht, und WebAuthn verweigert den Passkey.

  5. 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 token gibt 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-agent

    Ein 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.

  6. 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
  7. 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.