90 lines
2.3 KiB
Bash
Executable File
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" |