Skip to main content

Vaultwarden – Installation, Backup & Restore

Überblick

Diese Dokumentation beschreibt die Installation und Datensicherung von Vaultwarden in einer Docker-Umgebung.
Ziel ist ein robustes, wartungsarmes Backup-Konzept, das ohne externe Datenbank auskommt und eine Wiederherstellung in wenigen Minuten ermöglicht.


Systemübersicht

Komponente Wert
Dienst Vaultwarden
Laufzeit Docker Container
Containername vaultwarden
Image vaultwarden/server:latest
Port 8080 → 80
Datenbank SQLite
Datenpfad (Host) /root/vaultwarden/vw-data
NAS Mountpoint /mnt/nas
Backup-Ziel /mnt/nas/backups/vaultwarden

Architektur & Konzept

Vaultwarden speichert alle relevanten Daten im gemounteten Datenverzeichnis.
Dazu gehören:

  • db.sqlite3 (Hauptdatenbank)

  • db.sqlite3-wal / db.sqlite3-shm

  • rsa_key.pem (kritisch!)

  • Attachments

  • Icon Cache

➡️ Der Datenordner ist das vollständige Backup.
Es ist kein SQL-Dump erforderlich.


Docker-Datenbindung

Der Container ist wie folgt angebunden:


Host: /root/vaultwarden/vw-data Container: /data

Dieses Verzeichnis enthält alle produktiven Vaultwarden-Daten.


Backup-Strategie

Grundprinzip

  • tägliches Backup per Cron

  • Backup läuft nur, wenn das NAS gemountet ist

  • Container wird für SQLite-Konsistenz kurz gestoppt

  • rsync-Mirror + optionaler Tages-Snapshot

  • Container wird immer wieder gestartet

  • Logs werden rotiert


Backup-Skript

Speicherort


/usr/local/bin/backup-vaultwarden.sh

Funktionsweise (Kurzfassung)

  1. Lock setzen (keine parallelen Läufe)

  2. Prüfen:

    • Docker vorhanden

    • rsync vorhanden

    • NAS gemountet

  3. Container stoppen

  4. rsync:

    • Spiegel nach current/

    • Snapshot nach YYYY-MM-DD/

  5. Alte Snapshots automatisch löschen (Retention)

  6. Integritätscheck (db.sqlite3)

  7. Container starten

  8. Logging


Backup-Zielstruktur auf dem NAS


/mnt/nas/backups/vaultwarden/ ├── current/ │ ├── db.sqlite3 │ ├── db.sqlite3-wal │ ├── rsa_key.pem │ └── ... ├── 2026-01-03/ ├── 2026-01-04/ └── ...
  • current/ = letzter konsistenter Stand

  • Datumsordner = zusätzliche Sicherheit / Historie


Cronjob

Root-Crontab


0 2 * * * /usr/local/bin/backup-vaultwarden.sh
  • täglicher Lauf um 02:00

  • läuft als root (Docker + Mount erforderlich)


Logging

Logdatei


/var/log/vaultwarden-backup.log

Beispiel:


[2026-01-03 14:18:56] Backup START [2026-01-03 14:18:56] Stoppe Container: vaultwarden [2026-01-03 14:18:56] Rsync MIRROR -> /mnt/nas/backups/vaultwarden/current [2026-01-03 14:18:56] Rsync SNAPSHOT -> /mnt/nas/backups/vaultwarden/2026-01-03 [2026-01-03 14:18:56] Starte Container: vaultwarden [2026-01-03 14:18:57] Backup OK

Logrotation

Konfiguration


/etc/logrotate.d/vaultwarden-backup

/var/log/vaultwarden-backup.log { daily rotate 14 missingok notifempty compress delaycompress copytruncate create 600 root root }
  • tägliche Rotation

  • 14 Tage Historie

  • Logs nur für root lesbar


Restore (Notfall-Wiederherstellung)

Szenario

  • System neu

  • Container beschädigt

  • Daten verloren

Vorgehen


docker stop vaultwarden rm -rf /root/vaultwarden/vw-data/* rsync -a /mnt/nas/backups/vaultwarden/current/ /root/vaultwarden/vw-data/ docker start vaultwarden

➡️ Vaultwarden ist sofort vollständig wiederhergestellt
inkl. Benutzer, Tresore, 2FA und Organisationen.


Warum SQLite hier bewusst eingesetzt wird

  • sehr geringe Last

  • ein einzelner Dienst

  • extrem stabile WAL-Engine

  • einfachstes Backup

  • schnellste Wiederherstellung

MariaDB/MySQL ist aktuell nicht notwendig.


Sicherheitsrelevante Hinweise

  • rsa_key.pem muss gesichert werden
    → Verlust = Clients müssen neu gekoppelt werden

  • Backup-Verzeichnis ist restriktiv (600/700)

  • NAS-Zugangsdaten liegen nicht im Skript


Fazit

Dieses Setup bietet:

  • konsistente Backups

  • minimale Komplexität

  • schnelle Recovery

  • klare Wartbarkeit

  • hohe Datensicherheit für private Daten

Vaultwarden ist damit produktionsreif abgesichert.