soyailabs / deploy.sh
SOY NV AI
메타데이터 생성 κΈ°λŠ₯ κ°œμ„ : κΈ°μ‘΄ 메타데이터 병합 및 회차 정보 μœ μ§€
d234e06
raw
history blame
4.76 kB
#!/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 ""