soyailabs / DEPLOYMENT_GUIDE.md
SOY NV AI
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ฐœ์„ : ๊ธฐ์กด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ‘ํ•ฉ ๋ฐ ํšŒ์ฐจ ์ •๋ณด ์œ ์ง€
d234e06
|
raw
history blame
15.2 kB

DigitalOcean ๋ฐฐํฌ ๊ฐ€์ด๋“œ

๋ชฉ์ฐจ

  1. ์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ
  2. Droplet ์ƒ์„ฑ
  3. ์„œ๋ฒ„ ์ดˆ๊ธฐ ์„ค์ •
  4. Ollama ์„ค์น˜ ๋ฐ ์„ค์ •
  5. ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ
  6. Nginx ์„ค์ •
  7. SSL ์ธ์ฆ์„œ ์„ค์ •
  8. 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 ํ™œ์„ฑํ™” (์„ ํƒ์‚ฌํ•ญ, ์ถ”๊ฐ€ ๋น„์šฉ)
  1. "Create Droplet" ํด๋ฆญ

2. ์„œ๋ฒ„ ์ ‘์† ์ •๋ณด ํ™•์ธ

์ƒ์„ฑ ์™„๋ฃŒ ํ›„ ์ด๋ฉ”์ผ๋กœ IP ์ฃผ์†Œ์™€ ์ ‘์† ์ •๋ณด๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • IP ์ฃผ์†Œ: ์˜ˆ) 123.45.67.89
  • Root ๋น„๋ฐ€๋ฒˆํ˜ธ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐฉ์‹์ธ ๊ฒฝ์šฐ)

์„œ๋ฒ„ ์ดˆ๊ธฐ ์„ค์ •

1. SSH๋กœ ์„œ๋ฒ„ ์ ‘์†

Windows (PowerShell):

ssh root@YOUR_SERVER_IP

Mac/Linux:

ssh root@YOUR_SERVER_IP

2. ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ

# ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ
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. ๋ฐฉํ™”๋ฒฝ ์„ค์ •

# UFW ๋ฐฉํ™”๋ฒฝ ํ™œ์„ฑํ™”
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw allow 11434/tcp  # Ollama ํฌํŠธ
ufw enable
ufw status

4. ์‚ฌ์šฉ์ž ์ƒ์„ฑ (์„ ํƒ์‚ฌํ•ญ, ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ถŒ์žฅ)

# ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ
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 ์„ค์น˜

# Ollama ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
curl -fsSL https://ollama.com/install.sh | sh

# Ollama ์„œ๋น„์Šค ํ™•์ธ
systemctl status ollama

# Ollama ์ž๋™ ์‹œ์ž‘ ์„ค์ •
systemctl enable ollama

2. Ollama ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ

# ์‚ฌ์šฉํ•  ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ (์˜ˆ: llama2)
ollama pull llama2

# ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋ธ
# ollama pull mistral
# ollama pull qwen

# ์„ค์น˜๋œ ๋ชจ๋ธ ํ™•์ธ
ollama list

3. Ollama ์„œ๋น„์Šค ํ™•์ธ

# Ollama๊ฐ€ ์ •์ƒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ
curl http://localhost:11434/api/tags

# ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
systemctl restart ollama

ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ

1. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

# ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd ~

# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p /var/www
cd /var/www

# ์†Œ์œ ๊ถŒ ์„ค์ • (deploy ์‚ฌ์šฉ์ž ์‚ฌ์šฉ ์‹œ)
# chown -R deploy:deploy /var/www

2. ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์—…๋กœ๋“œ

๋ฐฉ๋ฒ• 1: Git ์‚ฌ์šฉ (๊ถŒ์žฅ)

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

# ํ”„๋กœ์ ํŠธ ํด๋” ์ „์ฒด ์—…๋กœ๋“œ
scp -r "D:\SOY NV AI\*" deploy@YOUR_SERVER_IP:/var/www/soy-nv-ai/

3. ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •

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. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

# .env ํŒŒ์ผ ์ƒ์„ฑ
nano .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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•:

python3 -c "import secrets; print(secrets.token_hex(32))"

5. ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ์„ค์ •

# ํ•„์š”ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
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. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
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

๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ํ…Œ์ŠคํŠธ:

curl http://localhost:5001

์ •์ƒ ์ž‘๋™ํ•˜๋ฉด Ctrl+C๋กœ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.


Nginx ์„ค์ •

1. Nginx ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

sudo nano /etc/nginx/sites-available/soy-nv-ai

์„ค์ • ํŒŒ์ผ ๋‚ด์šฉ:

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. ์„ค์ • ํŒŒ์ผ ํ™œ์„ฑํ™”

# ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑ
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. ๋ฐฉํ™”๋ฒฝ ํ™•์ธ

# Nginx ํฌํŠธ ํ™•์ธ
sudo ufw status

SSL ์ธ์ฆ์„œ ์„ค์ •

1. Let's Encrypt SSL ์ธ์ฆ์„œ ์„ค์น˜

๋„๋ฉ”์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ:

# Certbot์œผ๋กœ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰
sudo certbot --nginx -d YOUR_DOMAIN.com -d www.YOUR_DOMAIN.com

# ์ž๋™ ๊ฐฑ์‹  ํ…Œ์ŠคํŠธ
sudo certbot renew --dry-run

๋„๋ฉ”์ธ์ด ์—†๋Š” ๊ฒฝ์šฐ (IP๋งŒ ์‚ฌ์šฉ):

  • SSL ์ธ์ฆ์„œ๋Š” ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
  • HTTP๋กœ๋งŒ ์ ‘์† ๊ฐ€๋Šฅ (๋ณด์•ˆ์ƒ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)
  • ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋‚˜ VPN ์‚ฌ์šฉ ๊ณ ๋ ค

2. ์ž๋™ ๊ฐฑ์‹  ์„ค์ •

# Certbot ์ž๋™ ๊ฐฑ์‹ ์€ ์ด๋ฏธ systemd ํƒ€์ด๋จธ๋กœ ์„ค์ •๋จ
sudo systemctl status certbot.timer

systemd ์„œ๋น„์Šค ์„ค์ •

1. ์„œ๋น„์Šค ํŒŒ์ผ ์ƒ์„ฑ

sudo nano /etc/systemd/system/soy-nv-ai.service

์„œ๋น„์Šค ํŒŒ์ผ ๋‚ด์šฉ:

[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. ์„œ๋น„์Šค ํ™œ์„ฑํ™” ๋ฐ ์‹œ์ž‘

# 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. ์„œ๋น„์Šค ๊ด€๋ฆฌ ๋ช…๋ น์–ด

# ์„œ๋น„์Šค ์‹œ์ž‘
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. ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ

nano /var/www/soy-nv-ai/backup.sh

๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ:

#!/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. ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ

chmod +x /var/www/soy-nv-ai/backup.sh

3. Cron์œผ๋กœ ์ž๋™ ๋ฐฑ์—… ์„ค์ •

# Crontab ํŽธ์ง‘
crontab -e

# ๋งค์ผ ์ƒˆ๋ฒฝ 2์‹œ์— ๋ฐฑ์—… ์‹คํ–‰
0 2 * * * /var/www/soy-nv-ai/backup.sh >> /var/log/soy-nv-ai-backup.log 2>&1

๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •

1. ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง

# htop ์„ค์น˜ (์ด๋ฏธ ์„ค์น˜๋จ)
htop

# ๋˜๋Š” ๊ธฐ๋ณธ top
top

2. ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ

df -h
du -sh /var/www/soy-nv-ai/*

3. ์™ธ๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค (์„ ํƒ์‚ฌํ•ญ)

Uptime Robot (๋ฌด๋ฃŒ):

  • https://uptimerobot.com/
  • 5๋ถ„๋งˆ๋‹ค ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ
  • ๋‹ค์šดํƒ€์ž„ ์•Œ๋ฆผ

Pingdom:


๋ฌธ์ œ ํ•ด๊ฒฐ

1. ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
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 ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

# Ollama ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
sudo systemctl status ollama

# Ollama ์žฌ์‹œ์ž‘
sudo systemctl restart ollama

# Ollama ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u ollama -n 50

# Ollama ํฌํŠธ ํ™•์ธ
netstat -tlnp | grep 11434

3. Nginx ์˜ค๋ฅ˜

# 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. ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ

# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
free -h

# ํ”„๋กœ์„ธ์Šค๋ณ„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
ps aux --sort=-%mem | head

# ํ•„์š”์‹œ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
sudo reboot

5. ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ถ€์กฑ

# ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
df -h

# ํฐ ํŒŒ์ผ ์ฐพ๊ธฐ
du -h /var/www/soy-nv-ai | sort -rh | head -20

# ๋กœ๊ทธ ํŒŒ์ผ ์ •๋ฆฌ
sudo journalctl --vacuum-time=7d  # 7์ผ ์ด์ƒ ๋œ ๋กœ๊ทธ ์‚ญ์ œ

6. ํฌํŠธ ์ถฉ๋Œ

# ํฌํŠธ ์‚ฌ์šฉ ํ™•์ธ
sudo netstat -tlnp | grep 5001
sudo lsof -i :5001

# ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
sudo kill -9 PID

๋ฐฐํฌ ํ›„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ์„œ๋ฒ„ ์ ‘์† ํ™•์ธ
  • Ollama ์„ค์น˜ ๋ฐ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ํ™•์ธ
  • ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์—…๋กœ๋“œ ์™„๋ฃŒ
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์˜์กด์„ฑ ์„ค์น˜ ์™„๋ฃŒ
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ์™„๋ฃŒ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” ์™„๋ฃŒ
  • Nginx ์„ค์ • ๋ฐ ํ…Œ์ŠคํŠธ ์™„๋ฃŒ
  • SSL ์ธ์ฆ์„œ ์„ค์น˜ ์™„๋ฃŒ (๋„๋ฉ”์ธ ์žˆ๋Š” ๊ฒฝ์šฐ)
  • systemd ์„œ๋น„์Šค ์„ค์ • ๋ฐ ์ž๋™ ์‹œ์ž‘ ํ™•์ธ
  • ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์™„๋ฃŒ
  • ๋ฐฉํ™”๋ฒฝ ์„ค์ • ํ™•์ธ
  • ์›น์‚ฌ์ดํŠธ ์ ‘์† ํ…Œ์ŠคํŠธ
  • ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
  • AI ์ฑ„ํŒ… ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ • ์™„๋ฃŒ

์œ ์šฉํ•œ ๋ช…๋ น์–ด ๋ชจ์Œ

# ์„œ๋น„์Šค ๊ด€๋ฆฌ
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 ์‚ฌ์šฉ ๊ถŒ์žฅ:

# 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 ์‚ฌ์šฉ ๊ณ ๋ ค (๋Œ€๊ทœ๋ชจ ์‚ฌ์šฉ์ž):

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

๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ์›น์‚ฌ์ดํŠธ ์ ‘์†:

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰