Vaultwarden/backup.sh

63 lines
1.6 KiB
Bash
Raw Permalink Normal View History

2025-12-11 12:02:29 +00:00
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DATA_DIR="${BASE_DIR}/vw-data"
ENV_FILE="${BASE_DIR}/.env"
BACKUP_DIR="${BASE_DIR}/.backup"
KEEP_LAST=7
COMPOSE_CMD="docker compose"
TIMESTAMP="$(date +'%Y%m%d-%H%M%S')"
BACKUP_FILE="${BACKUP_DIR}/vaultwarden-backup-${TIMESTAMP}.tar.gz"
echo "======================================================"
echo ">>> Vaultwarden BACKUP START"
echo ">>> Time: $(date)"
echo ">>> Directory: ${BASE_DIR}"
echo "======================================================"
# 1. STOP container
echo ">>> Stopping Vaultwarden (docker compose down)..."
${COMPOSE_CMD} down
# Create backup dir if missing
mkdir -p "${BACKUP_DIR}"
# Sanity checks
if [[ ! -d "${DATA_DIR}" ]]; then
echo "ERROR: Data directory not found: ${DATA_DIR}"
exit 1
fi
if [[ ! -f "${ENV_FILE}" ]]; then
echo "ERROR: .env file not found: ${ENV_FILE}"
exit 1
fi
# 2. CREATE BACKUP TAR.GZ
echo ">>> Creating backup: ${BACKUP_FILE}"
tar -czf "${BACKUP_FILE}" \
-C "${BASE_DIR}" \
.env \
vw-data
echo ">>> Backup successfully created."
# 3. CLEAN OLD BACKUPS
echo ">>> Cleaning old backups (keep last ${KEEP_LAST})..."
ls -1t "${BACKUP_DIR}"/vaultwarden-backup-*.tar.gz 2>/dev/null | tail -n +$((KEEP_LAST+1)) | xargs -r rm -f
echo ">>> Current backups:"
ls -1 "${BACKUP_DIR}"
# 4. START container again
echo ">>> Starting Vaultwarden (docker compose up -d)..."
${COMPOSE_CMD} up -d
echo "======================================================"
echo ">>> BACKUP FINISHED OK"
echo ">>> Vaultwarden is running again."
echo "======================================================"