Files
Homelab--Bratonein-Kontroll…/Kapitel 6/Tutorial.md

6.1 KiB
Raw Blame History

🛠️ Kapitel 6 Vaultwarden (Docker, Debian12LXC) Tutorial

Ziel: Vaultwarden in einem Debian12LXC per Docker + Compose bereitstellen, hinter Nginx Proxy Manager (NPM) mit HTTPS und WebSockets veröffentlichen; Registrierungen deaktivieren, AdminToken setzen, Backup einrichten.

Voraussetzungen (siehe Readme dieses Kapitels)

  • LXC existiert (Specs lt. Readme). SSH/Grundsetup siehe Grundkapitel „Erster LXC Grundsetup & SSH“.
  • NPM läuft, Subdomain z.B. pass.DEINEDOMAIN.tld zeigt auf NPM.

Platzhalter

  • <VW_IP> = IP des VaultwardenLXC, z.B. 10.0.0.16
  • DEINE-DOMAIN.tld = deine echte Domain

— — —

1 System vorbereiten Wir aktualisieren das System und installieren BasisTools.

apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release

Warum?

  • ca-certificates/curl/gnupg brauchen wir für das DockerRepository.

— — —

2 Docker & Compose installieren Wir richten die offizielle DockerQuelle ein und installieren Engine + ComposePlugin.

mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

Prüfen:

docker --version
docker compose version

Warum?

  • So bekommst du reproduzierbar die offiziellen Pakete; Compose ist als Plugin integriert.

— — —

3 Projekt anlegen & .env erstellen Wir legen das Arbeitsverzeichnis an, erzeugen ein sicheres AdminToken und tragen die Einstellungen in .env ein.

mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
mkdir -p data
openssl rand -base64 48
# Ausgabe kopieren (TOKEN) und im nächsten Schritt einfügen
nano .env

Inhalt für .env einfügen (Platzhalter ersetzen):

DOMAIN=https://pass.DEINE-DOMAIN.tld
ADMIN_TOKEN=HIER_DEIN_ERZEUGTES_TOKEN_EINFÜGEN
SIGNUPS_ALLOWED=false
# optional: SMTP, falls Mails gewünscht sind (Verifizierung/Reset)
# SMTP_HOST=smtp.example.com
# SMTP_FROM=pass@example.com
# SMTP_PORT=587
# SMTP_SECURITY=starttls
# SMTP_USERNAME=user
# SMTP_PASSWORD=deinPasswort

Speichern in Nano: Strg+O, EnterBeenden: Strg+X. Warum?

  • DOMAIN muss https sein (sonst fehlerhafte Assets/Links).
  • ADMIN_TOKEN schützt das AdminBackend.
  • SIGNUPS_ALLOWED=false verhindert offene Registrierungen.

— — —

4 docker-compose.yml schreiben Wir definieren den Container, die Ports und das DatenVolume.

nano docker-compose.yml

Inhalt einfügen:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    env_file: .env
    environment:
      - DOMAIN=${DOMAIN}
    volumes:
      - ./data:/data
    ports:
      - "8000:80"     # Web / API
      - "3012:3012"   # WebSocket (Live Sync)

Speichern: Strg+O, EnterStrg+X. Warum?

  • ./data:/data sorgt für Persistenz auf dem Host (/opt/vaultwarden/data).
  • Port 8000 für Web/API und 3012 für WebSockets.

— — —

5 Container starten & prüfen

docker compose up -d
docker compose logs -f --tail=50 vaultwarden

Erwartet: Meldungen wie Rocket has launched from http://0.0.0.0:80. Warum?

  • So siehst du direkt, ob der Start sauber war, bevor wir NPM konfigurieren.

— — —

6 NPM einrichten (Proxy, WebSockets, SSL) Proxy Host anlegen:

  • Domain Names: pass.DEINE-DOMAIN.tld
  • Scheme: http
  • Forward Hostname / IP: <VW_IP>
  • Forward Port: 8000
  • Block Common Exploits: ✔️ · Websockets Support: ✔️

Custom Location hinzufügen:

  • Location: /notifications/hub
  • Forward Hostname / IP: <VW_IP>
  • Forward Port: 3012
  • Websockets Support: ✔️

SSL aktivieren:

  • Request a new SSL Certificate (Lets Encrypt)
  • Force SSL, HTTP/2, HSTS: ✔️

Test: https://pass.DEINE-DOMAIN.tld → Loginseite sichtbar; nach Login LiveÄnderung zwischen zwei Clients testen. Warum?

  • Die CustomLocation leitet den WebSocketKanal korrekt weiter (LiveSync/Push).

— — —

7 AdminBackend & Sicherheit

  • AdminSeite: https://pass.DEINE-DOMAIN.tld/adminADMIN_TOKEN eingeben.
  • Registrierung prüfen: ist aus (kommt aus .env).
  • Optional SMTP setzen und Testmail senden.
  • Erstes Benutzerkonto anlegen; 2FA (TOTP oder FIDO2/YubiKey) aktivieren. Warum?
  • So bleibt die Instanz privat und zusätzlich abgesichert.

— — —

8 Backup (Basis) Daten liegen auf dem Host in /opt/vaultwarden/data.

cd /opt/vaultwarden
# optional für maximale Konsistenz kurz stoppen
# docker compose stop vaultwarden

tar -czf /root/vaultwarden-backup-$(date +%F).tar.gz data
# docker compose start vaultwarden
ls -lh /root/vaultwarden-backup-*.tar.gz

Warum?

  • Ein TarArchiv lässt sich leicht versionieren/auslagern; regelmäßige CronJobs sind schnell eingerichtet.

— — —

🛠️ Fehlerhilfe (kurz)

  • 502 / kein LiveSync: In NPM die Custom Location /notifications/hub → Port 3012 + Websockets prüfen.
  • Seite ohne Styles/Icons: In .env muss DOMAIN https enthalten; danach docker compose restart vaultwarden.
  • Container nicht da: docker ps prüfen; Logs: docker compose logs --tail=200 vaultwarden.
  • LetsEncryptFehler: DomainDNS prüfen; RateLimit beachten; später erneut anfordern.

Ergebnis

  • Vaultwarden läuft hinter NPM mit gültigem HTTPS, LiveSync funktioniert.
  • Registrierungen sind aus, AdminBackend ist durch Token geschützt.
  • Deine Daten liegen persistent unter /opt/vaultwarden/data und werden gesichert.