#!/bin/bash # InInventer Backup Script # This script backs up MongoDB data and application files set -e # Configuration BACKUP_DIR="/opt/backups/ininventer" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_PATH="$BACKUP_DIR/$DATE" RETENTION_DAYS=7 # Color codes GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' print_status() { echo -e "${GREEN}[STATUS]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # Create backup directory print_status "Creating backup directory..." mkdir -p "$BACKUP_PATH" # Load environment if [ -f ".env.production" ]; then source .env.production else print_error ".env.production file not found!" exit 1 fi # Backup MongoDB print_status "Backing up MongoDB database..." docker exec ininventer-mongodb-prod mongodump \ --username="$MONGO_INITDB_ROOT_USERNAME" \ --password="$MONGO_INITDB_ROOT_PASSWORD" \ --authenticationDatabase=admin \ --db="$MONGO_INITDB_DATABASE" \ --archive="/tmp/mongodb_backup_$DATE.gz" \ --gzip # Copy MongoDB backup from container docker cp "ininventer-mongodb-prod:/tmp/mongodb_backup_$DATE.gz" "$BACKUP_PATH/" docker exec ininventer-mongodb-prod rm "/tmp/mongodb_backup_$DATE.gz" # Backup environment file print_status "Backing up environment configuration..." cp .env.production "$BACKUP_PATH/" # Backup SSL certificates print_status "Backing up SSL certificates..." if [ -d "certbot/conf" ]; then tar -czf "$BACKUP_PATH/ssl_certificates_$DATE.tar.gz" -C certbot conf fi # Create backup info file cat > "$BACKUP_PATH/backup_info.txt" << EOL Backup Date: $(date) MongoDB Database: $MONGO_INITDB_DATABASE Domain: $DOMAIN_NAME Backup Contents: - MongoDB database dump - Environment configuration - SSL certificates EOL # Compress entire backup print_status "Compressing backup..." cd "$BACKUP_DIR" tar -czf "ininventer_backup_$DATE.tar.gz" "$DATE" rm -rf "$DATE" # Clean old backups print_status "Cleaning old backups (keeping last $RETENTION_DAYS days)..." find "$BACKUP_DIR" -name "ininventer_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete print_status "Backup completed successfully!" print_status "Backup location: $BACKUP_DIR/ininventer_backup_$DATE.tar.gz" # Show backup size BACKUP_SIZE=$(du -h "$BACKUP_DIR/ininventer_backup_$DATE.tar.gz" | cut -f1) print_status "Backup size: $BACKUP_SIZE"