Zum Inhalt springen
vaultigen

Erste Schritte

Manuelle Installation

Vaultigen Schritt für Schritt auf einem Linux-Server mit PHP und eigener Datenbank installieren.

Diese Anleitung installiert Vaultigen direkt auf dem Host, mit eigenem PHP, Webserver und eigener Datenbank. Für die meisten Organisationen ist die Installation mit Docker Compose die bessere Wahl: Sie braucht kein PHP, Composer oder Node.js auf dem Host und richtet HTTPS, Worker und Scheduler selbst ein. Wählen Sie die manuelle Installation, wenn Sie SQLite, MySQL oder MariaDB, eine bestehende PHP-Umgebung oder keine Container verwenden möchten.

Planen Sie etwa eine Stunde ein, einschließlich des ersten Backups. Wenn Ihre Umgebung abweicht, erklärt die Härtungsanleitung die Gründe hinter jeder Einstellung.

Bevor Sie beginnen: Legen Sie fest, wo Sie die Schlüssel der Installation aufbewahren. Vaultigen erzeugt bei der Einrichtung mehrere Schlüsseldateien, und ihr Verlust macht Ihre Daten dauerhaft unlesbar. Halten Sie einen sicheren Ort bereit (eine Offline-Kopie und eine zweite Person, die darauf zugreifen kann).

1. Code und Abhängigkeiten bereitstellen

Führen Sie diese Befehle als unprivilegierter Benutzer aus, unter dem PHP läuft, in dem Verzeichnis, aus dem Sie ausliefern (zum Beispiel /var/www/vaultigen):

git clone https://github.com/vaultigen/vaultigen.git .
git checkout v1.0.0   # die gewünschte Version

composer install --no-dev --optimize-autoloader
npm ci
npm run build

2. Umgebungsdatei anlegen

cp .env.example .env
php artisan key:generate

Passen Sie .env an und setzen Sie mindestens:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://vault.example.com

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=vaultigen
DB_USERNAME=vaultigen
DB_PASSWORD=change-me

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=[email protected]
MAIL_PASSWORD=change-me
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME=Vaultigen

Läuft Vaultigen hinter einem Reverse Proxy oder Load Balancer, der TLS terminiert, setzen Sie zusätzlich VAULTIGEN_TRUSTED_PROXIES. Siehe Härtung.

3. Installationsidentität und Schlüssel erzeugen

php artisan vaultigen:initialize

Das schreibt zwei Dateien, die nur der Besitzer lesen darf, nach storage/app/private:

  • installation.json: die Installations-ID, den Audit-Integritätsschlüssel und ein reserviertes Passkey-Geheimnis.
  • kek.json: den Installations-Schlüssel (Key Encryption Key, KEK), der jeden Tresorschlüssel schützt.

Kopieren Sie beide Dateien jetzt in Ihre Hinterlegung, zusammen mit APP_KEY aus .env. Siehe Schlüsselverwaltung.

4. Datenbank migrieren

php artisan config:clear
php artisan migrate --force

5. Ersten Administrator anlegen

php artisan vaultigen:bootstrap [email protected] --name="Administrator"

Der Befehl fragt das Passwort verdeckt ab. Außerhalb der lokalen Entwicklung muss es mindestens 15 Zeichen lang sein und darf in keinem bekannten Datenleck vorkommen. Der Befehl ist absichtlich interaktiv; verwenden Sie kein --no-interaction.

6. Backup-Schlüssel erzeugen

php artisan vaultigen:backup-key:generate --if-missing

Das erzeugt storage/app/private/backup.json, den Schlüssel, mit dem Backups verschlüsselt werden. Er ist bewusst unabhängig vom Installationsschlüssel. Hinterlegen Sie ihn getrennt von den anderen Schlüsseldateien.

7. Webserver konfigurieren

Das Document Root zeigt auf public/. Nichts anderes im Verzeichnis darf erreichbar sein. Ein minimaler nginx-Serverblock:

server {
    listen 443 ssl http2;
    server_name vault.example.com;
    root /var/www/vaultigen/public;

    ssl_certificate     /etc/letsencrypt/live/vault.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vault.example.com/privkey.pem;

    client_max_body_size 30m;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.5-fpm.sock;
    }

    location ~ /\.(?!well-known) {
        deny all;
    }
}

server {
    listen 80;
    server_name vault.example.com;
    return 301 https://$host$request_uri;
}

Vaultigen setzt seine eigenen Sicherheits-Header (HSTS, X-Frame-Options, eine auf Framing ausgerichtete CSP und weitere). Protokollieren Sie am Proxy keine Request-Bodies.

8. Queue-Worker und Scheduler starten

Beide müssen dauerhaft laufen. Beispiel-Units für systemd:

# /etc/systemd/system/vaultigen-queue.service
[Unit]
Description=Vaultigen queue worker
After=network.target

[Service]
User=www-data
WorkingDirectory=/var/www/vaultigen
ExecStart=/usr/bin/php artisan queue:work --tries=1
Restart=always

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/vaultigen-scheduler.service
[Unit]
Description=Vaultigen scheduler
After=network.target

[Service]
User=www-data
WorkingDirectory=/var/www/vaultigen
ExecStart=/usr/bin/php artisan schedule:work
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now vaultigen-queue vaultigen-scheduler

Statt schedule:work können Sie einen Cron-Eintrag verwenden: * * * * * cd /var/www/vaultigen && php artisan schedule:run. Mit SQLite betreiben Sie genau einen Queue-Worker.

9. Installation prüfen

Melden Sie sich an, warten Sie eine Minute und öffnen Sie System → Installationsstatus. Jede Prüfung sollte grün sein: Datenbank, Sodium, Installationsidentität, Schlüssel, E-Mail, Heartbeats von Scheduler und Queue, freier Speicher und Lizenz.

10. Erstes Backup erstellen und Wiederherstellung üben

Öffnen Sie System → Operations und starten Sie ein Backup. Folgen Sie danach der Wiederherstellungsübung auf einer separaten Maschine. Tun Sie das, bevor Sie echte Passwörter speichern, nicht nach dem ersten Vorfall.

Für regelmäßige Backups VAULTIGEN_BACKUP_SCHEDULE_ENABLED=true ausdrücklich aktivieren; der bestehende Scheduler stellt standardmäßig nachts um 02:30 UTC einen Backup-Job in die Queue. Alten eigenen Backup-Cron vorher entfernen. Zeitplan und lokales Löschen sind standardmäßig aus. Siehe Backups für Konfiguration, getrennte Wiederherstellungsvoraussetzungen, externe Kopien und den Umgang mit unterbrochenen Läufen.

Weiter: Erste Schritte.

Einen Fehler gefunden? Schreiben Sie uns an [email protected].