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

211 lines
6.1 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, **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.DEINEDOMAIN.tld` zeigt auf NPM.
Platzhalter
* `<VW_IP>` = IP des VaultwardenLXC, z.B. `10.0.0.16`
* `DEINE-DOMAIN.tld` = deine echte Domain
— — —
1⃣ System vorbereiten
Wir aktualisieren das System und installieren BasisTools.
```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 DockerRepository.
— — —
2⃣ Docker & Compose installieren
Wir richten die offizielle DockerQuelle ein und installieren Engine + ComposePlugin.
```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
```
**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 AdminToken** und tragen die Einstellungen in **.env** ein.
```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
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?**
* `DOMAIN` muss **https** sein (sonst fehlerhafte Assets/Links).
* `ADMIN_TOKEN` schützt das AdminBackend.
* `SIGNUPS_ALLOWED=false` verhindert offene Registrierungen.
— — —
4`docker-compose.yml` schreiben
Wir definieren den Container, die Ports und das DatenVolume.
```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`.
**Warum?**
* `./data:/data` sorgt 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
```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.
— — —
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 (Lets Encrypt)**
* **Force SSL**, **HTTP/2**, **HSTS**: ✔️
**Test:** `https://pass.DEINE-DOMAIN.tld` → Loginseite sichtbar; nach Login LiveÄnderung zwischen zwei Clients testen.
**Warum?**
* Die CustomLocation leitet den WebSocketKanal korrekt weiter (LiveSync/Push).
— — —
7⃣ AdminBackend & Sicherheit
* AdminSeite: `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`.
```bash
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 TarArchiv lässt sich leicht versionieren/auslagern; regelmäßige CronJobs sind schnell eingerichtet.
— — —
🛠️ Fehlerhilfe (kurz)
* **502 / kein LiveSync:** 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`.
* **LetsEncryptFehler:** DomainDNS prüfen; RateLimit beachten; später erneut anfordern.
✅ Ergebnis
* Vaultwarden läuft hinter NPM mit gültigem **HTTPS**, **LiveSync** funktioniert.
* **Registrierungen sind aus**, AdminBackend ist durch **Token** geschützt.
* Deine Daten liegen persistent unter `/opt/vaultwarden/data` und werden gesichert.