feat: Add scripts for Docker cleanup and Vaultwarden database backup.

This commit is contained in:
2026-01-04 13:58:39 +01:00
parent 9abf312833
commit 1151b16e52
2 changed files with 159 additions and 0 deletions

70
vaultwarden-backup.sh Normal file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
set -euo pipefail
# --- Settings ---
# Container Name
CONTAINER_NAME="vaultwarden"
# Host path mapped to /data inside the container
BACKUP_SOURCE_DIR="/home/mbuz/docker/vaultwarden"
# Destination for backups
BACKUP_DEST_DIR="/mnt/media/vault_backups"
# Retention Policy: Delete backups older than N days
RETENTION_DAYS=30
# Syslog Tag
LOG_TAG="vaultwarden-backup"
# --- End of Settings ---
# Logging helpers
log_info() { logger -t "$LOG_TAG" -p user.info "$1"; }
log_error() { logger -t "$LOG_TAG" -p user.error "$1"; }
log_info "Starting Vaultwarden backup..."
# 1. Mount Check
if [ ! -d "$BACKUP_DEST_DIR" ]; then
log_info "Destination directory not found. Attempting to mount..."
sudo mount -a || true
sleep 2
if [ ! -d "$BACKUP_DEST_DIR" ]; then
log_error "ERROR: Destination '$BACKUP_DEST_DIR' unavailable after mount attempt."
exit 1
fi
fi
# 2. Backup Execution
# We assume the container has 'sqlite3' installed. If not, this will fail safely.
# Format: db_backup_YYYYMMDD_HHMMSS.sqlite3
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
FILENAME="db_backup_${TIMESTAMP}.sqlite3"
log_info "Creating backup: $FILENAME"
# We execute sqlite3 inside the container to safely backup the DB to the /data volume (mapped to host)
if ! docker exec "$CONTAINER_NAME" command -v sqlite3 &>/dev/null; then
log_error "ERROR: 'sqlite3' command not found inside '$CONTAINER_NAME'. Please install it or check image."
exit 1
fi
docker exec "$CONTAINER_NAME" sqlite3 /data/db.sqlite3 ".backup '/data/$FILENAME'"
# 3. Verify and Move
HOST_FILE_PATH="$BACKUP_SOURCE_DIR/$FILENAME"
if [ -f "$HOST_FILE_PATH" ]; then
mv "$HOST_FILE_PATH" "$BACKUP_DEST_DIR/"
log_info "SUCCESS: Backup moved to $BACKUP_DEST_DIR/$FILENAME"
else
log_error "ERROR: Backup file '$HOST_FILE_PATH' not found on host."
exit 1
fi
# 4. Cleanup / Rotation
log_info "Cleaning up backups older than $RETENTION_DAYS days..."
find "$BACKUP_DEST_DIR" -name "db_backup_*.sqlite3" -type f -mtime +$RETENTION_DAYS -delete
log_info "Backup process completed."
exit 0