File size: 4,762 Bytes
d234e06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
# SOY NV AI 배포 슀크립트
# μ‚¬μš©λ²•: bash deploy.sh

set -e  # 였λ₯˜ λ°œμƒ μ‹œ 슀크립트 쀑단

echo "=========================================="
echo "SOY NV AI 배포 슀크립트"
echo "=========================================="

# 색상 μ •μ˜
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# λ³€μˆ˜ μ„€μ •
PROJECT_DIR="/var/www/soy-nv-ai"
VENV_DIR="$PROJECT_DIR/venv"
SERVICE_NAME="soy-nv-ai"

# ν•¨μˆ˜ μ •μ˜
print_success() {
    echo -e "${GREEN}βœ“ $1${NC}"
}

print_error() {
    echo -e "${RED}βœ— $1${NC}"
}

print_info() {
    echo -e "${YELLOW}β„Ή $1${NC}"
}

# 1. ν”„λ‘œμ νŠΈ 디렉토리 확인
echo ""
print_info "1. ν”„λ‘œμ νŠΈ 디렉토리 확인..."
if [ ! -d "$PROJECT_DIR" ]; then
    print_error "ν”„λ‘œμ νŠΈ 디렉토리λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€: $PROJECT_DIR"
    exit 1
fi
print_success "ν”„λ‘œμ νŠΈ 디렉토리 확인 μ™„λ£Œ"

# 2. κ°€μƒν™˜κ²½ 확인 및 생성
echo ""
print_info "2. κ°€μƒν™˜κ²½ 확인..."
if [ ! -d "$VENV_DIR" ]; then
    print_info "κ°€μƒν™˜κ²½μ΄ μ—†μŠ΅λ‹ˆλ‹€. 생성 쀑..."
    python3 -m venv "$VENV_DIR"
    print_success "κ°€μƒν™˜κ²½ 생성 μ™„λ£Œ"
else
    print_success "κ°€μƒν™˜κ²½ 확인 μ™„λ£Œ"
fi

# 3. κ°€μƒν™˜κ²½ ν™œμ„±ν™” 및 μ˜μ‘΄μ„± μ„€μΉ˜
echo ""
print_info "3. μ˜μ‘΄μ„± μ„€μΉ˜..."
source "$VENV_DIR/bin/activate"
pip install --upgrade pip --quiet
pip install -r "$PROJECT_DIR/requirements.txt" --quiet
print_success "μ˜μ‘΄μ„± μ„€μΉ˜ μ™„λ£Œ"

# 4. ν•„μš”ν•œ 디렉토리 생성
echo ""
print_info "4. ν•„μš”ν•œ 디렉토리 생성..."
mkdir -p "$PROJECT_DIR/instance"
mkdir -p "$PROJECT_DIR/uploads"
mkdir -p "$PROJECT_DIR/vector_db"
mkdir -p "$PROJECT_DIR/knowledge_graphs"
mkdir -p "$PROJECT_DIR/logs"
print_success "디렉토리 생성 μ™„λ£Œ"

# 5. λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™”
echo ""
print_info "5. λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™”..."
cd "$PROJECT_DIR"
python -c "from app import create_app; app = create_app(); app.app_context().push(); from app.database import db; db.create_all(); print('Database initialized')" 2>/dev/null || print_info "λ°μ΄ν„°λ² μ΄μŠ€κ°€ 이미 μ‘΄μž¬ν•˜κ±°λ‚˜ μ΄ˆκΈ°ν™” 쀑 였λ₯˜ λ°œμƒ (λ¬΄μ‹œ κ°€λŠ₯)"
print_success "λ°μ΄ν„°λ² μ΄μŠ€ 확인 μ™„λ£Œ"

# 6. κΆŒν•œ μ„€μ •
echo ""
print_info "6. κΆŒν•œ μ„€μ •..."
chmod -R 755 "$PROJECT_DIR"
chmod -R 775 "$PROJECT_DIR/uploads" 2>/dev/null || true
chmod -R 775 "$PROJECT_DIR/instance" 2>/dev/null || true
chmod -R 775 "$PROJECT_DIR/vector_db" 2>/dev/null || true
print_success "κΆŒν•œ μ„€μ • μ™„λ£Œ"

# 7. .env 파일 확인
echo ""
print_info "7. ν™˜κ²½ λ³€μˆ˜ 파일 확인..."
if [ ! -f "$PROJECT_DIR/.env" ]; then
    print_error ".env 파일이 μ—†μŠ΅λ‹ˆλ‹€!"
    print_info ".env νŒŒμΌμ„ μƒμ„±ν•΄μ£Όμ„Έμš”."
    print_info "μ˜ˆμ‹œ:"
    echo "SECRET_KEY=your-secret-key"
    echo "OLLAMA_BASE_URL=http://localhost:11434"
    echo "FLASK_ENV=production"
else
    print_success ".env 파일 확인 μ™„λ£Œ"
fi

# 8. systemd μ„œλΉ„μŠ€ 확인
echo ""
print_info "8. systemd μ„œλΉ„μŠ€ 확인..."
if systemctl is-active --quiet "$SERVICE_NAME"; then
    print_info "μ„œλΉ„μŠ€κ°€ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. μž¬μ‹œμž‘ν•©λ‹ˆλ‹€..."
    sudo systemctl restart "$SERVICE_NAME"
    print_success "μ„œλΉ„μŠ€ μž¬μ‹œμž‘ μ™„λ£Œ"
elif systemctl is-enabled --quiet "$SERVICE_NAME" 2>/dev/null; then
    print_info "μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€..."
    sudo systemctl start "$SERVICE_NAME"
    print_success "μ„œλΉ„μŠ€ μ‹œμž‘ μ™„λ£Œ"
else
    print_info "μ„œλΉ„μŠ€κ°€ μ„€μ •λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."
    print_info "λ‹€μŒ λͺ…λ Ήμ–΄λ‘œ μ„œλΉ„μŠ€λ₯Ό μ„€μ •ν•˜μ„Έμš”:"
    echo "sudo systemctl enable $SERVICE_NAME"
    echo "sudo systemctl start $SERVICE_NAME"
fi

# 9. μ„œλΉ„μŠ€ μƒνƒœ 확인
echo ""
print_info "9. μ„œλΉ„μŠ€ μƒνƒœ 확인..."
sleep 2
if systemctl is-active --quiet "$SERVICE_NAME"; then
    print_success "μ„œλΉ„μŠ€κ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€!"
    sudo systemctl status "$SERVICE_NAME" --no-pager -l
else
    print_error "μ„œλΉ„μŠ€κ°€ μ‹€ν–‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€!"
    print_info "둜그λ₯Ό ν™•μΈν•˜μ„Έμš”:"
    echo "sudo journalctl -u $SERVICE_NAME -n 50"
fi

# 10. Nginx 확인
echo ""
print_info "10. Nginx μƒνƒœ 확인..."
if systemctl is-active --quiet nginx; then
    print_success "Nginxκ°€ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€"
    sudo nginx -t
else
    print_info "Nginxκ°€ μ‹€ν–‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€"
fi

echo ""
echo "=========================================="
print_success "배포 슀크립트 μ‹€ν–‰ μ™„λ£Œ!"
echo "=========================================="
echo ""
print_info "λ‹€μŒ 단계:"
echo "1. μ„œλΉ„μŠ€ 둜그 확인: sudo journalctl -u $SERVICE_NAME -f"
echo "2. μ›Ήμ‚¬μ΄νŠΈ 접속 ν…ŒμŠ€νŠΈ: http://YOUR_SERVER_IP"
echo "3. Nginx 둜그 확인: sudo tail -f /var/log/nginx/soy-nv-ai-error.log"
echo ""