Files
Homelab--Bratonein-Kontroll…/Kapitel 6/Tutorial.md

197 lines
5.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

🛠️ Kapitel 6 Vaultwarden (Docker, Debian12LXC) Tutorial
🎯 Ziel
Vaultwarden in einem Debian12LXC per **Docker + Compose** bereitstellen, hinter **Nginx Proxy Manager** (NPM) mit **HTTPS** und **WebSockets** veröffentlichen; **Registrierungen deaktivieren**, **AdminToken** setzen und **Backups** ermöglichen.
🧩 Was wir aufbauen
* **Image:** `vaultwarden/server:latest`
* **Ports:** `8000:80` (Web/API), `3012:3012` (WebSocket/LiveSync)
* **Persistenz:** `./data:/data` → Hostpfad `/opt/vaultwarden/data`
* **Konfig per `.env`:** `DOMAIN`, `ADMIN_TOKEN`, `SIGNUPS_ALLOWED=false` (+ optional `SMTP_*`)
* **ReverseProxy (NPM):** Proxy Host für `pass.DEINEDOMAIN.tld`, Custom Location `/notifications/hub → 3012`, SSL (Lets Encrypt)
✅ Voraussetzungen (konkret)
* **LXC:** Debian 12 (Bookworm) erstellt nach Grundkapitel *Erster LXC Grundsetup & SSH* (hier nur Verweis)
* **Specs:** 1 vCPU · **512MB1GB RAM** (512MB empfohlen) · **48GB Disk** · **statische IPv4** (z.B. `10.0.0.16/24`), IPv6 optional
* **NPM** läuft (separater LXC), **Subdomain** `pass.DEINEDOMAIN.tld` zeigt auf NPM (DNS A/AAAA gesetzt)
* **OutboundInternet** im LXC erreichbar; **Hostports 8000/3012** frei
🔁 Platzhalter
* `<VW_IP>` = IP des VaultwardenLXC (z.B. `10.0.0.16`)
* `DEINE-DOMAIN.tld` = deine echte Domain
— — —
1⃣ System vorbereiten
```bash
apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release
```
👉 `ca-certificates`/`curl`/`gnupg` werden für das DockerRepo benötigt.
— — —
2⃣ Docker & Compose installieren
```bash
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:**
```bash
docker --version && docker compose version
```
👉 Offizielle Pakete, Compose als Plugin integriert.
— — —
3⃣ Projekt anlegen & `.env` erstellen
```bash
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
```bash
nano docker-compose.yml
```
**Inhalt einfügen:**
```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)
```
**Speichern:** `Strg+O`, `Enter``Strg+X`.
👉 `./data:/data` = Persistenz auf dem Host.
— — —
5⃣ Container starten & Logs prüfen
```bash
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:** ✔️
**SSLTab:**
* **Request a new SSL Certificate (Lets Encrypt)**
* **Force SSL**, **HTTP/2**, **HSTS**: ✔️
**Test:** `https://pass.DEINE-DOMAIN.tld` → Loginseite sichtbar; LiveÄnderung zwischen zwei Clients testen.
👉 Die CustomLocation leitet den WebSocketKanal (LiveSync) korrekt weiter.
— — —
7⃣ AdminBackend & 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)
```bash
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 LiveSync / 502:** NPMLocation `/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`
* **LetsEncryptFehler:** DNSEintrag prüfen; RateLimit abwarten
✅ Ergebnis
* Vaultwarden läuft hinter NPM mit **HTTPS**; **WebSockets** funktionieren
* **Registrierungen aus**, AdminBackend per **Token** geschützt
* Daten persistent unter `/opt/vaultwarden/data` und per Tar gesichert