ininventer/backup.sh

90 lines
2.3 KiB
Bash
Executable File

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