Vaultwarden: Eine effiziente Alternative zur Bitwarden-Server-API, entwickelt in Rust. Diese Implementierung ist vollständig kompatibel mit Bitwarden-Clients und ideal für selbstgehostete Lösungen. Vaultwarden bietet eine ressourcenschonende Alternative zum offiziellen, ressourcenintensiven Bitwarden-Dienst und eignet sich perfekt für individuelle Hosting-Anforderungen.
0. Versionierung
| Datum | Änderung |
|---|---|
| 18.04.2026 | Kapitel 7.3 (AppSec) hinzugefügt |
| 14.03.2026 | Kapitel 6, 7 und 10 überarbeitet. Danke an @pinns für das Backup / Restore Skript |
| 03.02.2025 | Kapitel 8 angepasst. Danke an @karl159 |
| 01.02.2025 | Kapitel 8 hinzugefügt. Danke für die Hinweise @wuldorf |
| 12.01.2025 | Pfade und Link zu Traefik v3 angepasst |
| 25.01.2024 | Überarbeitung & Veröffentlichung |
| 08.02.2023 | Vorbereitung |
1. Vorwort
Als Internet-Nutzer kennen Sie es sicher nur zu gut: Ständig werden Sie auf irgendwelchen Webseiten aufgefordert, sich mit einem Passwort anzumelden. Und damit Sie nicht den Überblick verlieren, nutzen Sie meistens das Gleiche. Doch diese Bequemlichkeit ist ein potentielles Sicherheitsrisiko: Wird Ihr Passwort einmal ausgespäht – sei es durch Phishing-Mails oder andere Sicherheitslücken – sind gleich mehrere Ihrer Accounts betroffen. Mithilfe eines Passwortmanagers können Sie diesem Problem Einhalt gebieten.
https://www.heise.de/tipps-tricks/Passwortmanager-So-verwalten-Sie-Ihre-Passwoerter-3934582.html
Es gibt genügend Passwortmanager auf dem Markt. Darunter auch LastPass welches in der Vergangenheit eher mit negativen Schlagzeilen in der Presse war. Eines der wohl sichersten und umfangreichsten ist wohl 1Password. Dies ist inzwischen nur noch im Abo-Modell zu erhalten. Dreh- und Angelpunkt ist bei jedem System, neben dem allgemeinem sichern Setup, das Master-Passwort. Die Entwickler von LastPass konnten noch so gut alle Sicherheitsstandards implementieren, wenn das Master-Passwort nicht sicher ist 🤯.
2. Voraussetzung
Hinweis: In meinem Standard-Setup hat der normale Nutzer keine Zugriffrechte auf Docker, also arbeite ich meine Anleitungen als root ab. Dies kann bedeuten, dass ihr ggf. sudo nutzen müsst, wenn ihr nicht als root-User arbeitet.
3. Ordner und Dateien anlegen
Beginnen wir mit den Befehlen zum Erstellt der notwendigen Ordner und Dateien für Vaultwarden. Danach wechseln wir direkt in das Hauptverzeichnis unserer Vaultwarden-Installation:
mkdir -p /opt/containers/vaultwarden/config
mkdir -p /root/secrets/vaultwarden/
touch /opt/containers/vaultwarden/{.env,docker-compose.yml,docker-compose.override.yml}
touch /opt/containers/vaultwarden/config/database.env
touch /var/log/vaultwarden.log
cd /opt/containers/vaultwardenCode-Sprache: JavaScript (javascript)
4. Docker-Compose Dateien bearbeiten
In diesem Abschnitt bearbeiten wir die Docker-Compose Dateien. Um die Übersicht zu bewahren, nutze ich zusätzlich eine docker-compose.override.yml.
4.1. docker-compose.yml
In der docker-compose.yml legen wir die Basisstruktur fest:
nano /opt/containers/vaultwarden/docker-compose.yml
services:
vaultwarden-db:
container_name: vaultwarden-db
image: mariadb:11
command: --transaction-isolation=READ-COMMITTED --log-bin=ROW --innodb_read_only_compressed=OFF
restart: unless-stopped
healthcheck:
test: [ "CMD", "healthcheck.sh", "--connect", "--innodb_initialized" ]
interval: 10s
timeout: 10s
retries: 10
volumes:
- /etc/localtime:/etc/localtime:ro
- ./database:/var/lib/mysql
env_file:
- ./.env
- ./config/database.env
networks:
default: null
hostname: vaultwarden-db
vaultwarden:
container_name: vaultwarden
image: vaultwarden/server:latest
depends_on:
vaultwarden-db:
condition: service_healthy
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/log/vaultwarden.log:/var/log/vaultwarden.log
- ./data:/data
env_file:
- ./.env
- ./config/vaultwarden.env
networks:
default: null
hostname: vaultwarden
networks:
default: {}Code-Sprache: PHP (php)
Bei diesem Inhalt handelt es sich um exklusiven Content für Community Plus Mitglieder und Supporter.
Bitte logge dich mit deinem Account ein um den Inhalt zu sehen.
10. Backup und Restore
10.1 Backup
Backup-Skript ist speziell für den Live-Betrieb von Vaultwarden mit einer MariaDB-Datenbank konzipiert. Anstatt die rohen Datenbankdateien im laufenden Betrieb zu kopieren (was oft zu korrupten Backups führt), erzeugt es einen echten SQL-Dump (db_dump.sql). Die Datenbank-Passwörter zieht es sich dafür sicher aus den zuvor angelegten Docker-Secrets (/root/secrets). Danach packt es die Vaultwarden-Daten (Vault-Dateien, Configs) zusammen mit dem Dump in ein .tar.gz-Archiv. Das Archiv wird direkt nach der Erstellung auf seine Integrität geprüft. Beschädigte Backups werden als .CORRUPT markiert. Alte Backups werden nach 14 Tagen automatisch gelöscht.
nano /opt/containers/vaultwarden/backup.sh
Inhalt:
#!/bin/bash
# Beende das Skript bei nicht deklarierten Variablen oder kritischen Fehlern in Pipes
set -e
set -u
set -o pipefail
# --- KONFIGURATION ---
SERVICE_NAME="vaultwarden"
PROJECT_DIR="/opt/containers/vaultwarden"
BACKUP_DIR="/opt/containers/vaultwarden-backups"
KEEP_BACKUPS=14
# Docker / DB Infos
DB_CONTAINER="vaultwarden-db"
SECRET_FILE_URL="/root/secrets/vaultwarden/database_url"
SECRET_FILE_PASS="/root/secrets/vaultwarden/db_user"
# ---------------------
DATE=$(date +%Y%m%d_%H%M%S)
ARCHIVE_NAME="${SERVICE_NAME}_full_backup_${DATE}.tar.gz"
echo "====================================================="
echo "[$(date '+%Y-%m-%d %H:%M:%S')] START VAULTWARDEN BACKUP"
echo "====================================================="
# 1. SICHERHEITS-CHECK: Backup DIR vorhanden?
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
echo "✅ Backup-Ordner $BACKUP_DIR erstellt!"
fi
# 2. SECRETS EINLESEN
if [ -f "$SECRET_FILE_URL" ] && [ -f "$SECRET_FILE_PASS" ]; then
DB_URL=$(cat "$SECRET_FILE_URL")
# DB_USER: Extrahiert alles zwischen 'mysql://' und dem allerersten ':'
DB_USER=$(echo "$DB_URL" | sed -n 's|^mysql://\([^:]*\):.*|\1|p')
# DB_NAME: Extrahiert alles nach dem letzten '/' (schneidet eventuelle URL-Parameter mit '?' ab)
DB_NAME=$(echo "$DB_URL" | sed -e 's|.*/||' -e 's|?.*||')
# DB_PASS: Wird direkt und roh aus der Datei gelesen (sicher gegen JEDES Sonderzeichen)
DB_PASS=$(cat "$SECRET_FILE_PASS")
# Kurzer Check, ob das Extrahieren geklappt hat
if [ -z "$DB_USER" ] || [ -z "$DB_NAME" ]; then
echo "❌ KRITISCH: Konnte DB_USER oder DB_NAME nicht aus $SECRET_FILE_URL parsen!"
exit 1
fi
else
echo "❌ KRITISCH: Secret-Dateien ($SECRET_FILE_URL oder $SECRET_FILE_PASS) nicht gefunden!"
exit 1
fi
echo "✅ Secrets eingelesen (User: $DB_USER | DB: $DB_NAME)"
# 3. DATENBANK DUMP ERSTELLEN
echo "--> Exportiere Datenbank aus $DB_CONTAINER..."
# Wir schalten set -e kurz aus, um den Exit-Code des Dumps manuell zu fangen
set +e
docker exec -e MYSQL_PWD="$DB_PASS" "$DB_CONTAINER" mariadb-dump -u"$DB_USER" "$DB_NAME" > "$PROJECT_DIR/db_dump.sql"
DUMP_EXIT_CODE=$?
set -e
if [ $DUMP_EXIT_CODE -ne 0 ]; then
echo "❌ KRITISCH: Datenbank-Export fehlgeschlagen! (Container läuft nicht oder falsche Credentials)"
rm -f "$PROJECT_DIR/db_dump.sql"
exit 1
fi
echo "✅ Datenbank erfolgreich exportiert."
# 4. ALLES PACKEN (Nur relevante Daten)
echo "--> Erstelle Archiv: $ARCHIVE_NAME..."
# Wechsel ins Projektverzeichnis für saubere relative Pfade im Tar-Archiv
cd "$PROJECT_DIR" || exit 1
# Wir schließen das /database Verzeichnis (rohe DB-Files) und Log-Dateien aus
# und packen stattdessen den Rest (data-Ordner, configs, compose-files und den SQL-Dump)
set +e
tar --warning=no-file-changed -czf "$BACKUP_DIR/$ARCHIVE_NAME" \
--exclude="./database" \
--exclude="./*.log" \
. 2>/dev/null
TAR_EXIT=$?
set -e
# tar Exit Code 1 bedeutet meist nur "Datei hat sich während des Lesens geändert", das ist okay.
# Exit > 1 ist ein echter Fehler.
if [ $TAR_EXIT -gt 1 ]; then
echo "❌ KRITISCH: Fehler beim Erstellen des Tar-Archivs (Exit-Code: $TAR_EXIT)."
rm -f "$PROJECT_DIR/db_dump.sql"
exit 1
fi
# 5. SOFORTIGE PRÜFUNG (Integritätscheck)
echo "--> Verifiziere Archiv..."
set +e
tar -tzf "$BACKUP_DIR/$ARCHIVE_NAME" > /dev/null 2>&1
TEST_EXIT=$?
set -e
if [ $TEST_EXIT -eq 0 ]; then
echo "✅ SUCCESS: Archiv ist valide und fehlerfrei."
# Dump nach erfolgreichem Backup löschen
rm -f "$PROJECT_DIR/db_dump.sql"
else
echo "❌ KRITISCH: Archiv ist beschädigt (Gzip-Fehler)!"
echo "--> Benenne Datei um in .CORRUPT"
mv "$BACKUP_DIR/$ARCHIVE_NAME" "$BACKUP_DIR/${ARCHIVE_NAME}.CORRUPT"
rm -f "$PROJECT_DIR/db_dump.sql"
exit 1
fi
# 6. ALTE BACKUPS LÖSCHEN (Rotation)
echo "--> Bereinige alte Backups (älter als $KEEP_BACKUPS Tage)..."
find "$BACKUP_DIR" -type f -name "${SERVICE_NAME}_full_backup_*" -not -name "*.CORRUPT" -mtime +$KEEP_BACKUPS -delete
echo "✅ Alte Backups bereinigt."
echo "====================================================="
echo "[$(date '+%Y-%m-%d %H:%M:%S')] BACKUP ERFOLGREICH ABGESCHLOSSEN"
echo "====================================================="Code-Sprache: PHP (php)
Hier müsst ihr entsprechend diese beiden Parameter anpassen:
- PROJECT_DIR=”/opt/containers/vaultwarden”
- BACKUP_DIR=”/opt/containers/vaultwarden-backups”
Nun machen wir das Skript noch ausführbar und starten es einmal zum Testen:
chmod +x /opt/containers/vaultwarden/backup.sh
/opt/containers/vaultwarden/backup.sh
Wichtig:
Die Docker Secrets (/root/secrets/vaultwarden) sind aus Sicherheitsgründen nicht Teil des Backups. Diese müsst ihr also manuell sichern, damit anschließend die Wiederherstellung funktioniert.
10.2 Automatisierung des Backup
Damit du das Backup-Skript nicht jeden Tag manuell ausführen musst, richten wir einen Cronjob ein. Dieser führt das Skript automatisch zu einer festgelegten Uhrzeit aus (z. B. nachts um 03:00 Uhr). Führe auf dem Host-System (als root) folgenden Befehl aus:
crontab -e
Nun fügst du am Ende folgendes hinzu:
0 3 * * * /opt/containers/vaultwarden/backup.sh >> /var/log/vaultwarden_backup.log 2>&1Code-Sprache: JavaScript (javascript)
Diese Webseite hilft dir dabei einen perfekten Crontab Zeitpunkt einzustellen: https://crontab.guru/
10.3 Restore
Im Falle eines Server-Absturzes oder Umzugs hilft das Restore-Skript. Es ist interaktiv: Es listet die letzten 10 Backups auf und lässt dich eines auswählen. Bevor es Daten überschreibt, stoppt es laufende Vaultwarden-Container, führt einen Integritätscheck des Archivs durch und entpackt die Daten. Da die Datenbank vor dem Import laufen muss, startet das Skript intelligent nur den MariaDB-Container, wartet auf dessen Bereitschaft, pusht den SQL-Dump in die Datenbank und startet anschließend den restlichen Vaultwarden-Stack neu.
Nun erstellen wir uns das Skript zur Wiederherstellung:
nano /opt/containers/vaultwarden/restore.sh
Inhalt:
#!/bin/bash
set -e
# --- KONFIGURATION ---
PROJECT_DIR="/opt/containers/vaultwarden"
BACKUP_DIR="/opt/containers/vaultwarden-backups"
DB_CONTAINER="vaultwarden-db"
SECRET_FILE_URL="/root/secrets/vaultwarden/database_url"
SECRET_FILE_PASS="/root/secrets/vaultwarden/db_user"
# ---------------------
echo "====================================================="
echo " VAULTWARDEN RESTORE-ASSISTENT"
echo "====================================================="
if [[ $EUID -ne 0 ]]; then
echo "❌ Bitte mit 'sudo' ausführen!"
exit 1
fi
# 1. Backup-Datei auswählen
echo "🔍 Suche Backups in $BACKUP_DIR..."
# 'ls' mit Array-Zuweisung sicher machen (behandelt Pfade mit Leerzeichen besser)
mapfile -t options < <(ls -t "$BACKUP_DIR"/vaultwarden_full_backup_*.tar.gz 2>/dev/null | head -n 10)
if [ ${#options[@]} -eq 0 ]; then
echo "❌ FEHLER: Keine Backups in $BACKUP_DIR gefunden!"
exit 1
fi
PS3="Bitte wählen Sie ein Backup (Nummer eingeben): "
select BACKUP_FILE in "${options[@]}"; do
if [ -n "$BACKUP_FILE" ]; then
break
else
echo "⚠️ Ungültige Auswahl."
fi
done
# --- AUTOMATISCHER SICHERHEITS-CHECK ---
echo "--> Prüfe Archiv-Integrität vor dem Restore..."
if [[ "$BACKUP_FILE" == *".CORRUPT"* ]]; then
echo "❌ FEHLER: Dieses Backup ist als DEFEKT markiert!"
exit 1
fi
if ! tar -tzf "$BACKUP_FILE" > /dev/null 2>&1; then
echo "❌ KRITISCH: Archiv technisch beschädigt! Restore abgebrochen."
exit 1
fi
echo "✅ Archiv valide."
# ---------------------------------------
# 2. Bestätigung
echo "Gewählt: $BACKUP_FILE"
read -p "⚠️ WARNUNG: Alle aktuellen Daten in $PROJECT_DIR werden überschrieben! Fortfahren? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Abbruch."
exit 1
fi
# 3. Vorbereitung (Alte Container stoppen)
if [ -d "$PROJECT_DIR" ] && [ -f "$PROJECT_DIR/docker-compose.yml" ]; then
echo "--> Stoppe eventuell laufende Container..."
cd "$PROJECT_DIR"
docker compose down 2>/dev/null || true
fi
# 4. Entpacken
echo "--> Entpacke Dateien nach $PROJECT_DIR..."
mkdir -p "$PROJECT_DIR"
tar -xzf "$BACKUP_FILE" -C "$PROJECT_DIR"
# Stelle sicher, dass das DB-Verzeichnis für MariaDB existiert
mkdir -p "$PROJECT_DIR/database"
# 5. Datenbank-Import
if [ -f "$SECRET_FILE_URL" ] && [ -f "$SECRET_FILE_PASS" ]; then
# Robuste Methode zum Einlesen wie im Backup-Skript
DB_URL=$(cat "$SECRET_FILE_URL")
DB_USER=$(echo "$DB_URL" | sed -n 's|^mysql://\([^:]*\):.*|\1|p')
DB_NAME=$(echo "$DB_URL" | sed -e 's|.*/||' -e 's|?.*||')
DB_PASS=$(cat "$SECRET_FILE_PASS")
if [ -f "$PROJECT_DIR/db_dump.sql" ]; then
echo "--> Starte NUR die Datenbank für den Import..."
cd "$PROJECT_DIR"
docker compose up -d "$DB_CONTAINER"
echo "--> Warte 15 Sekunden auf Datenbank-Initialisierung..."
sleep 15
echo "--> Importiere Datenbank in $DB_CONTAINER..."
cat "$PROJECT_DIR/db_dump.sql" | docker exec -i -e MYSQL_PWD="$DB_PASS" "$DB_CONTAINER" mariadb -u"$DB_USER" "$DB_NAME"
if [ $? -eq 0 ]; then
echo "✅ Datenbank-Import erfolgreich."
rm -f "$PROJECT_DIR/db_dump.sql"
else
echo "❌ FEHLER beim Datenbank-Import!"
fi
else
echo "⚠️ HINWEIS: Kein db_dump.sql im Archiv gefunden. Import übersprungen."
fi
else
echo "⚠️ HINWEIS: Secret-Dateien nicht gefunden. DB-Import übersprungen."
echo "👉 Falls dies ein neuer Server ist, müssen die Secrets in /root/secrets/vaultwarden VOR dem Restore angelegt werden!"
fi
# 6. Container final starten/neustarten
echo "--> Starte restlichen Vaultwarden-Stack..."
cd "$PROJECT_DIR"
docker compose up -d
echo "====================================================="
echo " 🎉 Wiederherstellung erfolgreich abgeschlossen!"
echo "====================================================="Code-Sprache: PHP (php)
Folgende Parameter müsst ihr entsprechend anpassen:
- PROJECT_DIR=”/opt/containers/vaultwarden”
- BACKUP_DIR=”/opt/containers/vaultwarden-backups”
Nun starten wir das Skript für einen Test:
chmod +x /opt/containers/vaultwarden/restore.sh
/opt/containers/vaultwarden/restore.sh

Guten Morgen in die Runde,
folgende Herausforderung stellt sich mir gerade. Auf einem VPS bei Hetzner habe ich Traefik+Crowdsec nach Anleitung installiert, funktioniert. Wenn ich nun Vaultwarden installiere bekomme ich es nicht zum Laufen, der Container scheint ewig zum Starten zu benötigen. Wenn ich das Skript aus Punkt 7.3 Appsec ausführe, sperrt es mir zusätzlich alle Webdienste, die auf dem VPS installiert sind (in diesem Fall den Zugang zum Dashboard von Traefik – ich habe es aber auch bereits auf einem anderen VPS mit weiteren Diensten probiert, da waren alle gesperrt mit einer 403’er-Meldung). Der Zugang per SSH funktioniert problemlos, die Ban-Liste enthält nicht meine IP. Hat jemand eine Idee? Bin die Anleitung nun bereits mehrere Male auf einem sauberen VPS durchgegangen, hab immer das gleiche Ergebnis. Hat jemand einen Tipp für mich?
PS: Etwas ist mir gerade noch aufgefallen, wenn ich jetzt ohne Installation von Vaultwarden, und somit ohne Ausführen des Skriptes in 7.3, eine Abfrage der aktuellen gebannten IP’s mache, funktioniert dies. Nach Installation von Vaultwarden und Ausführen des App-Sec Skripts, funktioniert diese Abfrage nicht mehr, dann kommt immer eine Meldung, dass eine Verbindung nicht möglich ist auf 0.0.0.0:8080. Vielleicht hilft diese Info weiter?
Gruß
Frank
Dem Dank für die wie immer gründliche Anleitung schließe ich mich an. Aber maria zickt:
Container vaultwarden-db Error dependency vaultwarden-db failed to start
$SECRETSDIR ist vorhanden und gefüllt:
Einen Tipp bitte, wo soll ich suchen?
Hallo in die Runde, es gibt diese Fehlermeldung. Berechtigungen sind so wie es aussieht OK. Gibt es eine Lösung? chmod 777 hilft nicht. Vielen Dank. Gruß Andreas
Error loading config:
Unable to write to log file. /var/log/vaultwarden.log
Nachtrag:
Es ein Ordner angelegt worden. Ich hätte eine Datei erwartet. Ich habe den Ordner gelöscht und per Konsole eine Datei vaultwarden.log angelegt. Jetzt funktioniert es.
es gab wieder einige Updates in Vaultwarden danach schlug Diagnostics fehl. Wenn man wie folgt die middleware anpasst, ist wieder alles grün
psycho0verload :
http: middlewares: vaultwarden: chain: middlewares: - vault-chain-headers - gzip vault-chain-headers: headers: contentTypeNosniff: true forceSTSHeader: true stsIncludeSubdomains: true stsPreload: true stsSeconds: 31536000 referrerPolicy: "same-origin" customBrowserXSSValue: "0" gzip: compress: {}Gruss Marco
Hi Christian und rest.
Das mit dem secret hatte ich bei der wiederherstellung garnicht bedacht.
Danke dafür
Das mit den Secrets habe ich so gelöst das ich sie einmalig in ein passwortgeschützes Archiv gepackt habe und sie mit einem restore skript auch wieder herstellen lasse das dann nach dem Passwort fragt
Hallo zusammen,
ich habe bei mir das Problem, dass ich bei Punkt 9.2, also ab dem ersten Aufrufen des Admin-Panels, von crowdsec mit der Reason crowdsecurity/http-admin-interface-probing gebannt wurde. Ich konnte mich über cscli wieder freischalten und mich auch durch Punkt 10, also das Hinzufügen der Vaultwarden-Collection, durcharbeiten. Das hielt ich für das Problem.
Leider bekomme ich weiterhin vereinzelte Banns.
Meine Umgebung ist anhand der neuen Traefik-ab-3.6-Anleitung aufgebaut. Hier ist mir aufgefallen, dass sich die Collections minimal unterscheiden. Ich habe daher nur die zusätzliche ergänzt und den Rest belassen:
Ist das ein bekanntes Phänomen? Gibt es dafür eine brauchbare Lösung? Whitelisting wäre für mich persönlich gangbar, aber DIE Lösung ist das auch nicht…
Hallo,
hat schon jemand Vaultwarden mit der neuen Traefik 3.6 zum laufen bekommen?
Nach dem Update von Traefik nach der neuesten Anleitung, kann keine Verbindung mehr zur Vault aufgebaut werden. Ich habe auch schon den http_resolver in tls_resolver in der yml geändert, da das neue Traefik jetzt auf TLS setzt, jedoch ohne Erfolg.
Hallo,
eine Frage mit einem großen Problem. Ich habe die Anleitung befolgt, die Installation auf einem kleinen VPS inklusive Traefik+Crowdsec hat wunderbar funktioniert. Das Admin-Panel ist aufrufbar, die Konfiguration habe ich in einfachen Zügen durchgeführt. Passwörter aus meinem bisherigen Passwortmanager habe ich importiert, alles kein Problem. Browsererweiterung in Brave ist auch installiert. Jetzt nach der Installation und Einrichtung der Bitwarden-App auf dem Smartphone wird mein Zugang komplett zum VPS gesperrt. Ich erreiche Vaultwarden weder per Browser oder per App, noch das VPS per SSH. Hat hier jemand einen Tipp für mich, wo ich schauen kann?
Bin für jede Idee dankbar..
Frank
Hallo,
ich habe zum Vergleichen beides installiert. Bitwarden und Vaultwarden zusammen. Hat nicht geklappt Vaultwarden wollte nicht laufen. Da in beiden die Labels “bitwarden” zugewiesen bekommen, kommt es zu einem Fehler. Die Labels müssen unterschiedlich sein. Einfaches umbenenen reicht aus. Wer das Problem mit bad Connection in der Datenbank hat muss die Ordner Datenbank und data löschen. Dann wieder neu anlegen lassen. Danach hat es bei mir funktioniert. Vielleicht hilft dem einen oder anderen weiter.
Wie macht ihr Backups von Vaultwarden? Jemand Erfahrung mit Bruceforce Vaultwarden-Backup?