-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
96 lines (82 loc) · 3.07 KB
/
deploy.sh
File metadata and controls
96 lines (82 loc) · 3.07 KB
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
#!/bin/bash
# Discord Bot 배포 스크립트 (서버에서 실행)
# GitHub Actions에서도 이 스크립트를 사용할 수 있습니다.
set -e # 에러 발생 시 중단
echo "🚀 배포 시작..."
# 프로젝트 디렉토리 확인 및 이동
PROJECT_DIR="$HOME/discord-bot"
if [ ! -d "$PROJECT_DIR" ]; then
echo "❌ 디렉토리가 없습니다: $PROJECT_DIR"
echo "초기 설정이 필요합니다."
exit 1
fi
cd "$PROJECT_DIR"
# Git pull
echo "📥 코드 업데이트 중..."
git fetch origin main
git reset --hard origin/main || {
echo "⚠️ Git reset 실패, 수동 확인 필요"
exit 1
}
# 가상환경 확인 및 생성
if [ ! -d "venv" ]; then
echo "📦 가상환경 생성 중..."
python3 -m venv venv
fi
# 가상환경 활성화 및 의존성 설치
echo "📦 의존성 설치 중..."
source venv/bin/activate
pip install --upgrade pip --quiet
pip install -r requirements.txt --quiet
# 봇 재시작
echo "🔄 봇 재시작 중..."
# systemd 사용하는 경우 (권장)
if systemctl is-active --quiet discord-bot 2>/dev/null; then
echo "🛑 기존 봇 프로세스 종료 중..."
sudo systemctl stop discord-bot || true
sleep 2
echo "📦 systemd 서비스로 시작 중..."
sudo systemctl start discord-bot || {
echo "❌ 봇 시작 실패. 최근 로그:"
echo "=========================================="
sudo journalctl -u discord-bot -n 50 --no-pager || echo "로그를 가져올 수 없습니다"
echo "=========================================="
exit 1
}
echo "✅ systemd로 봇 재시작 완료"
sleep 3
if systemctl is-active --quiet discord-bot; then
echo "✅ 봇이 정상적으로 실행 중입니다"
echo "📋 최근 로그 (마지막 20줄):"
echo "=========================================="
sudo journalctl -u discord-bot -n 20 --no-pager || echo "로그를 가져올 수 없습니다"
echo "=========================================="
else
echo "❌ 봇 재시작 실패. 최근 로그:"
echo "=========================================="
sudo journalctl -u discord-bot -n 50 --no-pager || echo "로그를 가져올 수 없습니다"
echo "=========================================="
exit 1
fi
else
# 직접 실행하는 경우 (fallback)
echo "⚠️ systemd 서비스가 없습니다. 직접 실행 모드로 전환..."
pkill -f "python.*main.py" || true
sleep 2
nohup python main.py > bot.log 2>&1 &
sleep 3
if pgrep -f "python.*main.py" > /dev/null; then
echo "✅ 봇 재시작 완료 (직접 실행)"
echo "📋 최근 로그 (마지막 20줄):"
echo "=========================================="
tail -n 20 bot.log 2>/dev/null || echo "로그 파일을 찾을 수 없습니다"
echo "=========================================="
else
echo "❌ 봇 프로세스를 찾을 수 없습니다. 로그:"
echo "=========================================="
tail -n 50 bot.log 2>/dev/null || echo "로그 파일을 찾을 수 없습니다"
echo "=========================================="
exit 1
fi
fi
echo "✅ 배포 완료!"