6.1 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, 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.DEINE‑DOMAIN.tldzeigt auf NPM.
Platzhalter
<VW_IP>= IP des Vaultwarden‑LXC, z. B.10.0.0.16DEINE-DOMAIN.tld= deine echte Domain
— — —
1️⃣ System vorbereiten Wir aktualisieren das System und installieren Basis‑Tools.
apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release
Warum?
ca-certificates/curl/gnupgbrauchen wir für das Docker‑Repository.
— — —
2️⃣ Docker & Compose installieren Wir richten die offizielle Docker‑Quelle ein und installieren Engine + Compose‑Plugin.
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 Admin‑Token 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, Enter → Beenden: Strg+X.
Warum?
DOMAINmuss https sein (sonst fehlerhafte Assets/Links).ADMIN_TOKENschützt das Admin‑Backend.SIGNUPS_ALLOWED=falseverhindert offene Registrierungen.
— — —
4️⃣ docker-compose.yml schreiben
Wir definieren den Container, die Ports und das Daten‑Volume.
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.
Warum?
./data:/datasorgt 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 (Let’s Encrypt)
- Force SSL, HTTP/2, HSTS: ✔️
Test: https://pass.DEINE-DOMAIN.tld → Loginseite sichtbar; nach Login Live‑Änderung zwischen zwei Clients testen.
Warum?
- Die Custom‑Location leitet den WebSocket‑Kanal korrekt weiter (Live‑Sync/Push).
— — —
7️⃣ Admin‑Backend & Sicherheit
- Admin‑Seite:
https://pass.DEINE-DOMAIN.tld/admin→ ADMIN_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 Tar‑Archiv lässt sich leicht versionieren/auslagern; regelmäßige Cron‑Jobs sind schnell eingerichtet.
— — —
🛠️ Fehlerhilfe (kurz)
- 502 / kein Live‑Sync: In NPM die Custom Location
/notifications/hub→ Port 3012 + Websockets prüfen. - Seite ohne Styles/Icons: In
.envmussDOMAINhttps enthalten; danachdocker compose restart vaultwarden. - Container nicht da:
docker psprüfen; Logs:docker compose logs --tail=200 vaultwarden. - Let’s‑Encrypt‑Fehler: Domain‑DNS prüfen; Rate‑Limit beachten; später erneut anfordern.
✅ Ergebnis
- Vaultwarden läuft hinter NPM mit gültigem HTTPS, Live‑Sync funktioniert.
- Registrierungen sind aus, Admin‑Backend ist durch Token geschützt.
- Deine Daten liegen persistent unter
/opt/vaultwarden/dataund werden gesichert.