From c729895e8c5a17ec2101b7c01989caa5589999d1 Mon Sep 17 00:00:00 2001 From: Thomas Dannenberg Date: Wed, 20 Aug 2025 11:01:12 +0000 Subject: [PATCH] Kapitel 6/Tutorial.md aktualisiert --- Kapitel 6/Tutorial.md | 116 +++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 65 deletions(-) diff --git a/Kapitel 6/Tutorial.md b/Kapitel 6/Tutorial.md index 61ba91b..f00bb79 100644 --- a/Kapitel 6/Tutorial.md +++ b/Kapitel 6/Tutorial.md @@ -1,35 +1,42 @@ 🛠️ 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. +🎯 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. -Voraussetzungen (siehe Readme dieses Kapitels) +🧩 Was wir aufbauen -* LXC existiert (Specs lt. Readme). SSH/Grundsetup siehe Grundkapitel „Erster LXC – Grundsetup & SSH“. -* NPM läuft, Subdomain z. B. `pass.DEINE‑DOMAIN.tld` zeigt auf NPM. +* **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` (+ optional `SMTP_*`) +* **Reverse‑Proxy (NPM):** Proxy Host für `pass.DEINE‑DOMAIN.tld`, Custom Location `/notifications/hub → 3012`, SSL (Let’s Encrypt) -Platzhalter +✅ Voraussetzungen (konkret) -* `` = IP des Vaultwarden‑LXC, z. B. `10.0.0.16` +* **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.tld` zeigt auf NPM (DNS A/AAAA gesetzt) +* **Outbound‑Internet** im LXC erreichbar; **Hostports 8000/3012** frei + +🔁 Platzhalter + +* `` = IP des Vaultwarden‑LXC (z. B. `10.0.0.16`) * `DEINE-DOMAIN.tld` = deine echte Domain — — — 1️⃣ System vorbereiten -Wir aktualisieren das System und installieren Basis‑Tools. ```bash apt update && apt upgrade -y apt install -y ca-certificates curl gnupg lsb-release ``` -**Warum?** - -* `ca-certificates`/`curl`/`gnupg` brauchen wir für das Docker‑Repository. +👉 `ca-certificates`/`curl`/`gnupg` werden für das Docker‑Repo benötigt. — — — 2️⃣ Docker & Compose installieren -Wir richten die offizielle Docker‑Quelle ein und installieren Engine + Compose‑Plugin. ```bash mkdir -p /etc/apt/keyrings @@ -46,34 +53,29 @@ systemctl enable --now docker **Prüfen:** ```bash -docker --version -docker compose version +docker --version && docker compose version ``` -**Warum?** - -* So bekommst du reproduzierbar die offiziellen Pakete; Compose ist als Plugin integriert. +👉 Offizielle Pakete, Compose 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. +3️⃣ Projekt anlegen & `.env` erstellen ```bash mkdir -p /opt/vaultwarden && cd /opt/vaultwarden mkdir -p data -openssl rand -base64 48 -# Ausgabe kopieren (TOKEN) und im nächsten Schritt einfügen +openssl rand -base64 48 # Token erzeugen und kopieren nano .env ``` -**Inhalt für `.env` einfügen (Platzhalter ersetzen):** +**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, falls Mails gewünscht sind (Verifizierung/Reset) +# Optional SMTP (nur falls Mailversand gewünscht) # SMTP_HOST=smtp.example.com # SMTP_FROM=pass@example.com # SMTP_PORT=587 @@ -82,17 +84,12 @@ SIGNUPS_ALLOWED=false # SMTP_PASSWORD=deinPasswort ``` -**Speichern in Nano:** `Strg+O`, `Enter` → **Beenden:** `Strg+X`. -**Warum?** - -* `DOMAIN` muss **https** sein (sonst fehlerhafte Assets/Links). -* `ADMIN_TOKEN` schützt das Admin‑Backend. -* `SIGNUPS_ALLOWED=false` verhindert offene Registrierungen. +**Speichern:** `Strg+O`, `Enter` → Beenden: `Strg+X`. +👉 `DOMAIN` zwingend **https**; `ADMIN_TOKEN` schützt `/admin`; Signups sind zu. — — — 4️⃣ `docker-compose.yml` schreiben -Wir definieren den Container, die Ports und das Daten‑Volume. ```bash nano docker-compose.yml @@ -117,72 +114,63 @@ services: ``` **Speichern:** `Strg+O`, `Enter` → `Strg+X`. -**Warum?** - -* `./data:/data` sorgt für **Persistenz** auf dem Host (`/opt/vaultwarden/data`). -* Port **8000** für Web/API und **3012** für WebSockets. +👉 `./data:/data` = Persistenz auf dem Host. — — — -5️⃣ Container starten & prüfen +5️⃣ Container starten & Logs prüfen ```bash 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. +Erwartet: Meldungen wie `Rocket has launched…`. +👉 Erst prüfen, dann veröffentlichen. — — — 6️⃣ NPM einrichten (Proxy, WebSockets, SSL) -**Proxy Host anlegen:** +**Proxy Host:** * **Domain Names:** `pass.DEINE-DOMAIN.tld` * **Scheme:** `http` -* **Forward Hostname / IP:** `` +* **Forward Host/IP:** `` * **Forward Port:** `8000` * **Block Common Exploits:** ✔️ · **Websockets Support:** ✔️ -**Custom Location hinzufügen:** +**Custom Location:** * **Location:** `/notifications/hub` -* **Forward Hostname / IP:** `` +* **Forward Host/IP:** `` * **Forward Port:** `3012` * **Websockets Support:** ✔️ -**SSL aktivieren:** +**SSL‑Tab:** * **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). +**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 -* 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. +* `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) -Daten liegen auf dem Host in `/opt/vaultwarden/data`. ```bash cd /opt/vaultwarden -# optional für maximale Konsistenz kurz stoppen +# optional: kurz stoppen für maximale Konsistenz # docker compose stop vaultwarden tar -czf /root/vaultwarden-backup-$(date +%F).tar.gz data @@ -190,21 +178,19 @@ tar -czf /root/vaultwarden-backup-$(date +%F).tar.gz data ls -lh /root/vaultwarden-backup-*.tar.gz ``` -**Warum?** - -* Ein Tar‑Archiv lässt sich leicht versionieren/auslagern; regelmäßige Cron‑Jobs sind schnell eingerichtet. +👉 Ein Tar reicht als Grundlage; regelmäßig per Cron sichern. — — — 🛠️ Fehlerhilfe (kurz) -* **502 / kein Live‑Sync:** In NPM die **Custom Location** `/notifications/hub` → Port **3012** + **Websockets** prüfen. -* **Seite ohne Styles/Icons:** In `.env` muss `DOMAIN` **https** enthalten; danach `docker compose restart vaultwarden`. -* **Container nicht da:** `docker ps` prüfen; Logs: `docker compose logs --tail=200 vaultwarden`. -* **Let’s‑Encrypt‑Fehler:** Domain‑DNS prüfen; Rate‑Limit beachten; später erneut anfordern. +* **Kein Live‑Sync / 502:** NPM‑Location `/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` +* **Let’s‑Encrypt‑Fehler:** DNS‑Eintrag prüfen; Rate‑Limit abwarten ✅ 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/data` und werden gesichert. +* Vaultwarden läuft hinter NPM mit **HTTPS**; **WebSockets** funktionieren +* **Registrierungen aus**, Admin‑Backend per **Token** geschützt +* Daten persistent unter `/opt/vaultwarden/data` und per Tar gesichert