Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ restart*
inventory_backend/django/staticfiles/admin/css/base.css
up.bat
backups/*.dump
backups/*.zip
*.DS_Store
*/.angular/
42 changes: 34 additions & 8 deletions backups/makebackup
Original file line number Diff line number Diff line change
@@ -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"
63 changes: 55 additions & 8 deletions backups/restore
Original file line number Diff line number Diff line change
@@ -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 <backup_zip_file>"
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"