✨ 주요 변경사항: - 단일 docker-compose.yml로 통합 (로컬/시놀로지 환경 지원) - 시놀로지 볼륨 매핑 설정 (volume1: 이미지, volume3: 데이터) - 통합 배포 가이드 및 자동 배포 스크립트 추가 - 완전한 Memos 스타일 워크플로우 구현 🎯 새로운 기능: - 📝 메모 작성 (upload.html) - 이미지 업로드 지원 - 📥 수신함 (inbox.html) - 메모 편집 및 Todo/보드 변환 - ✅ Todo 목록 (todo-list.html) - 오늘 할 일 관리 - 📋 보드 (board.html) - 프로젝트 관리, 접기/펼치기, 이미지 지원 - 📚 아카이브 (archive.html) - 완료된 보드 보관 - 🔐 초기 설정 화면 - 관리자 계정 생성 🔧 기술적 개선: - 이미지 업로드/편집 완전 지원 - 반응형 디자인 및 모바일 최적화 - 보드 완료 후 자동 숨김 처리 - 메모 편집 시 제목 필드 제거 - 테스트 로그인 버튼 제거 (프로덕션 준비) - 과거 코드 정리 (TodoService, CalendarSyncService 등) 📦 배포 관련: - env.synology.example - 시놀로지 환경 설정 템플릿 - SYNOLOGY_DEPLOYMENT_GUIDE.md - 상세한 배포 가이드 - deploy-synology.sh - 원클릭 자동 배포 스크립트 - Nginx 정적 파일 서빙 및 이미지 프록시 설정 🗑️ 정리된 파일: - 사용하지 않는 HTML 페이지들 (dashboard, calendar, checklist 등) - 복잡한 통합 서비스들 (integrations 폴더) - 중복된 시놀로지 설정 파일들
180 lines
5.3 KiB
Bash
Executable File
180 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# =============================================================================
|
|
# Todo-Project 시놀로지 배포 스크립트
|
|
# =============================================================================
|
|
|
|
set -e # 오류 발생 시 스크립트 중단
|
|
|
|
# 색상 정의
|
|
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"
|
|
}
|
|
|
|
# 시놀로지 환경 확인
|
|
check_synology_environment() {
|
|
log_info "시놀로지 환경 확인 중..."
|
|
|
|
# Docker 설치 확인
|
|
if ! command -v docker &> /dev/null; then
|
|
log_error "Docker가 설치되지 않았습니다. Container Manager 또는 Docker 패키지를 설치하세요."
|
|
exit 1
|
|
fi
|
|
|
|
# Docker Compose 확인
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
log_error "Docker Compose가 설치되지 않았습니다."
|
|
exit 1
|
|
fi
|
|
|
|
log_success "Docker 환경 확인 완료"
|
|
}
|
|
|
|
# 디렉토리 생성
|
|
create_directories() {
|
|
log_info "시놀로지 디렉토리 구조 생성 중..."
|
|
|
|
# 이미지 업로드 저장소 (volume1)
|
|
sudo mkdir -p /volume1/todo-project/uploads
|
|
sudo chmod 755 /volume1/todo-project/uploads
|
|
sudo chown -R 1000:1000 /volume1/todo-project
|
|
|
|
# 설정 및 데이터베이스 저장소 (volume3)
|
|
sudo mkdir -p /volume3/docker/todo-project/config/migrations
|
|
sudo mkdir -p /volume3/docker/todo-project/postgres
|
|
sudo chown -R 999:999 /volume3/docker/todo-project/postgres
|
|
sudo chown -R 1000:1000 /volume3/docker/todo-project/config
|
|
|
|
log_success "디렉토리 구조 생성 완료"
|
|
}
|
|
|
|
# 환경 파일 설정
|
|
setup_environment() {
|
|
log_info "환경 파일 설정 중..."
|
|
|
|
if [ ! -f .env ]; then
|
|
if [ -f env.synology.example ]; then
|
|
cp env.synology.example .env
|
|
log_warning ".env 파일이 생성되었습니다. 필수 설정을 수정하세요:"
|
|
log_warning "- SECRET_KEY"
|
|
log_warning "- POSTGRES_PASSWORD"
|
|
log_warning "- CORS_ORIGINS (시놀로지 IP 추가)"
|
|
echo
|
|
read -p "환경 설정을 완료했습니까? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
log_error "환경 설정을 완료한 후 다시 실행하세요."
|
|
exit 1
|
|
fi
|
|
else
|
|
log_error "env.synology.example 파일이 없습니다."
|
|
exit 1
|
|
fi
|
|
else
|
|
log_success "기존 .env 파일을 사용합니다."
|
|
fi
|
|
}
|
|
|
|
# 마이그레이션 파일 복사
|
|
copy_migrations() {
|
|
log_info "데이터베이스 마이그레이션 파일 복사 중..."
|
|
|
|
if [ -d backend/migrations ]; then
|
|
sudo cp -r backend/migrations/* /volume3/docker/todo-project/config/migrations/
|
|
log_success "마이그레이션 파일 복사 완료"
|
|
else
|
|
log_warning "마이그레이션 파일이 없습니다."
|
|
fi
|
|
}
|
|
|
|
# Docker 이미지 빌드 및 배포
|
|
deploy_application() {
|
|
log_info "Todo-Project 배포 중..."
|
|
|
|
# 기존 컨테이너 중지 및 제거
|
|
if docker-compose ps -q | grep -q .; then
|
|
log_info "기존 컨테이너 중지 중..."
|
|
docker-compose down
|
|
fi
|
|
|
|
# 이미지 빌드 및 컨테이너 시작
|
|
log_info "Docker 이미지 빌드 및 컨테이너 시작 중..."
|
|
docker-compose up -d --build
|
|
|
|
# 컨테이너 시작 대기
|
|
log_info "컨테이너 시작 대기 중..."
|
|
sleep 30
|
|
|
|
# 헬스체크
|
|
log_info "서비스 상태 확인 중..."
|
|
if curl -f http://localhost:9000/health &> /dev/null; then
|
|
log_success "백엔드 서비스 정상 작동"
|
|
else
|
|
log_error "백엔드 서비스 오류"
|
|
docker-compose logs backend
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 배포 완료 안내
|
|
show_completion_info() {
|
|
log_success "🎉 Todo-Project 시놀로지 배포 완료!"
|
|
echo
|
|
echo "=== 접속 정보 ==="
|
|
echo "웹 인터페이스: http://$(hostname -I | awk '{print $1}'):${FRONTEND_PORT:-4000}"
|
|
echo "API 서버: http://$(hostname -I | awk '{print $1}'):${BACKEND_PORT:-9000}"
|
|
echo
|
|
echo "=== 다음 단계 ==="
|
|
echo "1. 웹 브라우저에서 접속하여 관리자 계정을 생성하세요"
|
|
echo "2. 리버스 프록시 설정 (선택사항)"
|
|
echo "3. 방화벽 설정 확인"
|
|
echo
|
|
echo "=== 유용한 명령어 ==="
|
|
echo "로그 확인: docker-compose logs -f"
|
|
echo "컨테이너 상태: docker-compose ps"
|
|
echo "서비스 재시작: docker-compose restart"
|
|
echo "완전 재배포: docker-compose down && docker-compose up -d --build"
|
|
}
|
|
|
|
# 메인 실행 함수
|
|
main() {
|
|
echo "=== Todo-Project 시놀로지 배포 스크립트 ==="
|
|
echo
|
|
|
|
# 루트 권한 확인
|
|
if [ "$EUID" -ne 0 ]; then
|
|
log_error "이 스크립트는 root 권한이 필요합니다. sudo로 실행하세요."
|
|
exit 1
|
|
fi
|
|
|
|
# 단계별 실행
|
|
check_synology_environment
|
|
create_directories
|
|
setup_environment
|
|
copy_migrations
|
|
deploy_application
|
|
show_completion_info
|
|
}
|
|
|
|
# 스크립트 실행
|
|
main "$@"
|