feat: NAS(Synology) 배포 도구 및 마이그레이션 추가
- deploy/ 폴더: docker-compose.synology.yml, deploy.sh, package.sh - NAS 배포 패키지 생성/전송/설치 자동화 스크립트 - 삭제 로그 테이블 마이그레이션 (018_add_deletion_log_table.sql) - 사진 필드 마이그레이션 유틸리티 (migrate_add_photo_fields.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
83
deploy/package.sh
Executable file
83
deploy/package.sh
Executable file
@@ -0,0 +1,83 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# M-Project 배포 패키지 생성 스크립트
|
||||
# =============================================================================
|
||||
|
||||
set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
DEPLOY_DIR="$SCRIPT_DIR"
|
||||
PACKAGE_DIR="$DEPLOY_DIR/mproject-package"
|
||||
|
||||
echo "=========================================="
|
||||
echo "M-Project 배포 패키지 생성"
|
||||
echo "=========================================="
|
||||
|
||||
# 기존 패키지 삭제
|
||||
rm -rf "$PACKAGE_DIR"
|
||||
mkdir -p "$PACKAGE_DIR"
|
||||
|
||||
# 1. Docker 설정 파일
|
||||
echo "📦 Docker 설정 복사..."
|
||||
cp "$DEPLOY_DIR/docker-compose.synology.yml" "$PACKAGE_DIR/docker-compose.yml"
|
||||
cp "$DEPLOY_DIR/.env.synology" "$PACKAGE_DIR/.env.example"
|
||||
cp "$DEPLOY_DIR/deploy.sh" "$PACKAGE_DIR/"
|
||||
chmod +x "$PACKAGE_DIR/deploy.sh"
|
||||
|
||||
# 2. 데이터베이스 백업 생성
|
||||
echo "📦 DB 백업 시도..."
|
||||
if docker exec m-project-db pg_dump -U mproject mproject > "$PACKAGE_DIR/backup_$(date +%Y%m%d_%H%M%S).sql" 2>/dev/null; then
|
||||
echo " ✅ DB 백업 완료"
|
||||
else
|
||||
echo " ⚠️ DB 백업 건너뜀 (컨테이너 미실행)"
|
||||
rm -f "$PACKAGE_DIR"/backup_*.sql
|
||||
fi
|
||||
|
||||
# 3. 소스 코드 복사
|
||||
echo "📦 소스 코드 복사..."
|
||||
|
||||
# Backend
|
||||
mkdir -p "$PACKAGE_DIR/backend"
|
||||
rsync -a --exclude='__pycache__' --exclude='.git' --exclude='venv' --exclude='*.pyc' \
|
||||
"$PROJECT_DIR/backend/" "$PACKAGE_DIR/backend/"
|
||||
|
||||
# Frontend
|
||||
mkdir -p "$PACKAGE_DIR/frontend"
|
||||
rsync -a --exclude='.git' --exclude='uploads' \
|
||||
"$PROJECT_DIR/frontend/" "$PACKAGE_DIR/frontend/"
|
||||
|
||||
# Nginx
|
||||
mkdir -p "$PACKAGE_DIR/nginx"
|
||||
rsync -a "$PROJECT_DIR/nginx/" "$PACKAGE_DIR/nginx/"
|
||||
|
||||
# 4. init-db 폴더 (마이그레이션 스크립트)
|
||||
mkdir -p "$PACKAGE_DIR/init-db"
|
||||
if [ -d "$PROJECT_DIR/backend/migrations" ]; then
|
||||
cp "$PROJECT_DIR/backend/migrations"/*.sql "$PACKAGE_DIR/init-db/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 5. 압축
|
||||
echo "📦 압축 중..."
|
||||
cd "$DEPLOY_DIR"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
tar -czf "mproject-deploy-$TIMESTAMP.tar.gz" -C "$DEPLOY_DIR" mproject-package
|
||||
|
||||
# 크기 확인
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✅ 패키지 생성 완료!"
|
||||
echo "=========================================="
|
||||
ls -lh "$DEPLOY_DIR/mproject-deploy-$TIMESTAMP.tar.gz"
|
||||
echo ""
|
||||
echo "파일: $DEPLOY_DIR/mproject-deploy-$TIMESTAMP.tar.gz"
|
||||
echo ""
|
||||
echo "Synology NAS로 전송:"
|
||||
echo " scp $DEPLOY_DIR/mproject-deploy-$TIMESTAMP.tar.gz admin@NAS_IP:/volume1/docker/"
|
||||
echo ""
|
||||
echo "NAS에서 설치:"
|
||||
echo " cd /volume1/docker/"
|
||||
echo " tar -xzf mproject-deploy-$TIMESTAMP.tar.gz"
|
||||
echo " cd mproject-package"
|
||||
echo " cp .env.example .env && vi .env"
|
||||
echo " bash deploy.sh"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user