Files
Homelab--Bratonein-Kontroll…/Kapitel 05/Videoscript.md

11 KiB
Raw Blame History

🎬 Bratonien Tech Kapitel 6: Vaultwarden (SelfHosted mit Docker)

🎵 Intro

Szene: Talking Head (du oder Barney), BratonienTechLogo. 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 OfficePC ein komplettes Homelab oder wie ich es nenne: Bratoniens Kontrollzentrum. Heute sichern wir unsere Zugänge und Geheimnisse: Wir richten Vaultwarden ein Bitwardenkompatibel, schlank, selbst gehostet und voll unter unserer Kontrolle.“


Warum Vaultwarden?

Szene: Vergleichsfolie: PasswortChaos vs. VaultwardenLogo + BrowserAddon. 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 BitwardenApps und BrowserErweiterungen 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 Debian12LXC: eine vCPU, 512MB bis 1GB RAM und 48GB Speicher reichen. Nginx Proxy Manager läuft in einem separaten LXC, die Subdomain pass.DEINEDOMAIN.tld zeigt bereits auf NPM. Grundlagen wie LXCAnlage, SSH und die Bedienung von Nano haben wir in den BasisKapiteln gezeigt hier bauen wir darauf auf.“

Einblendung:

  • LXC: Debian 12 · 1vCPU · 512MB1GB RAM · 48GB 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, AdminToken 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 DockerQuelle ein. Das ist sicher und gut wartbar keine intransparenten Einzeiler.“ Befehle im Bild:

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

OnScreenHinweis: „Wenn Docker im LXC nicht startet: Proxmox → CT → Options → Features: nesting + keyctl aktivieren; CT neu starten.“


Projektdateien anlegen

Szene: Terminal → /opt/vaultwarden, NanoEditor. Voiceover: „Wir legen das Projektverzeichnis an. Die Konfiguration kommt in eine .env getrennt von der ComposeDatei. Wichtig: Die Domain mit https, damit Assets und Links stimmen.“ Befehle im Bild:

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

VoiceoverErgänzung: „Speichern mit Strg+O, Enter, Strg+X.“


ComposeDatei schreiben

Szene: NanoEditor mit docker-compose.yml. Voiceover: „Compose beschreibt Image, DatenVolume und Ports. Port 3012 ist der WebSocketKanal für LiveSync zwischen Geräten.“ Einblendung docker-compose.yml:

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 LiveLogs. Voiceover: „Wir starten im Hintergrund und schauen sofort in die Logs so sehen wir Fehler, bevor wir veröffentlichen.“ Befehle im Bild:

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

OnScreenCheck: „Erwartet: Rocket has launched …‘; keine Fehler zu /data.“


Proxy Host im NPM (GUI)

Szene: NPMOberfläche, klare Zooms auf die Felder. Voiceover: „In NPM legen wir einen neuen Proxy Host an. Domain: pass.DEINEDOMAIN.tld. Scheme: http. Als Ziel nehmen wir die LXCIP <VW_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 <VW_IP>, aber Port 3012, WebSockets an. Das ist der LiveKanal.“ Einblendung: Custom Location → /notifications/hub → 3012 → WebSockets an.

Voiceover: „Im Reiter SSL fordern wir das LetsEncryptZertifikat an und setzen Force SSL, HTTP/2 und HSTS.“ Check: Browser ruft https://pass.DEINEDOMAIN.tld auf LoginSeite erscheint.

OnScreenWarnung (gelb): „Ohne Custom Location /3012 → kein LiveSync!“


AdminBackend absichern (Argon2PHC) & erster Nutzer

Szene: SplitScreen Terminal/GUI. Voiceover: „Beim AdminBackend warnt Vaultwarden gern vor einem KlartextToken zu Recht. Wir stellen auf Argon2PHC um. Erst erzeugen wir den Hash, dann tragen wir ihn in der GUI ein und entfernen den KlartextEintrag aus .env.“ Befehle im Bild:

docker exec -it vaultwarden /vaultwarden hash --preset owasp

Voiceover: „Kopiere den kompletten String ab $argon2id$…. In der AdminGUI 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):

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.DEINEDOMAIN.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 ZweiFaktorAnmeldung (TOTP oder FIDO2/YubiKey).“


Arbeiten mit Vaultwarden (StandardAnwendungen)

Szene: BrowserAddon + WebUI im Wechsel, klare Mauswege. Voiceover: „Für den Alltag verbindest du die BitwardenErweiterung im Browser: In den Einstellungen stellst du Server auf https://pass.DEINEDOMAIN.tld. Danach siehst du denselben Tresor wie im Web. Einen ersten Login legst du über Neu → Anmeldung an Name, Benutzername/EMail, mit dem Generator erzeugtes langes Passwort, ZielURL. Mit Ordnern schaffst du Struktur, etwa Streaming oder Server.“

Voiceover: „Import geht in der WebOberflä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 QRCode oder einen Base32Schlüssel. Im Tresor fügst du im passenden Eintrag das Feld AuthenticatorSchlüssel (TOTP) hinzu. Ab dann liefert der Eintrag die sechsstelligen Codes, die du beim Login brauchst auch direkt in der BrowserErweiterung.“

Voiceover: „Zum gelegentlichen sicheren Teilen gibt es Send: Text oder Datei, Ablaufdatum, maximale Abrufe, optionales Kennwort so landen sensible Infos nicht in EMails oder Chats.“

Voiceover (TeamHinweis): „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:

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: TerminalSplit mit Logs und NPMMaske. Voiceover: „Kein LiveSync? 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 DNSEinträge und die LetsEncryptHinweise in NPM.“


Fazit & Ausblick

Szene: VaultwardenDashboard, BrowserAddon zeigt Sync. Voiceover: „Vaultwarden läuft jetzt unter eurer eigenen Domain, mit gültigem TLS, LiveSync und gehärtetem AdminBackend. Registrierungen sind zu, der erste Benutzer ist angelegt, Backups sind eingerichtet. In den Ergänzungsvideos vertiefen wir ImportStrategien, TOTPBestPractices, TeamSharing und praktische BrowserTipps.“

🎵 Outro

Szene: BratonienTechOutro / 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!“