63 lines
1.6 KiB
Bash
Executable file
63 lines
1.6 KiB
Bash
Executable file
#!/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 "======================================================"
|