디스코드 봇 24시간 호스팅하기 (discord.js·discord.py)
내 PC를 꺼도 봇이 계속 동작하도록 Ubuntu 서버에서 실행하는 방법입니다. 봇 코드는 이미 완성되어 내 PC에서 잘 돌아간다고 가정합니다.
1. 봇 코드를 서버로 옮기기
파일 올리고 내려받기를 참고해 봇 폴더를 서버로 옮기거나, GitHub에 올려두었다면 서버에서 바로 받습니다.
git clone https://github.com/내아이디/내봇.git
cd 내봇
🔒 봇 토큰은 절대 코드에 직접 쓰거나 GitHub에 올리지 마세요. 토큰이 유출되면 누구나 내 봇을 조종할 수 있습니다. 서버의
.env파일에 따로 넣어두는 것을 권장합니다.
Node.js 봇 (discord.js)
Node.js 설치
Ubuntu 기본 저장소의 Node.js는 버전이 오래되어 최신 discord.js가 동작하지 않을 수 있습니다. 공식 배포판으로 설치합니다.
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
패키지 설치 후 pm2로 실행
pm2는 봇이 꺼지면 자동으로 다시 켜주고, 서버가 재부팅되어도 봇을 다시 실행해줍니다.
npm install
sudo npm install -g pm2
pm2 start index.js --name my-bot # 시작 파일 이름에 맞게 바꿉니다
pm2 save
pm2 startup # 출력된 명령어를 한 번 더 복사해서 실행합니다
자주 쓰는 명령어:
pm2 logs my-bot # 실시간 로그 보기 (빠져나오기: Ctrl + C)
pm2 restart my-bot # 코드 수정 후 재시작
pm2 status # 실행 상태 확인
Python 봇 (discord.py)
가상환경 만들고 패키지 설치
sudo apt install -y python3-venv
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
systemd로 상시 실행
서비스 파일을 만듭니다.
sudo nano /etc/systemd/system/my-bot.service
WorkingDirectory와 ExecStart의 경로는 실제 봇 폴더 위치(pwd 명령어로 확인)로, User는 내 계정명으로 바꿉니다.
[Unit]
Description=My Discord Bot
After=network-online.target
[Service]
User=계정명
WorkingDirectory=/home/계정명/내봇
ExecStart=/home/계정명/내봇/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now my-bot
sudo systemctl status my-bot # active (running)이면 성공
journalctl -u my-bot -f # 실시간 로그 보기
봇이 꺼져 있어요
- 로그를 먼저 확인하세요 (
pm2 logs또는journalctl -u my-bot). 토큰 오류, 패키지 누락이 가장 흔한 원인입니다. - 봇은 외부에서 접속받는 서비스가 아니라서 방화벽 포트를 따로 열 필요가 없습니다.
- 서버 자체가 응답하지 않는다면 서버 접속이 안 될 때를 확인해주세요.