# 🎬 Bratonien Tech – Kapitel 6: Vaultwarden (Self‑Hosted mit Docker) ## 🎵 Intro **Szene:** Talking Head (du oder Barney), Bratonien‑Tech‑Logo. **Voiceover / Gesprochen:** „Hallo und herzlich willkommen bei Bratonien Tech. Ich bin \[dein Name oder Barney] von Bratonien Cosplay. In dieser Reihe bauen wir aus einem alten Office‑PC ein komplettes Homelab – oder wie ich es nenne: Bratoniens Kontrollzentrum. Heute sichern wir unsere Zugänge und Geheimnisse: Wir richten Vaultwarden ein – Bitwarden‑kompatibel, schlank, selbst gehostet und voll unter unserer Kontrolle.“ --- ## Warum Vaultwarden? **Szene:** Vergleichsfolie: Passwort‑Chaos vs. Vaultwarden‑Logo + Browser‑Add‑on. **Voiceover:** „Passwörter im Kopf, in Textdateien oder in der Cloud anderer Anbieter? Muss nicht sein. Vaultwarden läuft im eigenen Homelab, spricht mit den Bitwarden‑Apps und Browser‑Erweiterungen und synchronisiert in Echtzeit. So behalten wir die Hoheit über unsere Daten – und alle Geräte bleiben bequem angebunden.“ --- ## Voraussetzungen **Szene:** Textfolie (Specs + Verweise auf Grundkapitel). **Voiceover:** „Wir arbeiten in einem Debian‑12‑LXC: eine vCPU, 512 MB bis 1 GB RAM und 4–8 GB Speicher reichen. Nginx Proxy Manager läuft in einem separaten LXC, die Subdomain `pass.DEINE‑DOMAIN.tld` zeigt bereits auf NPM. Grundlagen wie LXC‑Anlage, SSH und die Bedienung von Nano haben wir in den Basis‑Kapiteln gezeigt – hier bauen wir darauf auf.“ **Einblendung:** * LXC: Debian 12 · 1 vCPU · 512 MB–1 GB RAM · 4–8 GB Disk · statische IPv4 (z. B. 10.0.0.16) * NPM & DynDNS vorhanden; DNS A/AAAA → NPM --- ## Plan **Szene:** Ablaufgrafik. **Voiceover:** „Der Fahrplan: Docker installieren, Projekt anlegen, Compose schreiben, starten, NPM per GUI einrichten, Admin‑Token auf Argon2 absichern, ersten Benutzer anlegen, Backup – und am Ende zeigen wir kurz die wichtigsten Alltagsfunktionen.“ --- ## Container vorbereiten **Szene:** Terminalaufnahme (Großaufnahme, lesbare Schrift). **Voiceover:** „Wir beginnen mit Updates und richten die offizielle Docker‑Quelle ein. Das ist sicher und gut wartbar – keine intransparenten Einzeiler.“ **Befehle im Bild:** ```bash apt update && apt upgrade -y apt install -y ca-certificates curl gnupg lsb-release 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 # Check docker --version && docker compose version ``` **On‑Screen‑Hinweis:** „Wenn Docker im LXC nicht startet: Proxmox → CT → Options → Features: nesting + keyctl aktivieren; CT neu starten.“ --- ## Projektdateien anlegen **Szene:** Terminal → `/opt/vaultwarden`, Nano‑Editor. **Voiceover:** „Wir legen das Projektverzeichnis an. Die Konfiguration kommt in eine `.env` – getrennt von der Compose‑Datei. Wichtig: Die Domain **mit https**, damit Assets und Links stimmen.“ **Befehle im Bild:** ```bash mkdir -p /opt/vaultwarden && cd /opt/vaultwarden mkdir -p data nano .env ``` **Einblendung `.env`:** ``` DOMAIN=https://pass.DEINE-DOMAIN.tld # Start mit geschlossener Registrierung – öffnen wir gleich kurz für den ersten Account SIGNUPS_ALLOWED=false # Optional für Mails (Verifizierung/Reset) # SMTP_HOST=smtp.example.com # SMTP_FROM=pass@example.com # SMTP_PORT=587 # SMTP_SECURITY=starttls # SMTP_USERNAME=user # SMTP_PASSWORD=deinPasswort ``` **Voiceover‑Ergänzung:** „Speichern mit Strg+O, Enter, Strg+X.“ --- ## Compose‑Datei schreiben **Szene:** Nano‑Editor mit `docker-compose.yml`. **Voiceover:** „Compose beschreibt Image, Daten‑Volume und Ports. Port 3012 ist der WebSocket‑Kanal für Live‑Sync zwischen Geräten.“ **Einblendung `docker-compose.yml`:** ```yaml 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) ``` --- ## Container starten & prüfen **Szene:** Terminal mit Live‑Logs. **Voiceover:** „Wir starten im Hintergrund und schauen sofort in die Logs – so sehen wir Fehler, bevor wir veröffentlichen.“ **Befehle im Bild:** ```bash docker compose up -d docker compose logs -f --tail=80 vaultwarden ``` **On‑Screen‑Check:** „Erwartet: ‚Rocket has launched …‘; keine Fehler zu `/data`.“ --- ## Proxy Host im NPM (GUI) **Szene:** NPM‑Oberfläche, klare Zooms auf die Felder. **Voiceover:** „In NPM legen wir einen neuen Proxy Host an. Domain: `pass.DEINE‑DOMAIN.tld`. Scheme: `http`. Als Ziel nehmen wir die LXC‑IP `` mit Port **8000**. Wir aktivieren ‚Block Common Exploits‘ und ‚Websockets Support‘.“ **Einblendung (Zoom):** Domain, Scheme, Forward Host/IP, Port 8000, Toggles aktiv. **Voiceover:** „Jetzt die **Custom Location**: Pfad `/notifications/hub`. Ziel wieder ``, aber Port **3012**, WebSockets an. Das ist der Live‑Kanal.“ **Einblendung:** Custom Location → `/notifications/hub` → 3012 → WebSockets an. **Voiceover:** „Im Reiter **SSL** fordern wir das Let’s‑Encrypt‑Zertifikat an und setzen **Force SSL**, **HTTP/2** und **HSTS**.“ **Check:** Browser ruft `https://pass.DEINE‑DOMAIN.tld` auf – Login‑Seite erscheint. **On‑Screen‑Warnung (gelb):** „Ohne Custom Location /3012 → kein Live‑Sync!“ --- ## Admin‑Backend absichern (Argon2‑PHC) & erster Nutzer **Szene:** Split‑Screen Terminal/GUI. **Voiceover:** „Beim Admin‑Backend warnt Vaultwarden gern vor einem Klartext‑Token – zu Recht. Wir stellen auf **Argon2‑PHC** um. Erst erzeugen wir den Hash, dann tragen wir ihn in der GUI ein und entfernen den Klartext‑Eintrag aus `.env`.“ **Befehle im Bild:** ```bash docker exec -it vaultwarden /vaultwarden hash --preset owasp ``` **Voiceover:** „Kopiere den kompletten String ab `$argon2id$…`. In der Admin‑GUI unter **Settings → General** fügst du ihn im Feld ‚Admin token / Argon2 PHC‘ ein und speicherst. Ab jetzt meldest du dich mit **dem Passwort** an, das du beim Hashen eingegeben hast – nicht mit dem Hash.“ **Befehle im Bild (Aufräumen):** ```bash sed -i '/^ADMIN_TOKEN=/d' /opt/vaultwarden/.env cd /opt/vaultwarden && docker compose restart vaultwarden ``` **Voiceover:** „Für deinen ersten Benutzer öffnen wir die Registrierung kurz: **Settings → General → Allow new signups** einschalten, speichern, in einem neuen Tab `https://pass.DEINE‑DOMAIN.tld/#/register` aufrufen, Konto anlegen, einmal anmelden – und danach die Registrierungen wieder schließen. Mit SMTP ginge es alternativ über **Users → Invitations** per Mail.“ **Voiceover (Sicherheit):** „Im Benutzerkonto aktivierst du unter **Settings → Security** die Zwei‑Faktor‑Anmeldung (TOTP oder FIDO2/YubiKey).“ --- ## Arbeiten mit Vaultwarden (Standard‑Anwendungen) **Szene:** Browser‑Add‑on + Web‑UI im Wechsel, klare Mauswege. **Voiceover:** „Für den Alltag verbindest du die Bitwarden‑Erweiterung im Browser: In den Einstellungen stellst du **Server** auf `https://pass.DEINE‑DOMAIN.tld`. Danach siehst du denselben Tresor wie im Web. Einen ersten Login legst du über **Neu → Anmeldung** an – Name, Benutzername/E‑Mail, mit dem Generator erzeugtes langes Passwort, Ziel‑URL. Mit Ordnern schaffst du Struktur, etwa ‚Streaming‘ oder ‚Server‘.“ **Voiceover:** „Import geht in der Web‑Oberfläche unter **Werkzeuge → Importieren**. Ich empfehle, alles zunächst in einen Ordner ‚Eingang‘ zu importieren und anschließend aufzuräumen: Dubletten löschen, Spezialfälle prüfen, dann in die endgültige Struktur verschieben.“ **Voiceover:** „Aktivierst du bei einem Dienst 2FA, bekommst du einen QR‑Code oder einen Base32‑Schlüssel. Im Tresor fügst du im passenden Eintrag das Feld **‚Authenticator‑Schlüssel (TOTP)‘** hinzu. Ab dann liefert der Eintrag die sechsstelligen Codes, die du beim Login brauchst – auch direkt in der Browser‑Erweiterung.“ **Voiceover:** „Zum gelegentlichen sicheren Teilen gibt es **Send**: Text oder Datei, Ablaufdatum, maximale Abrufe, optionales Kennwort – so landen sensible Infos nicht in E‑Mails oder Chats.“ **Voiceover (Team‑Hinweis):** „Für Zusammenarbeit richtest du **Organisationen** und **Sammlungen** ein. Einträge, die geteilt werden sollen, verschiebst du in die passende Sammlung und vergibst Rechte pro Mitglied. Einladungen funktionieren komfortabel, sobald SMTP eingerichtet ist.“ --- ## Backup (kurz & wichtig) **Szene:** Terminal + kurze Grafik „Container ≠ Daten“. **Voiceover:** „Wichtig ist nicht der Container, sondern der **Datenordner** auf dem Host: `/opt/vaultwarden/data`. Den sicherst du regelmäßig als Archiv – auf Wunsch mit kurzem Stopp für maximale Konsistenz.“ **Befehle im Bild:** ```bash cd /opt/vaultwarden # optional: 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 ``` **Voiceover:** „Wiederherstellen ist genauso einfach: neue Instanz bis Compose, Archiv an den Ort, entpacken, `docker compose up -d` – fertig.“ --- ## Fehlerbehebung (kurz) **Szene:** Terminal‑Split mit Logs und NPM‑Maske. **Voiceover:** „Kein Live‑Sync? In NPM die **Custom Location** `/notifications/hub` auf Port **3012** mit aktiviertem WebSocket prüfen. Icons fehlen oder Links wirken seltsam? In der `.env` muss `DOMAIN` **https** enthalten; danach `docker compose restart`. Wenn der Container zickt, zeigen die Logs den Weg: `docker compose logs --tail=200 vaultwarden`. Und bei Zertifikatsproblemen hilft ein Blick auf DNS‑Einträge und die Let’s‑Encrypt‑Hinweise in NPM.“ --- ## Fazit & Ausblick **Szene:** Vaultwarden‑Dashboard, Browser‑Add‑on zeigt Sync. **Voiceover:** „Vaultwarden läuft jetzt unter eurer eigenen Domain, mit gültigem TLS, Live‑Sync und gehärtetem Admin‑Backend. Registrierungen sind zu, der erste Benutzer ist angelegt, Backups sind eingerichtet. In den Ergänzungsvideos vertiefen wir Import‑Strategien, TOTP‑Best‑Practices, Team‑Sharing und praktische Browser‑Tipps.“ ## 🎵 Outro **Szene:** Bratonien‑Tech‑Outro / Logo. **Voiceover:** „Das war Kapitel 6 – Vaultwarden. Wenn dir dieses Video gefallen hat, abonniere Bratonien Tech und schau dir die anderen Kapitel an. Bis zum nächsten Mal – in Bratonien!“