Bitwarden selbst hosten mit Vaultwarden, Docker & Nginx Proxy Manager

Wenn du einen eigenen Passwort-Manager betreiben möchtest, ist Vaultwarden die ressourcenschonendste Variante. Es handelt sich um eine in Rust geschriebene, quelloffene Implementierung der Bitwarden-Server-API – sie spricht dasselbe Protokoll wie der offizielle Bitwarden-Server und funktioniert mit allen offiziellen Bitwarden-Clients (Browser-Erweiterung, Desktop- und Mobile-App). Im Gegensatz zum offiziellen Bitwarden-Server, der .NET samt SQL-Datenbank voraussetzt und mehrere Gigabyte RAM benötigt, läuft Vaultwarden als einzelner Container mit eingebetteter SQLite-Datenbank und kommt mit rund 100 MB RAM aus. Beachte jedoch: Die Bitwarden-Clients erzwingen verschlüsselte Verbindungen – ohne gültiges HTTPS-Zertifikat funktioniert die Einrichtung nicht. Wir lösen das hier über den Nginx Proxy Manager.
Voraussetzungen
Bevor du startest, solltest du Folgendes bereithalten:
- Einen Linux-Server (z. B. Ubuntu) mit installiertem Docker und Docker Compose
- Eine eigene Domain bzw. Subdomain wie
vault.deine-domain.de, deren A-Record auf die Server-IP zeigt - Geöffnete Ports
80und443in der Firewall (für den Nginx Proxy Manager bzw. die Zertifikatsausstellung)
Vaultwarden funktioniert zwar auch über eine reine IP-Adresse, aber für TLS – und damit für die meisten Bitwarden-Clients – brauchst du eine echte Domain.
Schritt 1: Verzeichnis und Docker-Netzwerk anlegen
Lege zunächst ein dediziertes Verzeichnis an, damit Compose-Datei und persistente Daten leicht zu finden und zu sichern sind:
sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwardenDamit der Nginx Proxy Manager den Vaultwarden-Container später über den Containernamen erreichen kann, legen wir ein gemeinsames Docker-Netzwerk an:
docker network create proxy-netSchritt 2: Nginx Proxy Manager einrichten
Falls du den Nginx Proxy Manager noch nicht betreibst, lege dafür ein eigenes Verzeichnis und eine Compose-Datei an:
sudo mkdir -p /opt/npm
cd /opt/npm
nano docker-compose.ymlFüge folgenden Inhalt ein:
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80" # HTTP / ACME-Challenge
- "443:443" # HTTPS
- "81:81" # Admin-Oberfläche
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- proxy-net
networks:
proxy-net:
external: trueStarte den Proxy Manager:
docker compose up -dRufe anschließend die Admin-Oberfläche unter http://deine-server-ip:81 auf. Die Standard-Zugangsdaten beim ersten Login lauten admin@example.com / changeme. Du wirst sofort aufgefordert, E-Mail-Adresse und Passwort zu ändern – das solltest du unbedingt direkt erledigen.
Schritt 3: Vaultwarden per Docker Compose starten
Wechsle zurück in das Vaultwarden-Verzeichnis und erstelle die Compose-Datei:
cd /opt/vaultwarden
nano docker-compose.ymlFüge folgende Konfiguration ein und passe die DOMAIN an deine Subdomain an:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
DOMAIN: "https://vault.deine-domain.de"
SIGNUPS_ALLOWED: "true" # Nach Erstellung des eigenen Kontos auf "false" setzen
volumes:
- ./vw-data:/data
networks:
- proxy-net
networks:
proxy-net:
external: trueWichtig: Der Container veröffentlicht hier keinen Port nach außen. Der Zugriff erfolgt ausschließlich über den Nginx Proxy Manager im gemeinsamen Netzwerk. Starte den Container:
docker compose up -dÜber DOMAIN weiß Vaultwarden, dass es per HTTPS erreichbar ist – das ist u. a. für Datei-Anhänge und WebAuthn/2FA erforderlich.
Schritt 4: Proxy Host mit HTTPS einrichten
Wechsle in die Admin-Oberfläche des Nginx Proxy Managers und lege unter Hosts → Proxy Hosts → Add Proxy Host einen neuen Eintrag an.
Im Reiter Details:
- Domain Names:
vault.deine-domain.de - Scheme:
http - Forward Hostname / IP:
vaultwarden(der Containername) - Forward Port:
80 - Websockets Support: aktivieren
Im Reiter SSL:
- SSL Certificate: „Request a new SSL Certificate"
- Force SSL und HTTP/2 Support aktivieren
- Den Let's-Encrypt-Bedingungen zustimmen und eine gültige E-Mail-Adresse hinterlegen
Nach dem Speichern fordert der Nginx Proxy Manager automatisch ein Let's-Encrypt-Zertifikat an. Damit das gelingt, muss der A-Record deiner Subdomain bereits auf die Server-IP zeigen und Port 80 erreichbar sein.
Schritt 5: Konto anlegen und Registrierung schließen
Rufe nun https://vault.deine-domain.de im Browser auf. Erstellst du erfolgreich ein Konto, ist die Installation abgeschlossen. Lege als Erstes dein eigenes Benutzerkonto an.
Anschließend solltest du die offene Registrierung deaktivieren, damit sich keine Fremden anmelden können. Öffne dazu die Compose-Datei erneut:
cd /opt/vaultwarden
nano docker-compose.ymlÄndere die entsprechende Zeile auf:
SIGNUPS_ALLOWED: "false"Übernimm die Änderung mit:
docker compose up -dUpdates und Backups
Vaultwarden zu aktualisieren ist dank Docker unkompliziert. Wechsle in das Verzeichnis und hole das neueste Image:
cd /opt/vaultwarden
docker compose pull
docker compose up -dDatenbank-Migrationen führt Vaultwarden dabei automatisch durch. Sichere dennoch vor jedem Update zur Sicherheit deine Daten.
Für das Backup ist ausschließlich der Ordner vw-data entscheidend: Er enthält die SQLite-Datenbank (db.sqlite3), die RSA-Schlüssel sowie sämtliche Anhänge und Icons. Geht dieser Ordner verloren, sind deine Passwörter unwiederbringlich weg. Sichere ihn daher regelmäßig, z. B. so:
sudo tar czf vaultwarden-backup-$(date +%F).tar.gz /opt/vaultwarden/vw-dataNächste Schritte nach der Installation
Vaultwarden ist jetzt einsatzbereit. Sinnvolle Ergänzungen sind das Aktivieren der Zwei-Faktor-Authentifizierung in deinem Konto sowie das Einrichten von SMTP für E-Mail-Benachrichtigungen. Für weiterführende Konfigurationen lohnt ein Blick in weitere Docker Anleitungen sowie in das offizielle Vaultwarden-Wiki auf GitHub.