45 lines
1.4 KiB
Bash
Executable File
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."
|