#!/bin/bash # M 프로젝트 자동 백업 스크립트 # 사용법: ./backup_script.sh set -e # 백업 디렉토리 설정 BACKUP_DIR="/Users/hyungi/M-Project/backups" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FOLDER="$BACKUP_DIR/$DATE" echo "🚀 M 프로젝트 백업 시작: $DATE" # 백업 폴더 생성 mkdir -p "$BACKUP_FOLDER" # 1. 데이터베이스 백업 (가장 중요!) echo "📊 데이터베이스 백업 중..." docker exec m-project-db pg_dump -U mproject mproject > "$BACKUP_FOLDER/database_backup.sql" echo "✅ 데이터베이스 백업 완료" # 2. Docker 볼륨 백업 echo "💾 Docker 볼륨 백업 중..." docker run --rm -v m-project_postgres_data:/data -v "$BACKUP_FOLDER":/backup alpine tar czf /backup/postgres_volume.tar.gz -C /data . docker run --rm -v m-project_uploads:/data -v "$BACKUP_FOLDER":/backup alpine tar czf /backup/uploads_volume.tar.gz -C /data . echo "✅ Docker 볼륨 백업 완료" # 3. 설정 파일 백업 echo "⚙️ 설정 파일 백업 중..." cp docker-compose.yml "$BACKUP_FOLDER/" cp -r nginx/ "$BACKUP_FOLDER/" cp -r backend/migrations/ "$BACKUP_FOLDER/" echo "✅ 설정 파일 백업 완료" # 4. 백업 정보 기록 echo "📝 백업 정보 기록 중..." cat > "$BACKUP_FOLDER/backup_info.txt" << EOF M 프로젝트 백업 정보 =================== 백업 일시: $(date) 백업 타입: 전체 백업 백업 위치: $BACKUP_FOLDER 포함된 내용: - database_backup.sql: PostgreSQL 데이터베이스 덤프 - postgres_volume.tar.gz: PostgreSQL 데이터 볼륨 - uploads_volume.tar.gz: 업로드 파일 볼륨 - docker-compose.yml: Docker 설정 - nginx/: Nginx 설정 - migrations/: 데이터베이스 마이그레이션 파일 복구 방법: 1. ./restore_script.sh $(pwd) 또는 수동 복구: 1. docker-compose down 2. docker volume rm m-project_postgres_data m-project_uploads 3. docker-compose up -d db 4. docker exec -i m-project-db psql -U mproject mproject < database_backup.sql 5. docker-compose up -d 백업 정책: - 최신 10개 백업만 유지 (용량 절약) - 매일 오후 9시 자동 백업 - 매주 일요일 오후 9시 30분 추가 백업 EOF # 5. 백업 크기 확인 BACKUP_SIZE=$(du -sh "$BACKUP_FOLDER" | cut -f1) echo "📏 백업 크기: $BACKUP_SIZE" # 6. 오래된 백업 정리 (최신 10개만 유지) echo "🧹 오래된 백업 정리 중..." BACKUP_COUNT=$(find "$BACKUP_DIR" -type d -name "20*" | wc -l) if [ $BACKUP_COUNT -gt 10 ]; then REMOVE_COUNT=$((BACKUP_COUNT - 10)) echo "📊 현재 백업 개수: $BACKUP_COUNT개, 삭제할 개수: $REMOVE_COUNT개" find "$BACKUP_DIR" -type d -name "20*" | sort | head -n $REMOVE_COUNT | xargs rm -rf echo "✅ 오래된 백업 $REMOVE_COUNT개 삭제 완료" else echo "📊 현재 백업 개수: $BACKUP_COUNT개 (정리 불필요)" fi echo "🎉 백업 완료!" echo "📁 백업 위치: $BACKUP_FOLDER" echo "📏 백업 크기: $BACKUP_SIZE"