zurich-config/vaultwarden_backup.sh

29 lines
885 B
Bash
Executable File

#!/bin/bash
# Vaultwarden daily backup
BACKUP_DIR="/opt/vaultwarden/backups"
DATA_DIR="/opt/vaultwarden/data"
DATE=$(date +%Y-%m-%d)
BACKUP_FILE="$BACKUP_DIR/vaultwarden-$DATE.tar.gz.gpg"
mkdir -p "$BACKUP_DIR"
# Stop container briefly for consistent backup
docker stop vaultwarden
sleep 2
# Create encrypted backup (symmetric, passphrase from file)
tar czf - -C /opt/vaultwarden data | gpg --batch --yes --symmetric --cipher-algo AES256 --passphrase-file /opt/vaultwarden/.backup_passphrase -o "$BACKUP_FILE"
# Restart
docker start vaultwarden
# Upload to gdrive if rclone is configured
if rclone listremotes 2>/dev/null | grep -q gdrive; then
rclone copy "$BACKUP_FILE" gdrive:backups/vaultwarden/
fi
# Retain only last 30 days
find "$BACKUP_DIR" -name "vaultwarden-*.tar.gz.gpg" -mtime +30 -delete
echo "Backup complete: $BACKUP_FILE ($(du -h "$BACKUP_FILE" | cut -f1))"