5.7 KiB
🛠️ Kapitel 6 – Vaultwarden (Docker, Debian‑12‑LXC) – Tutorial
🎯 Ziel Vaultwarden in einem Debian‑12‑LXC per Docker + Compose bereitstellen, hinter Nginx Proxy Manager (NPM) mit HTTPS und WebSockets veröffentlichen; Registrierungen deaktivieren, Admin‑Token setzen und Backups ermöglichen.
🧩 Was wir aufbauen
- Image:
vaultwarden/server:latest - Ports:
8000:80(Web/API),3012:3012(WebSocket/Live‑Sync) - Persistenz:
./data:/data→ Hostpfad/opt/vaultwarden/data - Konfig per
.env:DOMAIN,ADMIN_TOKEN,SIGNUPS_ALLOWED=false(+ optionalSMTP_*) - Reverse‑Proxy (NPM): Proxy Host für
pass.DEINE‑DOMAIN.tld, Custom Location/notifications/hub → 3012, SSL (Let’s Encrypt)
✅ Voraussetzungen (konkret)
- LXC: Debian 12 (Bookworm) – erstellt nach Grundkapitel Erster LXC – Grundsetup & SSH (hier nur Verweis)
- Specs: 1 vCPU · 512 MB–1 GB RAM (512 MB empfohlen) · 4–8 GB Disk · statische IPv4 (z. B.
10.0.0.16/24), IPv6 optional - NPM läuft (separater LXC), Subdomain
pass.DEINE‑DOMAIN.tldzeigt auf NPM (DNS A/AAAA gesetzt) - Outbound‑Internet im LXC erreichbar; Hostports 8000/3012 frei
🔁 Platzhalter
<VW_IP>= IP des Vaultwarden‑LXC (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 Docker‑Repo 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, Enter → Strg+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: ✔️
SSL‑Tab:
- Request a new SSL Certificate (Let’s Encrypt)
- Force SSL, HTTP/2, HSTS: ✔️
Test: https://pass.DEINE-DOMAIN.tld → Loginseite sichtbar; Live‑Änderung zwischen zwei Clients testen.
👉 Die Custom‑Location leitet den WebSocket‑Kanal (Live‑Sync) korrekt weiter.
— — —
7️⃣ Admin‑Backend & Sicherheit
https://pass.DEINE-DOMAIN.tld/admin→ ADMIN_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 Live‑Sync / 502: NPM‑Location
/notifications/hub→ Port 3012 + Websockets ✔️ - Icons/Links fehlen: In
.envDOMAIN= https; danndocker compose restart vaultwarden - Container startet nicht:
docker compose logs --tail=200 vaultwarden - Let’s‑Encrypt‑Fehler: DNS‑Eintrag prüfen; Rate‑Limit abwarten
✅ Ergebnis
- Vaultwarden läuft hinter NPM mit HTTPS; WebSockets funktionieren
- Registrierungen aus, Admin‑Backend per Token geschützt
- Daten persistent unter
/opt/vaultwarden/dataund per Tar gesichert