#!/bin/bash # Vaultwarden Restore Script # Restores PostgreSQL database and critical data files from backup set -e # Check if backup timestamp provided if [ -z "$1" ]; then echo "Usage: $0 YYYYMMDD_HHMMSS" echo "" echo "Available backups:" ls -1 /srv/backups/vaultwarden/vaultwarden_db_*.dump 2>/dev/null | \ sed 's/.*vaultwarden_db_\(.*\)\.dump/ \1/' | sort -r exit 1 fi TIMESTAMP=$1 BACKUP_DIR="/srv/backups/vaultwarden" PGHOST="postgresql.pkartchner.com" PGPORT="5432" PGUSER="vaultwarden" PGDATABASE="vaultwarden" PGPASSWORD="lXleSC6e5mL1ZZs8qwG+NWhNh478ipGptRXsEMZRs28=" # Verify backup files exist DB_BACKUP="$BACKUP_DIR/vaultwarden_db_$TIMESTAMP.dump" DATA_BACKUP="$BACKUP_DIR/vaultwarden_data_$TIMESTAMP.tar.gz" if [ ! -f "$DB_BACKUP" ]; then echo "Error: Database backup not found: $DB_BACKUP" exit 1 fi if [ ! -f "$DATA_BACKUP" ]; then echo "Error: Data backup not found: $DATA_BACKUP" exit 1 fi echo "=== Vaultwarden Restore Started: $(date) ===" echo "WARNING: This will replace your current Vaultwarden data!" echo "Database backup: $DB_BACKUP" echo "Data backup: $DATA_BACKUP" echo "" read -p "Are you sure you want to continue? (yes/no): " CONFIRM if [ "$CONFIRM" != "yes" ]; then echo "Restore cancelled" exit 0 fi # Stop Vaultwarden container echo "" echo "Stopping Vaultwarden container..." cd /srv/docker-compose/vaultwarden docker compose stop vaultwarden echo "✓ Container stopped" # Restore database echo "" echo "Restoring PostgreSQL database..." docker run --rm \ -e PGPASSWORD="$PGPASSWORD" \ -v "$BACKUP_DIR:/backup" \ postgres:18-alpine \ pg_restore -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" \ --clean --if-exists -v "/backup/vaultwarden_db_$TIMESTAMP.dump" 2>&1 | \ grep -E "(restoring|processing|creating|finished)" || true echo "✓ Database restored" # Restore data directory echo "" echo "Restoring data directory..." tar -xzf "$DATA_BACKUP" -C /srv/docker-compose/vaultwarden echo "✓ Data directory restored" # Start Vaultwarden container echo "" echo "Starting Vaultwarden container..." docker compose start vaultwarden sleep 3 docker compose ps vaultwarden echo "✓ Container started" echo "" echo "=== Vaultwarden Restore Completed: $(date) ===" echo "Please verify your Vaultwarden instance is working correctly."