#!/bin/bash # ============================================ # Vexplor 백업 스크립트 # Cron에 등록하여 정기 백업 가능 # ============================================ set -e INSTALL_DIR="/opt/vexplor" BACKUP_DIR="/opt/vexplor/backups" DATE=$(date +%Y%m%d_%H%M%S) # 백업 디렉토리 생성 mkdir -p $BACKUP_DIR echo "==========================================" echo " Vexplor 백업 시작 - $DATE" echo "==========================================" cd $INSTALL_DIR # 1. PostgreSQL 데이터베이스 백업 echo "[1/3] 데이터베이스 백업..." docker compose exec -T database pg_dump -U vexplor vexplor > "$BACKUP_DIR/db_$DATE.sql" gzip "$BACKUP_DIR/db_$DATE.sql" echo " → $BACKUP_DIR/db_$DATE.sql.gz" # 2. 업로드 파일 백업 echo "[2/3] 업로드 파일 백업..." docker cp vexplor-backend:/app/uploads "$BACKUP_DIR/uploads_$DATE" 2>/dev/null || echo " → 업로드 폴더 없음 (스킵)" if [ -d "$BACKUP_DIR/uploads_$DATE" ]; then tar -czf "$BACKUP_DIR/uploads_$DATE.tar.gz" -C "$BACKUP_DIR" "uploads_$DATE" rm -rf "$BACKUP_DIR/uploads_$DATE" echo " → $BACKUP_DIR/uploads_$DATE.tar.gz" fi # 3. 환경 설정 백업 echo "[3/3] 환경 설정 백업..." cp "$INSTALL_DIR/.env" "$BACKUP_DIR/env_$DATE" cp "$INSTALL_DIR/docker-compose.yml" "$BACKUP_DIR/docker-compose_$DATE.yml" echo " → $BACKUP_DIR/env_$DATE" echo " → $BACKUP_DIR/docker-compose_$DATE.yml" # 4. 오래된 백업 정리 (30일 이상) echo "" echo "[정리] 30일 이상 된 백업 삭제..." find $BACKUP_DIR -type f -mtime +30 -delete 2>/dev/null || true # 완료 echo "" echo "==========================================" echo " 백업 완료!" echo "==========================================" echo "" echo "백업 위치: $BACKUP_DIR" ls -lh $BACKUP_DIR | tail -10