# CaStAD 서버 배포 가이드 ## 도메인 정보 - **Primary**: https://castad.ktenterprise.net - **Secondary**: https://ado2.whitedonkey.kr --- ## 1. 서버 요구사항 | 항목 | 최소 | 권장 | |------|------|------| | **CPU** | 2 Core | 4 Core | | **RAM** | 4GB | 8GB | | **Storage** | 50GB | 100GB SSD | | **OS** | Ubuntu 20.04+ | Ubuntu 22.04 LTS | ### 필수 소프트웨어 ```bash # Node.js 18+ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # PM2 (프로세스 관리) sudo npm install -g pm2 # Nginx sudo apt-get install -y nginx # FFmpeg (영상 렌더링) sudo apt-get install -y ffmpeg # Python 3 (Instagram 서비스) sudo apt-get install -y python3 python3-pip # Chromium (Puppeteer용) sudo apt-get install -y chromium-browser # Certbot (SSL 인증서) sudo apt-get install -y certbot python3-certbot-nginx ``` --- ## 2. 프로젝트 클론 ```bash # 디렉토리 생성 sudo mkdir -p /var/www/castad sudo chown $USER:$USER /var/www/castad # Git 클론 cd /var/www/castad git clone https://github.com/waabaa/19-claude-saas-castad.git . # 실행 권한 부여 chmod +x startserver.sh ``` --- ## 3. 환경 변수 설정 ```bash # .env 파일 생성 cp .env.production.example .env # 편집 nano .env ``` **필수 변경 항목:** ```bash # JWT 시크릿 (반드시 변경!) JWT_SECRET=your-unique-secret-key-here # Gemini API 키 VITE_GEMINI_API_KEY=your-key # Suno API 키 SUNO_API_KEY=your-key # Instagram 암호화 키 (생성 명령) python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" ``` --- ## 4. YouTube OAuth 설정 ```bash # Google Cloud Console에서 다운로드한 파일을 복사 cp /path/to/client_secret.json server/client_secret.json ``` --- ## 5. Nginx 설정 ```bash # Nginx 설정 파일 복사 sudo cp nginx/castad.conf /etc/nginx/sites-available/castad.conf # 심볼릭 링크 생성 sudo ln -s /etc/nginx/sites-available/castad.conf /etc/nginx/sites-enabled/ # 기본 사이트 비활성화 (선택) sudo rm /etc/nginx/sites-enabled/default # 문법 검사 sudo nginx -t # Nginx 재시작 sudo systemctl restart nginx ``` --- ## 6. SSL 인증서 발급 ```bash # Let's Encrypt SSL 인증서 발급 sudo certbot --nginx -d castad.ktenterprise.net -d ado2.whitedonkey.kr # 자동 갱신 테스트 sudo certbot renew --dry-run ``` **Nginx 설정 업데이트 (자동 수정됨):** 인증서 경로가 다를 경우 `nginx/castad.conf` 수정: ```nginx ssl_certificate /etc/letsencrypt/live/castad.ktenterprise.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/castad.ktenterprise.net/privkey.pem; ``` --- ## 7. 서버 시작 ```bash # 서버 시작 (빌드 포함) ./startserver.sh start # 상태 확인 ./startserver.sh status # 로그 보기 ./startserver.sh logs ``` --- ## 8. PM2 시작 시 자동 실행 설정 ```bash # 현재 상태 저장 pm2 save # 시스템 시작 시 자동 실행 pm2 startup # 표시되는 명령어 실행 (예시) sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu ``` --- ## 9. 방화벽 설정 (선택) ```bash # UFW 설정 sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 22/tcp sudo ufw enable ``` --- ## 명령어 요약 | 명령어 | 설명 | |--------|------| | `./startserver.sh start` | 서버 시작 (빌드 포함) | | `./startserver.sh stop` | 서버 중지 | | `./startserver.sh restart` | 서버 재시작 | | `./startserver.sh status` | 상태 확인 | | `./startserver.sh logs` | 로그 보기 | | `./startserver.sh update` | Git pull + 재빌드 + 재시작 | --- ## 업데이트 방법 ```bash cd /var/www/castad # 간단한 방법 ./startserver.sh update # 또는 수동으로 git pull origin main npm install --legacy-peer-deps cd server && npm install --legacy-peer-deps && cd .. npm run build pm2 restart all ``` --- ## 트러블슈팅 ### 502 Bad Gateway ```bash # 백엔드 상태 확인 pm2 status pm2 logs castad-backend # 포트 확인 sudo netstat -tlnp | grep 3001 ``` ### SSL 인증서 오류 ```bash # 인증서 갱신 sudo certbot renew # Nginx 재시작 sudo systemctl restart nginx ``` ### Puppeteer 오류 ```bash # Chromium 설치 확인 chromium-browser --version # 또는 환경변수 설정 export PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser ``` ### Instagram 서비스 오류 ```bash # Python 의존성 재설치 pip3 install -r server/instagram/requirements.txt # 서비스 재시작 pm2 restart castad-instagram ``` --- ## 백업 ```bash # 데이터베이스 백업 cp server/database.sqlite backups/database_$(date +%Y%m%d).sqlite # 업로드 파일 백업 tar -czvf backups/uploads_$(date +%Y%m%d).tar.gz server/downloads/ ``` --- ## 모니터링 ```bash # PM2 모니터링 pm2 monit # 시스템 리소스 htop # Nginx 접속 로그 tail -f /var/log/nginx/castad_access.log # Nginx 에러 로그 tail -f /var/log/nginx/castad_error.log ```