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

5.7 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 und Backups ermöglichen.

🧩 Was wir aufbauen

  • Image: vaultwarden/server:latest
  • Ports: 8000:80 (Web/API), 3012:3012 (WebSocket/LiveSync)
  • Persistenz: ./data:/data → Hostpfad /opt/vaultwarden/data
  • Konfig per .env: DOMAIN, ADMIN_TOKEN, SIGNUPS_ALLOWED=false (+ optional SMTP_*)
  • ReverseProxy (NPM): Proxy Host für pass.DEINEDOMAIN.tld, Custom Location /notifications/hub → 3012, SSL (Lets Encrypt)

Voraussetzungen (konkret)

  • LXC: Debian 12 (Bookworm) erstellt nach Grundkapitel Erster LXC Grundsetup & SSH (hier nur Verweis)
  • Specs: 1 vCPU · 512MB1GB RAM (512MB empfohlen) · 48GB Disk · statische IPv4 (z.B. 10.0.0.16/24), IPv6 optional
  • NPM läuft (separater LXC), Subdomain pass.DEINEDOMAIN.tld zeigt auf NPM (DNS A/AAAA gesetzt)
  • OutboundInternet im LXC erreichbar; Hostports 8000/3012 frei

🔁 Platzhalter

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

— — —

1 System vorbereiten

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

👉 ca-certificates/curl/gnupg werden für das DockerRepo benötigt.

— — —

2 Docker & Compose installieren

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

👉 Offizielle Pakete, Compose als Plugin integriert.

— — —

3 Projekt anlegen & .env erstellen

mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
mkdir -p data
openssl rand -base64 48   # Token erzeugen und kopieren
nano .env

Inhalt (.env) Platzhalter ersetzen, Token einfügen:

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

Speichern: Strg+O, Enter → Beenden: Strg+X. 👉 DOMAIN zwingend https; ADMIN_TOKEN schützt /admin; Signups sind zu.

— — —

4 docker-compose.yml schreiben

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. 👉 ./data:/data = Persistenz auf dem Host.

— — —

5 Container starten & Logs prüfen

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

Erwartet: Meldungen wie Rocket has launched…. 👉 Erst prüfen, dann veröffentlichen.

— — —

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

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

Custom Location:

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

SSLTab:

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

Test: https://pass.DEINE-DOMAIN.tld → Loginseite sichtbar; LiveÄnderung zwischen zwei Clients testen. 👉 Die CustomLocation leitet den WebSocketKanal (LiveSync) korrekt weiter.

— — —

7 AdminBackend & Sicherheit

  • https://pass.DEINE-DOMAIN.tld/adminADMIN_TOKEN eingeben
  • Registrierung prüfen: aus
  • Optional SMTP eintragen und Testmail senden
  • Erstes Benutzerkonto anlegen; 2FA (TOTP/FIDO2) aktivieren 👉 Privat, sicher, sofort nutzbar.

— — —

8 Backup (Basis)

cd /opt/vaultwarden
# optional: kurz stoppen für maximale Konsistenz
# 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

👉 Ein Tar reicht als Grundlage; regelmäßig per Cron sichern.

— — —

🛠️ Fehlerhilfe (kurz)

  • Kein LiveSync / 502: NPMLocation /notifications/hub → Port 3012 + Websockets ✔️
  • Icons/Links fehlen: In .env DOMAIN = https; dann docker compose restart vaultwarden
  • Container startet nicht: docker compose logs --tail=200 vaultwarden
  • LetsEncryptFehler: DNSEintrag prüfen; RateLimit abwarten

Ergebnis

  • Vaultwarden läuft hinter NPM mit HTTPS; WebSockets funktionieren
  • Registrierungen aus, AdminBackend per Token geschützt
  • Daten persistent unter /opt/vaultwarden/data und per Tar gesichert