Telegram 봇은 메시지에 답하려면 항상 실행 중이어야 합니다. 노트북에서 실행하면 덮개를 닫을 때마다 오프라인이 됩니다. 월 몇 달러의 작은 VPS로 이를 해결할 수 있습니다. 이 가이드는 Python 봇을 systemd 서비스로 실행해 부팅 시 시작되고 충돌 후 재시작되게 합니다.
어느 정도 사양의 VPS가 필요할까요?
대부분의 봇은 가볍습니다. 1~2 vCPU와 2 GB RAM 플랜이면 충분합니다. 추천 플랜은 Telegram 봇 호스팅을 참고하세요.
1단계: 봇 토큰 받기
Telegram에서 @BotFather와 대화하고 /newbot을 보낸 뒤, 이름과 bot으로 끝나는 사용자 이름을 정하고 토큰을 복사하세요. 토큰이 있으면 누구나 봇을 제어할 수 있으므로 비밀번호처럼 다루세요.
2단계: 서버 준비
sudo apt update && sudo apt install -y python3 python3-venv
sudo adduser --disabled-password --gecos "" botuser
sudo -iu botuser
mkdir ~/mybot && cd ~/mybot
python3 -m venv .venv
. .venv/bin/activate
pip install python-telegram-bot
3단계: 간단한 봇 작성
# bot.py
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Hello! I am running on a VPS.")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
폴링은 열린 포트가 필요 없으므로 도메인이나 웹훅을 설정하지 않아도 됩니다.
4단계: 토큰을 안전하게 보관
echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env
5단계: 서비스로 실행
관리자 사용자로 돌아와 /etc/systemd/system/mybot.service를 만드세요:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/.venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
업데이트와 모니터링
- 코드를 업데이트한 다음
sudo systemctl restart mybot을 실행하세요. journalctl -u mybot -n 100으로 로그를 확인하세요.- 봇이 데이터를 저장한다면 백업을 사용하세요.
폴링과 웹훅 중 무엇을 쓸까요?
폴링이 가장 간단하며 대부분의 봇에 충분합니다. 대량의 즉시 전달이 필요하다면 웹훅을 사용하세요. 도메인과 HTTPS가 필요합니다. Nginx와 HTTPS로 호스팅하기를 참고하세요.