- monthly_worker_status 조회 시 GROUP BY로 중복 데이터 합산 - 작업보고서 삭제 권한을 그룹장 이상으로 제한 (admin, system, group_leader) - 중복 데이터 정리를 위한 마이그레이션 SQL 추가 (009_fix_duplicate_monthly_status.sql) - synology_deployment 버전에도 동일 수정 적용
149 lines
4.0 KiB
Bash
Executable File
149 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# TK-FB-Project 시놀로지 NAS 923+ 배포 스크립트
|
|
# 생성일: 2025-11-05
|
|
# 작성자: TK-FB-Project Team
|
|
|
|
set -e
|
|
|
|
echo "🚀 TK-FB-Project 시놀로지 배포 시작..."
|
|
|
|
# 색상 정의
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 로그 함수
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 1. 시스템 요구사항 확인
|
|
log_info "시스템 요구사항 확인 중..."
|
|
|
|
if ! command -v docker &> /dev/null; then
|
|
log_error "Docker가 설치되지 않았습니다. Docker를 먼저 설치해주세요."
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
log_error "Docker Compose가 설치되지 않았습니다. Docker Compose를 먼저 설치해주세요."
|
|
exit 1
|
|
fi
|
|
|
|
log_success "Docker 및 Docker Compose 확인 완료"
|
|
|
|
# 2. 필요한 디렉토리 생성
|
|
log_info "시놀로지 볼륨 디렉토리 생성 중..."
|
|
|
|
VOLUME_PATH="/volume2/docker/tkfb"
|
|
sudo mkdir -p ${VOLUME_PATH}/{mysql_data,api_logs,api_uploads,fastapi_logs,redis_data}
|
|
sudo chmod -R 755 ${VOLUME_PATH}
|
|
|
|
log_success "볼륨 디렉토리 생성 완료"
|
|
|
|
# 3. 환경 설정 파일 준비
|
|
log_info "환경 설정 파일 준비 중..."
|
|
|
|
if [ ! -f ".env" ]; then
|
|
if [ -f "env_config.txt" ]; then
|
|
cp env_config.txt .env
|
|
log_success "환경 설정 파일 생성 완료"
|
|
else
|
|
log_error "env_config.txt 파일이 없습니다."
|
|
exit 1
|
|
fi
|
|
else
|
|
log_warning "기존 .env 파일이 존재합니다. 백업 후 계속 진행합니다."
|
|
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
|
|
fi
|
|
|
|
# 4. 기존 컨테이너 정리
|
|
log_info "기존 컨테이너 정리 중..."
|
|
|
|
if [ "$(docker ps -aq -f name=tkfb_)" ]; then
|
|
docker stop $(docker ps -aq -f name=tkfb_) 2>/dev/null || true
|
|
docker rm $(docker ps -aq -f name=tkfb_) 2>/dev/null || true
|
|
log_success "기존 컨테이너 정리 완료"
|
|
fi
|
|
|
|
# 5. Docker 이미지 빌드
|
|
log_info "Docker 이미지 빌드 중..."
|
|
|
|
docker-compose build --no-cache
|
|
log_success "Docker 이미지 빌드 완료"
|
|
|
|
# 6. 서비스 시작
|
|
log_info "서비스 시작 중..."
|
|
|
|
docker-compose up -d
|
|
|
|
# 7. 서비스 상태 확인
|
|
log_info "서비스 상태 확인 중..."
|
|
|
|
sleep 30
|
|
|
|
# 각 서비스 헬스체크
|
|
services=("tkfb_db_prod" "tkfb_api_prod" "tkfb_web_prod" "tkfb_fastapi_prod")
|
|
|
|
for service in "${services[@]}"; do
|
|
if [ "$(docker ps -q -f name=$service -f status=running)" ]; then
|
|
log_success "$service 서비스 실행 중"
|
|
else
|
|
log_error "$service 서비스 실행 실패"
|
|
docker logs $service --tail 20
|
|
fi
|
|
done
|
|
|
|
# 8. 네트워크 연결 테스트
|
|
log_info "네트워크 연결 테스트 중..."
|
|
|
|
# API 서버 테스트
|
|
if curl -f http://localhost:20005/api/ping >/dev/null 2>&1; then
|
|
log_success "API 서버 연결 성공 (포트: 20005)"
|
|
else
|
|
log_warning "API 서버 연결 실패 - 잠시 후 다시 시도해주세요"
|
|
fi
|
|
|
|
# 웹 서버 테스트
|
|
if curl -f http://localhost:20000 >/dev/null 2>&1; then
|
|
log_success "웹 서버 연결 성공 (포트: 20000)"
|
|
else
|
|
log_warning "웹 서버 연결 실패 - 잠시 후 다시 시도해주세요"
|
|
fi
|
|
|
|
# 9. 배포 완료 안내
|
|
echo ""
|
|
echo "🎉 TK-FB-Project 시놀로지 배포 완료!"
|
|
echo ""
|
|
echo "📋 접속 정보:"
|
|
echo " - 메인 애플리케이션: http://[시놀로지IP]:20000"
|
|
echo " - API 서버: http://[시놀로지IP]:20005"
|
|
echo " - FastAPI 브리지: http://[시놀로지IP]:8000"
|
|
echo " - phpMyAdmin: http://[시놀로지IP]:8080"
|
|
echo ""
|
|
echo "🔧 관리 명령어:"
|
|
echo " - 서비스 중지: docker-compose down"
|
|
echo " - 서비스 재시작: docker-compose restart"
|
|
echo " - 로그 확인: docker-compose logs -f [서비스명]"
|
|
echo " - 상태 확인: docker-compose ps"
|
|
echo ""
|
|
echo "📁 데이터 위치: ${VOLUME_PATH}"
|
|
echo ""
|
|
|
|
log_success "배포 스크립트 실행 완료"
|