soyailabs / DEPLOYMENT_GUIDE.md
SOY NV AI
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ฐœ์„ : ๊ธฐ์กด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ‘ํ•ฉ ๋ฐ ํšŒ์ฐจ ์ •๋ณด ์œ ์ง€
d234e06
# DigitalOcean ๋ฐฐํฌ ๊ฐ€์ด๋“œ
## ๋ชฉ์ฐจ
1. [์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ](#์‚ฌ์ „-์ค€๋น„์‚ฌํ•ญ)
2. [Droplet ์ƒ์„ฑ](#droplet-์ƒ์„ฑ)
3. [์„œ๋ฒ„ ์ดˆ๊ธฐ ์„ค์ •](#์„œ๋ฒ„-์ดˆ๊ธฐ-์„ค์ •)
4. [Ollama ์„ค์น˜ ๋ฐ ์„ค์ •](#ollama-์„ค์น˜-๋ฐ-์„ค์ •)
5. [ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ](#ํ”„๋กœ์ ํŠธ-๋ฐฐํฌ)
6. [Nginx ์„ค์ •](#nginx-์„ค์ •)
7. [SSL ์ธ์ฆ์„œ ์„ค์ •](#ssl-์ธ์ฆ์„œ-์„ค์ •)
8. [systemd ์„œ๋น„์Šค ์„ค์ •](#systemd-์„œ๋น„์Šค-์„ค์ •)
9. [๋ฐฑ์—… ์„ค์ •](#๋ฐฑ์—…-์„ค์ •)
10. [๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •](#๋ชจ๋‹ˆํ„ฐ๋ง-์„ค์ •)
11. [๋ฌธ์ œ ํ•ด๊ฒฐ](#๋ฌธ์ œ-ํ•ด๊ฒฐ)
---
## ์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ
### ํ•„์š”ํ•œ ๊ฒƒ๋“ค:
- DigitalOcean ๊ณ„์ • (https://www.digitalocean.com/)
- ๋„๋ฉ”์ธ (์„ ํƒ์‚ฌํ•ญ, ์žˆ์œผ๋ฉด ์ข‹์Œ)
- GitHub/GitLab ์ €์žฅ์†Œ (๋˜๋Š” ํ”„๋กœ์ ํŠธ ํŒŒ์ผ)
- Gemini API ํ‚ค (์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)
### ์˜ˆ์ƒ ๋น„์šฉ:
- Droplet (8GB RAM): $48/์›”
- ๋„๋ฉ”์ธ: $10-15/๋…„ (์„ ํƒ์‚ฌํ•ญ)
- ์ด: ์•ฝ $48-50/์›”
---
## Droplet ์ƒ์„ฑ
### 1. DigitalOcean ๋กœ๊ทธ์ธ ๋ฐ Droplet ์ƒ์„ฑ
1. https://www.digitalocean.com/ ์ ‘์† ๋ฐ ๋กœ๊ทธ์ธ
2. "Create" โ†’ "Droplets" ํด๋ฆญ
3. ๋‹ค์Œ ์„ค์ • ์„ ํƒ:
**์ด๋ฏธ์ง€:**
- Ubuntu 22.04 (LTS) x64
**ํ”Œ๋žœ:**
- Regular (์ผ๋ฐ˜)
- 8GB RAM / 4 vCPUs / 160GB SSD ($48/์›”) **์ถ”์ฒœ**
- ๋˜๋Š” 4GB RAM / 2 vCPUs / 80GB SSD ($24/์›”) - ์ตœ์†Œ ์‚ฌ์–‘
**๋ฐ์ดํ„ฐ์„ผํ„ฐ ์ง€์—ญ:**
- Singapore (์‹ฑ๊ฐ€ํฌ๋ฅด) - ํ•œ๊ตญ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์›€
- ๋˜๋Š” Seoul (์„œ์šธ) - ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
**์ธ์ฆ:**
- SSH ํ‚ค ์ถ”๊ฐ€ (๊ถŒ์žฅ)
- ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •
**์ถ”๊ฐ€ ์˜ต์…˜:**
- Monitoring ํ™œ์„ฑํ™”
- Backups ํ™œ์„ฑํ™” (์„ ํƒ์‚ฌํ•ญ, ์ถ”๊ฐ€ ๋น„์šฉ)
4. "Create Droplet" ํด๋ฆญ
### 2. ์„œ๋ฒ„ ์ ‘์† ์ •๋ณด ํ™•์ธ
์ƒ์„ฑ ์™„๋ฃŒ ํ›„ ์ด๋ฉ”์ผ๋กœ IP ์ฃผ์†Œ์™€ ์ ‘์† ์ •๋ณด๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
- IP ์ฃผ์†Œ: ์˜ˆ) `123.45.67.89`
- Root ๋น„๋ฐ€๋ฒˆํ˜ธ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐฉ์‹์ธ ๊ฒฝ์šฐ)
---
## ์„œ๋ฒ„ ์ดˆ๊ธฐ ์„ค์ •
### 1. SSH๋กœ ์„œ๋ฒ„ ์ ‘์†
**Windows (PowerShell):**
```powershell
ssh root@YOUR_SERVER_IP
```
**Mac/Linux:**
```bash
ssh root@YOUR_SERVER_IP
```
### 2. ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ
```bash
# ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ
apt update && apt upgrade -y
# ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜
apt install -y \
python3 \
python3-pip \
python3-venv \
git \
curl \
wget \
nginx \
certbot \
python3-certbot-nginx \
supervisor \
ufw \
htop \
nano \
build-essential \
libssl-dev \
libffi-dev \
python3-dev
```
### 3. ๋ฐฉํ™”๋ฒฝ ์„ค์ •
```bash
# UFW ๋ฐฉํ™”๋ฒฝ ํ™œ์„ฑํ™”
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw allow 11434/tcp # Ollama ํฌํŠธ
ufw enable
ufw status
```
### 4. ์‚ฌ์šฉ์ž ์ƒ์„ฑ (์„ ํƒ์‚ฌํ•ญ, ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ถŒ์žฅ)
```bash
# ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ
adduser deploy
usermod -aG sudo deploy
# SSH ํ‚ค ๋ณต์‚ฌ (๋กœ์ปฌ์—์„œ)
# Windows: type C:\Users\YourName\.ssh\id_rsa.pub | ssh root@YOUR_SERVER_IP "cat >> /home/deploy/.ssh/authorized_keys"
# Mac/Linux: ssh-copy-id deploy@YOUR_SERVER_IP
# deploy ์‚ฌ์šฉ์ž๋กœ ์ „ํ™˜
su - deploy
```
---
## Ollama ์„ค์น˜ ๋ฐ ์„ค์ •
### 1. Ollama ์„ค์น˜
```bash
# Ollama ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
curl -fsSL https://ollama.com/install.sh | sh
# Ollama ์„œ๋น„์Šค ํ™•์ธ
systemctl status ollama
# Ollama ์ž๋™ ์‹œ์ž‘ ์„ค์ •
systemctl enable ollama
```
### 2. Ollama ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ
```bash
# ์‚ฌ์šฉํ•  ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ (์˜ˆ: llama2)
ollama pull llama2
# ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋ธ
# ollama pull mistral
# ollama pull qwen
# ์„ค์น˜๋œ ๋ชจ๋ธ ํ™•์ธ
ollama list
```
### 3. Ollama ์„œ๋น„์Šค ํ™•์ธ
```bash
# Ollama๊ฐ€ ์ •์ƒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ
curl http://localhost:11434/api/tags
# ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
systemctl restart ollama
```
---
## ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ
### 1. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
```bash
# ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd ~
# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p /var/www
cd /var/www
# ์†Œ์œ ๊ถŒ ์„ค์ • (deploy ์‚ฌ์šฉ์ž ์‚ฌ์šฉ ์‹œ)
# chown -R deploy:deploy /var/www
```
### 2. ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์—…๋กœ๋“œ
**๋ฐฉ๋ฒ• 1: Git ์‚ฌ์šฉ (๊ถŒ์žฅ)**
```bash
# Git ์ €์žฅ์†Œ ํด๋ก 
git clone YOUR_REPOSITORY_URL "soy-nv-ai"
cd soy-nv-ai
# ๋˜๋Š” ์ง์ ‘ ํŒŒ์ผ ์—…๋กœ๋“œ
# scp -r "D:\SOY NV AI\*" deploy@YOUR_SERVER_IP:/var/www/soy-nv-ai/
```
**๋ฐฉ๋ฒ• 2: SCP๋กœ ํŒŒ์ผ ์ „์†ก (Windows PowerShell)**
```powershell
# ํ”„๋กœ์ ํŠธ ํด๋” ์ „์ฒด ์—…๋กœ๋“œ
scp -r "D:\SOY NV AI\*" deploy@YOUR_SERVER_IP:/var/www/soy-nv-ai/
```
### 3. ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •
```bash
cd /var/www/soy-nv-ai
# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
python3 -m venv venv
# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
source venv/bin/activate
# pip ์—…๊ทธ๋ ˆ์ด๋“œ
pip install --upgrade pip
# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt
# ์„ค์น˜ ํ™•์ธ
python --version
pip list
```
### 4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
```bash
# .env ํŒŒ์ผ ์ƒ์„ฑ
nano .env
```
**.env ํŒŒ์ผ ๋‚ด์šฉ:**
```env
# Flask ์„ค์ •
SECRET_KEY=your-super-secret-key-change-this-in-production
FLASK_ENV=production
FLASK_DEBUG=False
# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
DATABASE_URL=sqlite:///var/www/soy-nv-ai/instance/finance_analysis.db
# Ollama ์„ค์ •
OLLAMA_BASE_URL=http://localhost:11434
# Gemini API (์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)
GEMINI_API_KEY=your-gemini-api-key-here
# ์—…๋กœ๋“œ ํด๋”
UPLOAD_FOLDER=/var/www/soy-nv-ai/uploads
VECTOR_DB_PATH=/var/www/soy-nv-ai/vector_db
KNOWLEDGE_GRAPH_PATH=/var/www/soy-nv-ai/knowledge_graphs
# ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ
EMBEDDING_MODEL_NAME=sentence-transformers/all-MiniLM-L6-v2
RERANKER_MODEL_NAME=BAAI/bge-reranker-base
```
**SECRET_KEY ์ƒ์„ฑ ๋ฐฉ๋ฒ•:**
```bash
python3 -c "import secrets; print(secrets.token_hex(32))"
```
### 5. ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ์„ค์ •
```bash
# ํ•„์š”ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p instance uploads vector_db knowledge_graphs logs
# ๊ถŒํ•œ ์„ค์ •
chmod -R 755 /var/www/soy-nv-ai
chown -R deploy:deploy /var/www/soy-nv-ai # deploy ์‚ฌ์šฉ์ž ์‚ฌ์šฉ ์‹œ
# ์—…๋กœ๋“œ ํด๋” ์“ฐ๊ธฐ ๊ถŒํ•œ
chmod -R 775 uploads
chmod -R 775 instance
chmod -R 775 vector_db
```
### 6. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ
```bash
# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
source venv/bin/activate
# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”
python -c "from app import create_app; app = create_app(); app.app_context().push(); from app.database import db; db.create_all()"
# ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰
python run.py
```
**๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ํ…Œ์ŠคํŠธ:**
```bash
curl http://localhost:5001
```
์ •์ƒ ์ž‘๋™ํ•˜๋ฉด `Ctrl+C`๋กœ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
---
## Nginx ์„ค์ •
### 1. Nginx ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ
```bash
sudo nano /etc/nginx/sites-available/soy-nv-ai
```
**์„ค์ • ํŒŒ์ผ ๋‚ด์šฉ:**
```nginx
server {
listen 80;
server_name YOUR_DOMAIN.com www.YOUR_DOMAIN.com;
# ๋˜๋Š” IP ์ฃผ์†Œ๋งŒ ์‚ฌ์šฉ: server_name YOUR_SERVER_IP;
# ๋กœ๊ทธ ์„ค์ •
access_log /var/log/nginx/soy-nv-ai-access.log;
error_log /var/log/nginx/soy-nv-ai-error.log;
# ํด๋ผ์ด์–ธํŠธ ์ตœ๋Œ€ ์—…๋กœ๋“œ ํฌ๊ธฐ (100MB)
client_max_body_size 100M;
# ํ”„๋ก์‹œ ์„ค์ •
location / {
proxy_pass http://127.0.0.1:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket ์ง€์› (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# ํƒ€์ž„์•„์›ƒ ์„ค์ • (AI ์‘๋‹ต์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ)
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
}
# ์ •์  ํŒŒ์ผ ์ง์ ‘ ์ œ๊ณต (์„ ํƒ์‚ฌํ•ญ)
location /static {
alias /var/www/soy-nv-ai/static;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
```
### 2. ์„ค์ • ํŒŒ์ผ ํ™œ์„ฑํ™”
```bash
# ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑ
sudo ln -s /etc/nginx/sites-available/soy-nv-ai /etc/nginx/sites-enabled/
# ๊ธฐ๋ณธ ์„ค์ • ๋น„ํ™œ์„ฑํ™” (์„ ํƒ์‚ฌํ•ญ)
sudo rm /etc/nginx/sites-enabled/default
# Nginx ์„ค์ • ํ…Œ์ŠคํŠธ
sudo nginx -t
# Nginx ์žฌ์‹œ์ž‘
sudo systemctl restart nginx
sudo systemctl enable nginx
```
### 3. ๋ฐฉํ™”๋ฒฝ ํ™•์ธ
```bash
# Nginx ํฌํŠธ ํ™•์ธ
sudo ufw status
```
---
## SSL ์ธ์ฆ์„œ ์„ค์ •
### 1. Let's Encrypt SSL ์ธ์ฆ์„œ ์„ค์น˜
**๋„๋ฉ”์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ:**
```bash
# Certbot์œผ๋กœ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰
sudo certbot --nginx -d YOUR_DOMAIN.com -d www.YOUR_DOMAIN.com
# ์ž๋™ ๊ฐฑ์‹  ํ…Œ์ŠคํŠธ
sudo certbot renew --dry-run
```
**๋„๋ฉ”์ธ์ด ์—†๋Š” ๊ฒฝ์šฐ (IP๋งŒ ์‚ฌ์šฉ):**
- SSL ์ธ์ฆ์„œ๋Š” ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
- HTTP๋กœ๋งŒ ์ ‘์† ๊ฐ€๋Šฅ (๋ณด์•ˆ์ƒ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)
- ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋‚˜ VPN ์‚ฌ์šฉ ๊ณ ๋ ค
### 2. ์ž๋™ ๊ฐฑ์‹  ์„ค์ •
```bash
# Certbot ์ž๋™ ๊ฐฑ์‹ ์€ ์ด๋ฏธ systemd ํƒ€์ด๋จธ๋กœ ์„ค์ •๋จ
sudo systemctl status certbot.timer
```
---
## systemd ์„œ๋น„์Šค ์„ค์ •
### 1. ์„œ๋น„์Šค ํŒŒ์ผ ์ƒ์„ฑ
```bash
sudo nano /etc/systemd/system/soy-nv-ai.service
```
**์„œ๋น„์Šค ํŒŒ์ผ ๋‚ด์šฉ:**
```ini
[Unit]
Description=SOY NV AI Flask Application
After=network.target ollama.service
[Service]
Type=simple
User=deploy
Group=deploy
WorkingDirectory=/var/www/soy-nv-ai
Environment="PATH=/var/www/soy-nv-ai/venv/bin"
Environment="FLASK_ENV=production"
ExecStart=/var/www/soy-nv-ai/venv/bin/python /var/www/soy-nv-ai/run.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=soy-nv-ai
# ๋ฆฌ์†Œ์Šค ์ œํ•œ (์„ ํƒ์‚ฌํ•ญ)
LimitNOFILE=65535
MemoryLimit=6G
[Install]
WantedBy=multi-user.target
```
### 2. ์„œ๋น„์Šค ํ™œ์„ฑํ™” ๋ฐ ์‹œ์ž‘
```bash
# systemd ์žฌ๋กœ๋“œ
sudo systemctl daemon-reload
# ์„œ๋น„์Šค ํ™œ์„ฑํ™” (๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘)
sudo systemctl enable soy-nv-ai
# ์„œ๋น„์Šค ์‹œ์ž‘
sudo systemctl start soy-nv-ai
# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
sudo systemctl status soy-nv-ai
# ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u soy-nv-ai -f
```
### 3. ์„œ๋น„์Šค ๊ด€๋ฆฌ ๋ช…๋ น์–ด
```bash
# ์„œ๋น„์Šค ์‹œ์ž‘
sudo systemctl start soy-nv-ai
# ์„œ๋น„์Šค ์ค‘์ง€
sudo systemctl stop soy-nv-ai
# ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
sudo systemctl restart soy-nv-ai
# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
sudo systemctl status soy-nv-ai
# ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u soy-nv-ai -n 50
sudo journalctl -u soy-nv-ai -f # ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ
```
---
## ๋ฐฑ์—… ์„ค์ •
### 1. ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ
```bash
nano /var/www/soy-nv-ai/backup.sh
```
**๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ:**
```bash
#!/bin/bash
# ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ
BACKUP_DIR="/var/backups/soy-nv-ai"
DATE=$(date +%Y%m%d_%H%M%S)
# ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p $BACKUP_DIR
# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—…
cp /var/www/soy-nv-ai/instance/finance_analysis.db $BACKUP_DIR/db_$DATE.db
# ์—…๋กœ๋“œ ํŒŒ์ผ ๋ฐฑ์—…
tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz /var/www/soy-nv-ai/uploads
# ๋ฒกํ„ฐ DB ๋ฐฑ์—…
tar -czf $BACKUP_DIR/vector_db_$DATE.tar.gz /var/www/soy-nv-ai/vector_db
# ์˜ค๋ž˜๋œ ๋ฐฑ์—… ์‚ญ์ œ (30์ผ ์ด์ƒ)
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Backup completed: $DATE"
```
### 2. ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ
```bash
chmod +x /var/www/soy-nv-ai/backup.sh
```
### 3. Cron์œผ๋กœ ์ž๋™ ๋ฐฑ์—… ์„ค์ •
```bash
# Crontab ํŽธ์ง‘
crontab -e
# ๋งค์ผ ์ƒˆ๋ฒฝ 2์‹œ์— ๋ฐฑ์—… ์‹คํ–‰
0 2 * * * /var/www/soy-nv-ai/backup.sh >> /var/log/soy-nv-ai-backup.log 2>&1
```
---
## ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •
### 1. ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง
```bash
# htop ์„ค์น˜ (์ด๋ฏธ ์„ค์น˜๋จ)
htop
# ๋˜๋Š” ๊ธฐ๋ณธ top
top
```
### 2. ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
```bash
df -h
du -sh /var/www/soy-nv-ai/*
```
### 3. ์™ธ๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค (์„ ํƒ์‚ฌํ•ญ)
**Uptime Robot (๋ฌด๋ฃŒ):**
- https://uptimerobot.com/
- 5๋ถ„๋งˆ๋‹ค ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ
- ๋‹ค์šดํƒ€์ž„ ์•Œ๋ฆผ
**Pingdom:**
- https://www.pingdom.com/
- ๋” ์ƒ์„ธํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง
---
## ๋ฌธ์ œ ํ•ด๊ฒฐ
### 1. ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
```bash
# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
sudo systemctl status soy-nv-ai
# ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u soy-nv-ai -n 100
# ์ˆ˜๋™ ์‹คํ–‰์œผ๋กœ ์˜ค๋ฅ˜ ํ™•์ธ
cd /var/www/soy-nv-ai
source venv/bin/activate
python run.py
```
### 2. Ollama ์—ฐ๊ฒฐ ์˜ค๋ฅ˜
```bash
# Ollama ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
sudo systemctl status ollama
# Ollama ์žฌ์‹œ์ž‘
sudo systemctl restart ollama
# Ollama ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u ollama -n 50
# Ollama ํฌํŠธ ํ™•์ธ
netstat -tlnp | grep 11434
```
### 3. Nginx ์˜ค๋ฅ˜
```bash
# Nginx ์„ค์ • ํ…Œ์ŠคํŠธ
sudo nginx -t
# Nginx ๋กœ๊ทธ ํ™•์ธ
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/soy-nv-ai-error.log
```
### 4. ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
```bash
# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
free -h
# ํ”„๋กœ์„ธ์Šค๋ณ„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
ps aux --sort=-%mem | head
# ํ•„์š”์‹œ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
sudo reboot
```
### 5. ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ถ€์กฑ
```bash
# ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
df -h
# ํฐ ํŒŒ์ผ ์ฐพ๊ธฐ
du -h /var/www/soy-nv-ai | sort -rh | head -20
# ๋กœ๊ทธ ํŒŒ์ผ ์ •๋ฆฌ
sudo journalctl --vacuum-time=7d # 7์ผ ์ด์ƒ ๋œ ๋กœ๊ทธ ์‚ญ์ œ
```
### 6. ํฌํŠธ ์ถฉ๋Œ
```bash
# ํฌํŠธ ์‚ฌ์šฉ ํ™•์ธ
sudo netstat -tlnp | grep 5001
sudo lsof -i :5001
# ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
sudo kill -9 PID
```
---
## ๋ฐฐํฌ ํ›„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- [ ] ์„œ๋ฒ„ ์ ‘์† ํ™•์ธ
- [ ] Ollama ์„ค์น˜ ๋ฐ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ํ™•์ธ
- [ ] ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์—…๋กœ๋“œ ์™„๋ฃŒ
- [ ] ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์˜์กด์„ฑ ์„ค์น˜ ์™„๋ฃŒ
- [ ] ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ์™„๋ฃŒ
- [ ] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” ์™„๋ฃŒ
- [ ] Nginx ์„ค์ • ๋ฐ ํ…Œ์ŠคํŠธ ์™„๋ฃŒ
- [ ] SSL ์ธ์ฆ์„œ ์„ค์น˜ ์™„๋ฃŒ (๋„๋ฉ”์ธ ์žˆ๋Š” ๊ฒฝ์šฐ)
- [ ] systemd ์„œ๋น„์Šค ์„ค์ • ๋ฐ ์ž๋™ ์‹œ์ž‘ ํ™•์ธ
- [ ] ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์™„๋ฃŒ
- [ ] ๋ฐฉํ™”๋ฒฝ ์„ค์ • ํ™•์ธ
- [ ] ์›น์‚ฌ์ดํŠธ ์ ‘์† ํ…Œ์ŠคํŠธ
- [ ] ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
- [ ] AI ์ฑ„ํŒ… ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
- [ ] ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ • ์™„๋ฃŒ
---
## ์œ ์šฉํ•œ ๋ช…๋ น์–ด ๋ชจ์Œ
```bash
# ์„œ๋น„์Šค ๊ด€๋ฆฌ
sudo systemctl start/stop/restart/status soy-nv-ai
sudo systemctl start/stop/restart/status ollama
sudo systemctl start/stop/restart/status nginx
# ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u soy-nv-ai -f
sudo journalctl -u ollama -f
sudo tail -f /var/log/nginx/soy-nv-ai-error.log
# ํ”„๋กœ์„ธ์Šค ํ™•์ธ
ps aux | grep python
ps aux | grep ollama
# ํฌํŠธ ํ™•์ธ
netstat -tlnp | grep 5001
netstat -tlnp | grep 11434
# ๋””์Šคํฌ/๋ฉ”๋ชจ๋ฆฌ ํ™•์ธ
df -h
free -h
htop
# ๋ฐฑ์—… ์‹คํ–‰
/var/www/soy-nv-ai/backup.sh
```
---
## ์ถ”๊ฐ€ ์ตœ์ ํ™”
### 1. Gunicorn ์‚ฌ์šฉ (์„ ํƒ์‚ฌํ•ญ)
Flask ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋Œ€์‹  Gunicorn ์‚ฌ์šฉ ๊ถŒ์žฅ:
```bash
# Gunicorn ์„ค์น˜
pip install gunicorn
# systemd ์„œ๋น„์Šค ํŒŒ์ผ ์ˆ˜์ •
ExecStart=/var/www/soy-nv-ai/venv/bin/gunicorn \
--bind 127.0.0.1:5001 \
--workers 4 \
--timeout 600 \
--access-logfile - \
--error-logfile - \
run:app
```
### 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
SQLite ๋Œ€์‹  PostgreSQL ์‚ฌ์šฉ ๊ณ ๋ ค (๋Œ€๊ทœ๋ชจ ์‚ฌ์šฉ์ž):
```bash
# PostgreSQL ์„ค์น˜
sudo apt install postgresql postgresql-contrib
# requirements.txt์— ์ถ”๊ฐ€
# psycopg2-binary==2.9.9
```
### 3. CDN ์„ค์ •
Cloudflare ์‚ฌ์šฉ (๋ฌด๋ฃŒ):
- https://www.cloudflare.com/
- ๋„๋ฉ”์ธ DNS๋ฅผ Cloudflare๋กœ ๋ณ€๊ฒฝ
- ์บ์‹ฑ ๋ฐ DDoS ๋ณดํ˜ธ
---
## ์ง€์› ๋ฐ ๋„์›€๋ง
๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด:
1. ์„œ๋ฒ„ ๋กœ๊ทธ ํ™•์ธ
2. Nginx ๋กœ๊ทธ ํ™•์ธ
3. systemd ์„œ๋น„์Šค ๋กœ๊ทธ ํ™•์ธ
4. DigitalOcean ๋ฌธ์„œ ์ฐธ์กฐ: https://docs.digitalocean.com/
---
**๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ์›น์‚ฌ์ดํŠธ ์ ‘์†:**
- HTTP: http://YOUR_SERVER_IP ๋˜๋Š” http://YOUR_DOMAIN.com
- HTTPS: https://YOUR_DOMAIN.com (SSL ์„ค์ • ํ›„)
์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰