Kapitel 6/README.md aktualisiert
This commit is contained in:
@@ -1,161 +1,67 @@
|
|||||||
📘 Kapitel 6: Vaultwarden (ohne Docker, systemd)
|
📘 Kapitel 6: Vaultwarden (Docker unter Debian‑12‑LXC)
|
||||||
Logische Position: 6 (nach 5: WireGuard · vor 7: Nextcloud)
|
Logische Position: 6 (nach 5: WireGuard · vor 7: Nextcloud)
|
||||||
|
|
||||||
Ziel: Vaultwarden als **native Binary** im Debian‑12‑LXC per **systemd** betreiben – ohne Docker. Veröffentlichung hinter Nginx Proxy Manager (HTTPS + WebSockets), öffentliche Registrierung deaktivieren, Admin‑Token setzen, optional SMTP, einfache Backup‑Routine.
|
🎯 Ziel
|
||||||
|
Vaultwarden (Bitwarden‑kompatibler Server) in einem **Debian‑12‑LXC** per **Docker + Docker Compose** betreiben, hinter **Nginx Proxy Manager** (NPM) mit **HTTPS** und **WebSockets** bereitstellen, **Registrierungen deaktivieren**, **Admin‑Token** setzen und eine **Backup‑Grundlage** schaffen.
|
||||||
|
|
||||||
✅ Voraussetzungen
|
✅ Voraussetzungen
|
||||||
LXC: Debian 12 (Bookworm) · root
|
|
||||||
Empfohlen: 1 vCPU, **128–256 MB RAM**, ≥ 500 MB Speicher (plus Daten)
|
* LXC: Debian 12 (Bookworm) – erstellt gemäß Grundkapitel *Erster LXC – Grundsetup & SSH* (hier nur Verweis)
|
||||||
Netzwerk: IPv4/IPv6 im LAN
|
* **LXC‑Specs:** 1 vCPU · 512 MB–1 GB RAM (256 MB funktionieren oft, 512 MB empfohlen) · 4–8 GB Disk · statische IPv4 (z. B. `10.0.0.16`); IPv6 optional
|
||||||
Extern optional: Nginx Proxy Manager + DynDNS/Subdomain (eigene Kapitel)
|
* Nginx Proxy Manager (separater LXC), gültige Domain/Subdomain (z. B. `pass.DEINE‑DOMAIN.tld`)
|
||||||
|
* DNS‑Eintrag der Subdomain auf NPM
|
||||||
|
|
||||||
🧩 Was wir aufbauen
|
🧩 Was wir aufbauen
|
||||||
Binary: /opt/vaultwarden/vaultwarden
|
|
||||||
Dienst: systemd‑Service unter /etc/systemd/system/vaultwarden.service
|
* **Container‑Image:** `vaultwarden/server:latest`
|
||||||
Ports (intern, nur Loopback): 127.0.0.1:8000 (HTTP/API), 127.0.0.1:3012 (WebSocket)
|
* **Ports:** `8000:80` (Web/API), `3012:3012` (WebSocket/Live‑Sync)
|
||||||
Persistenz: **/var/lib/vaultwarden** (enthält /data)
|
* **Persistenz:** Volume `./data:/data` → Daten auf dem Host in `/opt/vaultwarden/data`
|
||||||
Konfig per Datei: **/etc/vaultwarden.env** (DOMAIN, ADMIN\_TOKEN, SIGNUPS\_ALLOWED=false, optional SMTP\_\*)
|
* **Konfig per `.env`:** `DOMAIN`, `ADMIN_TOKEN`, `SIGNUPS_ALLOWED=false`, optional `SMTP_*`
|
||||||
Reverse‑Proxy: NPM leitet / → 8000 und **/notifications/hub → 3012**
|
* **Reverse‑Proxy (NPM):** Proxy Host für `pass.DEINE‑DOMAIN.tld`, Custom Location `/notifications/hub → 3012`, SSL (Let’s Encrypt)
|
||||||
|
|
||||||
🗺️ Kapitelablauf (Kurzüberblick)
|
🗺️ Kapitelablauf (Kurzüberblick)
|
||||||
|
|
||||||
1. System vorbereiten (Update, Tools, Systemnutzer anlegen)
|
1. System vorbereiten (Update, Basis‑Tools)
|
||||||
2. Verzeichnisse & Rechte ( /opt/vaultwarden , /var/lib/vaultwarden )
|
2. **Docker & Compose** installieren
|
||||||
3. Vaultwarden‑Binary laden, nach /opt/vaultwarden legen, ausführbar machen
|
3. Projektverzeichnis **/opt/vaultwarden** anlegen, `.env` erstellen
|
||||||
4. **/etc/vaultwarden.env** erstellen (DOMAIN, ADMIN\_TOKEN, …)
|
4. `docker-compose.yml` schreiben
|
||||||
5. systemd‑Service schreiben, aktivieren, Start prüfen
|
5. Container starten, Logs prüfen
|
||||||
6. NPM: Proxy Host + Custom Location (WebSockets) + SSL
|
6. NPM: Proxy Host + WebSockets + SSL einrichten
|
||||||
7. Admin‑Backend testen, Signups aus, optional SMTP
|
7. Admin‑Backend aufrufen: Registrierungen aus, optional SMTP, 2FA aktivieren
|
||||||
8. Backup (Tar von /var/lib/vaultwarden)
|
8. Backup‑Grundlage: Datenordner sichern
|
||||||
|
|
||||||
🔧 Kerneinstellungen (wichtig!)
|
🔧 Kerneinstellungen (wichtig!)
|
||||||
|
|
||||||
* **DOMAIN**: [https://pass.DEINE‑DOMAIN.tld](https://pass.DEINE‑DOMAIN.tld) (für korrekte Links)
|
* **DOMAIN:** `https://pass.DEINE‑DOMAIN.tld` (https zwingend, sonst fehlerhafte Assets)
|
||||||
* **ADMIN\_TOKEN**: lange, zufällige Zeichenfolge (mind. 64 Zeichen)
|
* **ADMIN\_TOKEN:** lange, zufällige Zeichenfolge (sicher aufbewahren)
|
||||||
* **SIGNUPS\_ALLOWED=false**: öffentliche Registrierung aus
|
* **SIGNUPS\_ALLOWED=false:** verhindert offene Registrierung
|
||||||
* **WEBSOCKET\_ENABLED=true** + Weiterleitung **/notifications/hub → 3012**
|
* **WebSockets:** NPM‑Custom‑Location **`/notifications/hub` → Port `3012`**
|
||||||
* **ROCKET\_ADDRESS=127.0.0.1 / ROCKET\_PORT=8000** (nur lokal lauschen)
|
* **Datenpfad:** Host: `/opt/vaultwarden/data` (im Container `/data`)
|
||||||
* **WEBSOCKET\_ADDRESS=127.0.0.1 / WEBSOCKET\_PORT=3012**
|
|
||||||
|
|
||||||
📦 Installation (LXC, ohne Docker)
|
🌐 Erstkonfiguration (im Browser)
|
||||||
System & Tools:
|
|
||||||
|
|
||||||
```bash
|
* Aufruf: `https://pass.DEINE‑DOMAIN.tld`
|
||||||
apt update && apt upgrade -y
|
* Admin‑Backend: `https://pass.DEINE‑DOMAIN.tld/admin` → **ADMIN\_TOKEN** eingeben
|
||||||
apt install -y ca-certificates curl unzip
|
* **Signups** prüfen (aus), optional **SMTP** für Mails testen, **2FA** (TOTP/FIDO2) aktivieren
|
||||||
# Systemnutzer ohne Login
|
|
||||||
useradd --system --home /var/lib/vaultwarden --shell /usr/sbin/nologin vaultwarden || true
|
|
||||||
|
|
||||||
# Verzeichnisse
|
💾 Backup‑Hinweis (Basis)
|
||||||
mkdir -p /opt/vaultwarden
|
|
||||||
mkdir -p /var/lib/vaultwarden
|
|
||||||
chown -R vaultwarden:vaultwarden /var/lib/vaultwarden
|
|
||||||
```
|
|
||||||
|
|
||||||
Binary laden (URL der offiziellen Release‑Asset eintragen – linux x86\_64 gnu):
|
* Daten liegen im Host‑Ordner `/opt/vaultwarden/data` → regelmäßig als Tar/rsync sichern
|
||||||
|
* Vor größeren Updates kurz stoppen (`docker compose stop`), danach wieder starten
|
||||||
```bash
|
|
||||||
export VW_URL="<RELEASE-ASSET-URL>" # z.B. .../vaultwarden-<VERSION>-x86_64-unknown-linux-gnu.tar.gz
|
|
||||||
curl -L "$VW_URL" -o /tmp/vaultwarden.tar.gz
|
|
||||||
mkdir -p /tmp/vw && tar -xzf /tmp/vaultwarden.tar.gz -C /tmp/vw
|
|
||||||
install -m 0755 /tmp/vw/vaultwarden /opt/vaultwarden/vaultwarden
|
|
||||||
# (Web Vault ist in den offiziellen Releases enthalten)
|
|
||||||
```
|
|
||||||
|
|
||||||
Konfiguration (/etc/vaultwarden.env):
|
|
||||||
|
|
||||||
```env
|
|
||||||
DOMAIN=https://pass.DEINE-DOMAIN.tld
|
|
||||||
ADMIN_TOKEN=ErzeugeHierMindestens64Zeichen
|
|
||||||
SIGNUPS_ALLOWED=false
|
|
||||||
WEBSOCKET_ENABLED=true
|
|
||||||
ROCKET_ADDRESS=127.0.0.1
|
|
||||||
ROCKET_PORT=8000
|
|
||||||
WEBSOCKET_ADDRESS=127.0.0.1
|
|
||||||
WEBSOCKET_PORT=3012
|
|
||||||
# Optional SMTP
|
|
||||||
# SMTP_HOST=smtp.example.com
|
|
||||||
# SMTP_FROM=pass@example.com
|
|
||||||
# SMTP_PORT=587
|
|
||||||
# SMTP_SECURITY=starttls
|
|
||||||
# SMTP_USERNAME=user
|
|
||||||
# SMTP_PASSWORD=deinPasswort
|
|
||||||
```
|
|
||||||
|
|
||||||
systemd‑Service (/etc/systemd/system/vaultwarden.service):
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[Unit]
|
|
||||||
Description=Vaultwarden (Bitwarden server compatible) – native
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=vaultwarden
|
|
||||||
Group=vaultwarden
|
|
||||||
EnvironmentFile=/etc/vaultwarden.env
|
|
||||||
ExecStart=/opt/vaultwarden/vaultwarden
|
|
||||||
WorkingDirectory=/var/lib/vaultwarden
|
|
||||||
# Ressourcen‑Schutz (optional, schlank halten)
|
|
||||||
LimitNOFILE=1048576
|
|
||||||
PrivateTmp=true
|
|
||||||
ProtectSystem=full
|
|
||||||
ProtectHome=true
|
|
||||||
NoNewPrivileges=true
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
```
|
|
||||||
|
|
||||||
Aktivieren & starten:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable --now vaultwarden
|
|
||||||
systemctl status vaultwarden --no-pager
|
|
||||||
```
|
|
||||||
|
|
||||||
Erwartet: Dienst „active (running)“.
|
|
||||||
|
|
||||||
🌐 NPM/Reverse Proxy (mit WebSockets)
|
|
||||||
**Proxy Host** anlegen:
|
|
||||||
|
|
||||||
* Domain Names: pass.DEINE‑DOMAIN.tld
|
|
||||||
* Scheme: http · Forward Host/IP: 127.0.0.1 (oder LXC‑IP) · Forward Port: 8000
|
|
||||||
* Block Common Exploits: an · Websockets Support: an
|
|
||||||
**Custom Location**:
|
|
||||||
* Location: /notifications/hub → Forward Host/IP: 127.0.0.1 (oder LXC‑IP) · Port: 3012 · Websockets an
|
|
||||||
**SSL**:
|
|
||||||
* Let’s Encrypt Zertifikat anfordern; Force SSL, HTTP/2, HSTS: an
|
|
||||||
|
|
||||||
🛡️ Erstkonfiguration (Web‑UI)
|
|
||||||
|
|
||||||
* Aufruf: [https://pass.DEINE‑DOMAIN.tld](https://pass.DEINE‑DOMAIN.tld)
|
|
||||||
* Admin: [https://pass.DEINE‑DOMAIN.tld/admin](https://pass.DEINE‑DOMAIN.tld/admin) → Token = ADMIN\_TOKEN
|
|
||||||
* Prüfen: Signups **aus** (SIGNUPS\_ALLOWED=false)
|
|
||||||
* Optional: SMTP setzen & Testmail senden
|
|
||||||
* Erstes Benutzerkonto anlegen und **2FA (TOTP/FIDO2)** aktivieren
|
|
||||||
|
|
||||||
💾 Backup (Basis)
|
|
||||||
Daten liegen in **/var/lib/vaultwarden**. Einfaches Backup:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tar -czf /root/vaultwarden-backup-$(date +%F).tar.gz -C / var/lib/vaultwarden
|
|
||||||
```
|
|
||||||
|
|
||||||
Restore testweise separat prüfen; regelmäßig per Cron sichern.
|
|
||||||
|
|
||||||
⚠️ Stolperfallen
|
⚠️ Stolperfallen
|
||||||
|
|
||||||
* WebSockets nicht weitergeleitet → Live‑Sync/Push funktioniert nicht
|
* **WebSockets** nicht weitergeleitet → kein Live‑Sync/Push
|
||||||
* DOMAIN nicht auf https → fehlerhafte Links/Icons
|
* **DOMAIN** ohne `https` → fehlerhafte Links/Icons
|
||||||
* ADMIN\_TOKEN zu kurz/unsicher → Risiko fürs Admin‑Backend
|
* **ADMIN\_TOKEN** vergessen/zu schwach → Admin‑Backend gefährdet
|
||||||
* Signups offen gelassen → ungewollte Accounts
|
* **Let’s‑Encrypt Rate‑Limit** bei vielen Zertifikatsanforderungen beachten
|
||||||
|
|
||||||
🔗 Siehe auch
|
🔗 Siehe auch
|
||||||
Kap. 3 Nginx Proxy Manager (Domain/HTTPS)
|
|
||||||
Kap. 4 DynDNS (Erreichbarkeit von außen)
|
|
||||||
Kap. 14 Backup (Basis, privat)
|
|
||||||
Kap. 7 Nextcloud (nächster Schritt)
|
|
||||||
|
|
||||||
📜 Lizenz für dieses Kapitel
|
* Kap. 3 Nginx Proxy Manager (Domain/HTTPS)
|
||||||
Creative Commons Attribution (CC BY) – Nutzung/Weitergabe/Anpassung erlaubt, mit Namensnennung „Bratonien Tech“.
|
* Kap. 4 DynDNS (Erreichbarkeit von außen)
|
||||||
|
* Kap. 14 Backup (Basis)
|
||||||
|
* Kap. 7 Nextcloud (nächster Schritt)
|
||||||
|
|
||||||
|
📜 Lizenz
|
||||||
|
Creative Commons Attribution (CC BY) – Nutzung/Weitergabe/Anpassung mit Namensnennung „Bratonien Tech“.
|
||||||
|
|||||||
Reference in New Issue
Block a user