bpb-website/backup.sh

45 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Simple backup script for DB + uploads.
# Usage: ./backup.sh [db_name] [mongodb_service_name]
# Defaults: db_name="photogallery", mongodb_service="mongodb"
DB_NAME="${1:-photogallery}"
MONGO_SERVICE="${2:-mongodb}"
TIMESTAMP="$(date +%F-%H%M%S)"
BACKUP_ROOT="backups/photogallery-${TIMESTAMP}"
CONTAINER_DUMP="/data/tmp-backup-${TIMESTAMP}"
mkdir -p "${BACKUP_ROOT}"
compose() {
if command -v docker-compose >/dev/null 2>&1; then
docker-compose "$@"
else
docker compose "$@"
fi
}
echo "👉 Dumping Mongo database '${DB_NAME}' from service '${MONGO_SERVICE}'..."
compose exec "${MONGO_SERVICE}" mongodump --db "${DB_NAME}" --out "${CONTAINER_DUMP}"
echo "👉 Copying DB dump to host..."
compose cp "${MONGO_SERVICE}:${CONTAINER_DUMP}/${DB_NAME}" "${BACKUP_ROOT}/db"
echo "👉 Cleaning up dump inside container..."
compose exec "${MONGO_SERVICE}" rm -rf "${CONTAINER_DUMP}"
echo "👉 Copying uploads directory..."
cp -a "photo-gallery-app/backend/uploads" "${BACKUP_ROOT}/uploads"
ARCHIVE="backups/photogallery-${TIMESTAMP}.tar.gz"
echo "👉 Creating archive ${ARCHIVE} ..."
tar -czf "${ARCHIVE}" -C "backups" "photogallery-${TIMESTAMP}"
echo "✅ Backup complete:"
echo " DB dump: ${BACKUP_ROOT}/db"
echo " Uploads: ${BACKUP_ROOT}/uploads"
echo " Archive: ${ARCHIVE}"
echo "You can delete the unarchived folder to save space after verifying the archive."