diff --git a/.gitignore b/.gitignore index d629788..a759980 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,6 @@ restart* inventory_backend/django/staticfiles/admin/css/base.css up.bat backups/*.dump +backups/*.zip *.DS_Store */.angular/ \ No newline at end of file diff --git a/backups/makebackup b/backups/makebackup index d87c3f1..7a0367e 100644 --- a/backups/makebackup +++ b/backups/makebackup @@ -1,15 +1,41 @@ #!/bin/bash +# Exit on error +set -e + # Variables -DB_CONTAINER_NAME="map-db-1" # Replace with the name of your PostgreSQL container -DB_NAME="postgres" # Replace with your database name -DB_USER="postgres" # Replace with your database user +DB_CONTAINER_NAME="chameleonmap-db-1" # DB container name +DB_NAME="postgres" # Postgres DB name +DB_USER="postgres" # Postgres user +BACKEND_CONTAINER_NAME="chameleonmap-backend-1" # Backend container name +BACKEND_CONTAINER_USER="dpdadm" +UPLOADS_PATH="/home/${BACKEND_CONTAINER_USER}/web/media/uploads" # Path to uploads folder in backend container + +# Timestamp for backup files +TIMESTAMP=$(date +"%Y%m%d_%H%M%S") +BACKUP_FILENAME="backup_${TIMESTAMP}.dump" +BACKUP_ZIP="backup_${TIMESTAMP}.zip" -# Timestamp for backup file -BACKUP_FILENAME="backup_$(date +"%Y%m%d_%H%M%S").dump" +# Create temporary directory for uploads +TEMP_FOLDER="./temp_backup" +mkdir "$TEMP_FOLDER" -# Execute backup command inside the container +# Execute database backup command inside the container +echo "Creating database dump..." docker exec -t "$DB_CONTAINER_NAME" bash -c "pg_dump -Fc -U $DB_USER > /$BACKUP_FILENAME" -docker cp "$DB_CONTAINER_NAME":/"$BACKUP_FILENAME" "./$BACKUP_FILENAME" -echo "Backup completed: ./$BACKUP_FILENAME" +# Copy database dump to host +docker cp "$DB_CONTAINER_NAME":/"$BACKUP_FILENAME" "./$TEMP_FOLDER/$BACKUP_FILENAME" + +# Copy uploads folder from backend container +echo "Copying uploads folder..." +docker cp "$BACKEND_CONTAINER_NAME":"$UPLOADS_PATH" "$TEMP_FOLDER" + +# Create zip archive containing both dump and uploads +echo "Creating zip archive..." +cd "./$TEMP_FOLDER" && zip -r "../$BACKUP_ZIP" . + +# Clean up temporary files +cd .. && rm -rf "$TEMP_FOLDER" + +echo "Backup completed: ./$BACKUP_ZIP" diff --git a/backups/restore b/backups/restore index 8769c71..4082c7e 100644 --- a/backups/restore +++ b/backups/restore @@ -1,15 +1,62 @@ #!/bin/bash +# Exit on error +set -e + # Variables -CONTAINER_NAME="chameleonmap-db-1" -DB_NAME="postgres" # Replace with your database name -DB_USER="postgres" # Replace with your database user -BACKUP_DIR="." # Replace with the directory containing the backup file +CONTAINER_NAME="chameleonmap-db-1" # DB container name +DB_NAME="postgres" # Postgres DB name +DB_USER="postgres" # Postgres user +BACKEND_CONTAINER_NAME="chameleonmap-backend-1" # Backend container name +BACKEND_CONTAINER_USER="dpdadm" +UPLOADS_DEST_PATH="/home/${BACKEND_CONTAINER_USER}/web/media" # Destination path for uploads in backend container BACKUP_FILE=$1 -# Execute restore command inside the container +# Validate input +if [ -z "$BACKUP_FILE" ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ ! -f "$BACKUP_FILE" ]; then + echo "Error: Backup file '$BACKUP_FILE' not found" + exit 1 +fi + +# Create temporary directory for extraction +TEMP_RESTORE_DIR="./temp_restore" +mkdir -p "$TEMP_RESTORE_DIR" + +# Extract zip file +echo "Extracting backup archive..." +unzip "$BACKUP_FILE" -d "$TEMP_RESTORE_DIR" + +# Determine dump file name from zip file name +BACKUP_BASE=$(basename "$BACKUP_FILE" .zip) +DUMP_FILE="${BACKUP_BASE}.dump" +DUMP_FILE_PATH="$TEMP_RESTORE_DIR/$DUMP_FILE" + +if [ ! -f "$DUMP_FILE_PATH" ]; then + echo "Error: Dump file '$DUMP_FILE_PATH' not found in backup" + rm -rf "$TEMP_RESTORE_DIR" + exit 1 +fi + +# Copy dump file to database container and restore +echo "Restoring database..." +docker cp "$DUMP_FILE_PATH" "$CONTAINER_NAME":/"$DUMP_FILE" +docker exec -ti "$CONTAINER_NAME" pg_restore -U "$DB_USER" -c -d "$DB_NAME" "$DUMP_FILE" + +# Restore uploads folder to backend container +UPLOADS_SRC_PATH="$TEMP_RESTORE_DIR/uploads" +if [ -d "$UPLOADS_SRC_PATH" ]; then + echo "Restoring uploads folder..." + docker cp "$UPLOADS_SRC_PATH" "$BACKEND_CONTAINER_NAME":"$UPLOADS_DEST_PATH" +else + echo "Warning: uploads folder not found in backup" +fi -docker cp "$BACKUP_FILE" "$CONTAINER_NAME":/"$BACKUP_FILE" -docker exec -ti "$CONTAINER_NAME" pg_restore -U "$DB_USER" -c -d "$DB_NAME" "$BACKUP_FILE" +# Clean up temp folder +rm -rf "$TEMP_RESTORE_DIR" -echo "Database restored from: $BACKUP_DIR/$BACKUP_FILE" +echo "Restore completed from: $BACKUP_FILE"