#!/bin/bash # Stiftung Application - Backup Script for Synology NAS # This script can be used for automated backups set -e # Configuration BACKUP_DIR="./data/backups" RETENTION_DAYS=30 TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_NAME="stiftung_backup_${TIMESTAMP}.tar.gz" echo "๐Ÿ”„ Starting backup process..." echo "Timestamp: ${TIMESTAMP}" echo "Backup name: ${BACKUP_NAME}" # Create backup directory if it doesn't exist mkdir -p "${BACKUP_DIR}" # Check if containers are running if ! docker-compose ps | grep -q "Up"; then echo "โŒ Error: No containers are running. Please start the application first." exit 1 fi # Create backup using the application's backup function echo "๐Ÿ“ฆ Creating backup using application backup function..." if docker-compose exec -T web python manage.py backup --type=full --name="Automated backup ${TIMESTAMP}"; then echo "โœ… Application backup completed successfully" else echo "โš ๏ธ Application backup failed, trying manual backup..." # Manual backup as fallback echo "๐Ÿ“ฆ Creating manual backup..." # Create temporary backup directory TEMP_BACKUP_DIR="/tmp/stiftung_backup_${TIMESTAMP}" mkdir -p "${TEMP_BACKUP_DIR}" # Backup database echo "๐Ÿ—„๏ธ Backing up database..." docker-compose exec -T db pg_dump -U stiftung_user stiftung > "${TEMP_BACKUP_DIR}/database.sql" # Backup uploads echo "๐Ÿ“ Backing up uploads..." if [ -d "./data/uploads" ]; then cp -r ./data/uploads "${TEMP_BACKUP_DIR}/" fi # Backup configuration echo "โš™๏ธ Backing up configuration..." cp .env "${TEMP_BACKUP_DIR}/" 2>/dev/null || echo "No .env file to backup" cp docker-compose.yml "${TEMP_BACKUP_DIR}/" # Create tar.gz archive echo "๐Ÿ“ฆ Creating archive..." tar -czf "${BACKUP_DIR}/${BACKUP_NAME}" -C "${TEMP_BACKUP_DIR}" . # Clean up temporary directory rm -rf "${TEMP_BACKUP_DIR}" echo "โœ… Manual backup completed: ${BACKUP_NAME}" fi # Clean up old backups echo "๐Ÿงน Cleaning up old backups (older than ${RETENTION_DAYS} days)..." find "${BACKUP_DIR}" -name "stiftung_backup_*.tar.gz" -type f -mtime +${RETENTION_DAYS} -delete # Show backup status echo "" echo "๐Ÿ“Š Backup Summary:" echo "==================" echo "Latest backup: ${BACKUP_NAME}" echo "Backup location: ${BACKUP_DIR}" echo "Total backups: $(find "${BACKUP_DIR}" -name "stiftung_backup_*.tar.gz" | wc -l)" echo "Available space: $(df -h "${BACKUP_DIR}" | tail -1 | awk '{print $4}')" echo "" echo "๐ŸŽ‰ Backup process completed successfully!"