CASTAD-v0.1/DEPLOY.md

280 lines
4.9 KiB
Markdown

# 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
```