#!/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."