280 lines
4.9 KiB
Markdown
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
|
|
```
|