Vaultwarden auf der Synology: eigener Passwortmanager mit Docker und SQLite-Backup
Vaultwarden bringt einen Bitwarden-kompatiblen Passwortmanager auf deine Synology-NAS. Diese Anleitung zeigt das komplette Setup im Container Manager mit SQLite, Admin-Panel, Reverse Proxy für HTTPS und einer sauberen Backup-Strategie für das /data-Volume.

Ein eigener Passwortmanager auf der NAS hat einen klaren Reiz: Deine Zugangsdaten liegen nicht bei einem fremden Cloud-Anbieter, sondern auf deiner eigenen Hardware im Keller oder im Arbeitszimmer. Vaultwarden ist eine schlanke, in Rust geschriebene Server-Implementierung, die zum offiziellen Bitwarden-Protokoll kompatibel ist. Das bedeutet: Du nutzt die ganz normalen Bitwarden-Apps und Browser-Erweiterungen, dein Tresor liegt aber auf deiner Synology. In dieser Anleitung baust du Vaultwarden im Container Manager mit SQLite-Datenbank auf, schaltest das Admin-Panel frei, stellst HTTPS über einen Reverse Proxy bereit und richtest ein sauberes Backup des Datenvolumens ein. Die Anleitung richtet sich an Homeserver-Bastler und Admins, die ihren Passwort-Tresor selbst hosten wollen.
Was ist Vaultwarden und warum SQLite?
Vaultwarden (früher bitwarden_rs) ist ein inoffizieller, aber sehr aktiv gepflegter Bitwarden-Server. Er deckt praktisch alle Funktionen ab, die Privatnutzer und kleine Teams brauchen: Passwörter, Notizen, TOTP-Codes, Dateianhänge, Organisationen, Passkeys und Bitwarden Send. Der große Vorteil gegenüber dem offiziellen Bitwarden-Server ist der minimale Ressourcenverbrauch. Ein einzelner Container mit wenigen hundert MB RAM reicht völlig aus, was ihn ideal für eine Synology-NAS macht.
Vaultwarden nutzt standardmäßig SQLite als Datenbank. Für einen einzelnen Haushalt oder ein kleines Team ist das die einfachste und robusteste Wahl: keine separate Datenbank-Container, keine Verbindungs-Strings, kein zusätzlicher RAM-Bedarf. Die gesamte Datenbank liegt als einzelne Datei db.sqlite3 im Datenvolumen. Genau das vereinfacht auch das Backup enorm, denn du sicherst am Ende einfach einen einzigen Ordner.
Wichtig vorab: Browser-Erweiterungen und mobile Apps von Bitwarden sprechen aus Sicherheitsgründen nur mit einem Server, der über HTTPS erreichbar ist. WebAuthn, Passkeys und die Web-Vault-Oberfläche funktionieren ohne gültiges Zertifikat nicht. Deshalb betreiben wir Vaultwarden hinter einem Reverse Proxy. Den nackten HTTP-Port nutzen wir nur intern zum Testen.
Voraussetzungen
- Synology-NAS mit DSM 7.2 oder neuer und installiertem Paket Container Manager
- Ein NAS-Modell mit x86-/64-Bit-CPU (die meisten Plus- und xs-Modelle). Auf ARM-Modellen läuft das offizielle Image ebenfalls, da es als Multi-Arch-Image bereitgestellt wird
- Administrator-Konto in DSM und Zugriff auf File Station und Systemsteuerung
- Ein freier Host-Port für den Container, z. B. 8081 (DSM belegt 80 und 443 selbst)
- Eine Domain oder Subdomain, die auf deine NAS zeigt (z. B.
vault.deinedomain.deper DynDNS / DDNS), damit der Reverse Proxy ein gültiges Let's-Encrypt-Zertifikat ausstellen kann - Optional, aber empfohlen: das Paket Hyper Backup für die automatisierte Sicherung
Schritt 1: Datenordner anlegen
Öffne die File Station und lege im freigegebenen Ordner docker einen Unterordner für Vaultwarden an. Wenn der Ordner docker noch nicht existiert, erstelle ihn zuerst. Die Zielstruktur sieht so aus:
/volume1/docker/vaultwarden
/volume1/docker/vaultwarden/vw-dataIm Unterordner vw-data legt Vaultwarden später alle persistenten Daten ab: die Datenbank db.sqlite3, den Ordner attachments für Dateianhänge, die config.json sowie den Schlüssel rsa_key.pem für die Token-Signatur. Dieser eine Ordner ist dein gesamter Tresor, ihn musst du später sichern.
Schritt 2: Admin-Token erzeugen
Das Admin-Panel von Vaultwarden erreichst du unter /admin. Es wird über die Umgebungsvariable ADMIN_TOKEN abgesichert. Statt ein Klartext-Passwort einzutragen, empfiehlt das Projekt einen Argon2-Hash. Den erzeugst du am einfachsten direkt mit dem Vaultwarden-Image. Falls du SSH auf der NAS aktiviert hast, führe folgenden Befehl aus:
sudo docker run --rm -it vaultwarden/server /vaultwarden hashDas Tool fragt nach einem Passwort und gibt anschließend einen Hash aus, der mit $argon2id$... beginnt. Diesen kompletten String kopierst du für den nächsten Schritt. Hast du keinen SSH-Zugang, kannst du den Hash später auch auf einem anderen Rechner mit Docker erzeugen oder vorläufig ein langes Zufalls-Passwort als Klartext-Token verwenden und es nach dem ersten Login durch einen Hash ersetzen.
Hinweis zum Argon2-String: Er enthält Dollarzeichen. In einer YAML-Datei musst du jedes $ verdoppeln (also $$), weil Docker Compose sonst versucht, es als Variable zu interpretieren. Darauf achten wir im nächsten Schritt.
Schritt 3: docker-compose.yml erstellen
Erstelle mit einem Texteditor eine Datei docker-compose.yml und lege sie im Ordner /volume1/docker/vaultwarden ab. Du kannst den Inhalt später auch direkt in den Container Manager einfügen. Passe ADMIN_TOKEN und DOMAIN an deine Werte an:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.deinedomain.de"
ADMIN_TOKEN: "$$argon2id$$v=19$$m=65540,t=3,p=4$$HIER_DEIN_HASH"
SIGNUPS_ALLOWED: "true"
volumes:
- ./vw-data:/data
ports:
- "8081:80"Kurz erklärt, was hier passiert:
image: das offizielle Vaultwarden-Image. Für den Produktivbetrieb solltest du den Tag später auf eine konkrete Version pinnen statt:latestzu nutzen, damit ein automatisches Update nicht ungeplant durchschlägt.DOMAIN: die vollständige URL, unter der Vaultwarden später erreichbar ist. Sie wird für WebAuthn, Passkeys und die Verifizierungs-Mails gebraucht und muss exakt mit deiner späteren Adresse übereinstimmen.ADMIN_TOKEN: dein Argon2-Hash aus Schritt 2, mit verdoppelten Dollarzeichen.SIGNUPS_ALLOWED: vorersttrue, damit du dein erstes Konto anlegen kannst. Nach der Erstanlage stellst du das auffalse(siehe Schritt 7).ports: der interne Port 80 wird auf den freien Host-Port 8081 gemappt.
Schritt 4: Projekt im Container Manager anlegen
Öffne den Container Manager und wechsle links auf Projekt. Klicke auf Erstellen und gehe so vor:
- Vergib als Projektnamen
vaultwarden. - Wähle als Pfad den Ordner
/volume1/docker/vaultwarden. - Container Manager erkennt die vorhandene
docker-compose.yml. Alternativ wählst du "Eine docker-compose.yml erstellen" und fügst den YAML-Inhalt aus Schritt 3 direkt ein. - Bestätige die folgenden Dialoge. Den Web-Portal-Schritt kannst du überspringen, wir nutzen einen eigenen Reverse Proxy.
- Klicke auf Fertig. Container Manager lädt das Image herunter und startet den Container.
Nach kurzer Zeit zeigt der Container den Status "laufend". Im Ordner vw-data sind jetzt die ersten Dateien wie rsa_key.pem und db.sqlite3 aufgetaucht.
Schritt 5: Erster Test über HTTP
Bevor wir den Reverse Proxy einrichten, prüfst du, ob der Container grundsätzlich läuft. Öffne im Browser:
http://NAS-IP:8081Ersetze NAS-IP durch die lokale IP-Adresse deiner Synology. Die Vaultwarden-Web-Oberfläche sollte erscheinen. Lege aber noch kein Konto an, denn über reines HTTP funktionieren WebAuthn und Passkeys nicht und die Verschlüsselung deines Master-Passworts läuft nur über eine sichere Verbindung sauber. Wir richten zuerst HTTPS ein.
Schritt 6: HTTPS über Reverse Proxy
Damit Browser-Erweiterungen und Apps mit deinem Server reden, braucht Vaultwarden ein gültiges Zertifikat. Du hast zwei gängige Wege.
Variante A: DSM-eigener Reverse Proxy
DSM bringt einen Reverse Proxy mit. Öffne Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy und erstelle eine neue Regel:
- Quelle: Protokoll HTTPS, Hostname
vault.deinedomain.de, Port 443 - Ziel: Protokoll HTTP, Hostname
localhost, Port8081 - Im Reiter Eigene Header über "WebSocket erstellen" die WebSocket-Header hinzufügen, damit der Live-Sync funktioniert
Anschließend hinterlegst du in der Systemsteuerung unter Sicherheit → Zertifikat ein Let's-Encrypt-Zertifikat für deine Domain und ordnest es dem Reverse-Proxy-Dienst zu.
Variante B: Nginx Proxy Manager (NPM)
Betreibst du bereits einen Nginx Proxy Manager (Image jc21/nginx-proxy-manager:latest), legst du dort einen neuen Proxy Host an: Domain vault.deinedomain.de, Weiterleitung an die NAS-IP auf Port 8081, Schema http. Aktiviere im Reiter SSL ein Let's-Encrypt-Zertifikat samt "Force SSL" und im Reiter Details die Option Websockets Support. Letztere ist wichtig, weil der Live-Sync von Vaultwarden seit den neueren Versionen über denselben Port wie die Web-Oberfläche läuft und keinen separaten WebSocket-Port mehr braucht.
Prüfe nach der Einrichtung, ob https://vault.deinedomain.de mit gültigem Schloss-Symbol lädt.
Schritt 7: Konto anlegen und Registrierung schließen
Rufe jetzt deine HTTPS-Adresse auf und klicke auf Konto erstellen. Vergib eine E-Mail-Adresse und ein starkes, einzigartiges Master-Passwort. Dieses Master-Passwort kann niemand für dich zurücksetzen, es entschlüsselt deinen kompletten Tresor. Notiere es an einem sicheren Ort.
Sobald dein Konto (und ggf. die Konten deiner Familie) steht, schließt du die offene Registrierung wieder. Öffne dazu die docker-compose.yml und setze:
SIGNUPS_ALLOWED: "false"Im Container Manager wählst du dann beim Projekt Aktion → Erstellen bzw. baust das Projekt neu, damit die Änderung greift. Ab jetzt kann sich niemand mehr ohne Einladung registrieren. Neue Nutzer ladest du bei Bedarf über eine Organisation im Admin-Panel oder im Web-Vault ein.
Schritt 8: Admin-Panel prüfen
Rufe https://vault.deinedomain.de/admin auf und melde dich mit dem Passwort an, aus dem du in Schritt 2 den Hash erzeugt hast. Im Admin-Panel siehst du registrierte Nutzer, kannst Diagnosen ausführen und globale Einstellungen vornehmen. Behandle den Zugang wie ein Schlüsselkonto: Wer hier hereinkommt, kann die Server-Konfiguration ändern. Gib den Admin-Token niemals weiter.
Schritt 9: Bitwarden-Clients verbinden
Installiere die offizielle Bitwarden-App oder die Browser-Erweiterung. Bevor du dich anmeldest, öffnest du die Server-Einstellungen (Zahnrad-Symbol bzw. "Region: Selbst gehostet") und trägst bei Server-URL deine Adresse https://vault.deinedomain.de ein. Danach meldest du dich mit deiner E-Mail und dem Master-Passwort an. Ab jetzt synchronisiert die App mit deiner Synology.
Schritt 10: Backup des Datenvolumens
Dein gesamter Tresor steckt im Ordner vw-data. SQLite ist eine Datei-Datenbank, deshalb solltest du sie nicht einfach im laufenden Betrieb wegkopieren, sondern konsistent sichern. Dafür hast du zwei gute Optionen.
Variante 1: Container kurz stoppen
Der einfachste konsistente Weg: Container stoppen, Ordner sichern, Container wieder starten. Das kannst du als geplante Aufgabe nachts ausführen. Ein Backup, das den Container nur für wenige Sekunden anhält, ist für einen Privat-Tresor völlig akzeptabel.
Variante 2: SQLite-Online-Backup
Willst du ohne Stopp sichern, nutzt du das eingebaute Online-Backup von SQLite. Es erzeugt eine konsistente Kopie der Datenbank, während Vaultwarden weiterläuft:
sudo docker exec vaultwarden \
sqlite3 /data/db.sqlite3 ".backup '/data/db-backup.sqlite3'"Anschließend sicherst du den kompletten Ordner vw-data inklusive der erzeugten db-backup.sqlite3, der attachments, der config.json und des rsa_key.pem. Ohne den rsa_key lassen sich bestehende Sitzungen nicht mehr validieren, er gehört also zwingend ins Backup.
Automatisieren mit Hyper Backup
Nimm den Ordner /volume1/docker/vaultwarden in eine Hyper Backup-Aufgabe auf und ziele auf ein externes Laufwerk, ein zweites NAS oder einen Cloud-Speicher. Alternativ lässt sich das Ganze mit rclone per geplanter Aufgabe an einen externen Speicher schieben. Wichtig ist die 3-2-1-Regel: mindestens eine Kopie ausser Haus.
Updates und Wartung
Für ein Update öffnest du im Container Manager das Projekt, lädst über Aktion → Image neu laden / Build das aktuelle Image und baust den Container neu. Vaultwarden migriert die Datenbank dabei automatisch. Mache vor größeren Versionssprung-Updates ein Backup. Wenn du :latest verwendest, ziehe jedes Update bewusst, statt es etwa per Watchtower vollautomatisch durchlaufen zu lassen, damit eine fehlerhafte Version dir nicht den Zugang zum Tresor blockiert.
Troubleshooting
- "An error has occurred" beim Login oder Browser-Erweiterung verbindet nicht: Meist fehlt gültiges HTTPS. Prüfe das Zertifikat und ob
DOMAINexakt mit der aufgerufenen URL übereinstimmt. - Live-Sync funktioniert nicht: WebSocket-Unterstützung im Reverse Proxy aktivieren. Bei NPM die Option "Websockets Support", beim DSM-Proxy die WebSocket-Header.
- Admin-Panel lässt sich nicht öffnen: Prüfe den
ADMIN_TOKEN. Bei einem Argon2-Hash in der YAML müssen alle$verdoppelt sein. - Port 8081 belegt: Wähle einen anderen freien Host-Port und passe sowohl das Compose-File als auch den Reverse-Proxy-Eintrag an.
- Konto kann nicht angelegt werden:
SIGNUPS_ALLOWEDsteht auffalse. Für die Erstanlage kurz auftruesetzen.
Fazit
Mit Vaultwarden auf der Synology bekommst du einen vollwertigen, Bitwarden-kompatiblen Passwortmanager, der komplett unter deiner Kontrolle läuft. Dank SQLite bleibt das Setup schlank und das Backup besteht aus einem einzigen Ordner. Entscheidend für den Alltag sind zwei Dinge: ein sauberes HTTPS-Setup hinter dem Reverse Proxy und eine zuverlässige, automatisierte Sicherung des Datenvolumens. Sind beide eingerichtet, hast du einen Passwort-Tresor, der auf deiner eigenen Hardware liegt und dennoch mit allen offiziellen Bitwarden-Clients funktioniert.
Weitere Anleitungen in den Kategorien Synology / NAS und Docker.
Quellen: Vaultwarden (dani-garcia/vaultwarden), Vaultwarden Wiki, Nginx Proxy Manager