Bot Telegram phải chạy liên tục để trả lời tin nhắn. Chạy nó trên laptop nghĩa là nó ngoại tuyến mỗi khi bạn gập máy. Một VPS nhỏ giải quyết việc đó với vài đô la mỗi tháng. Hướng dẫn này chạy bot Python như một dịch vụ systemd để nó khởi động cùng máy và tự khởi động lại sau khi lỗi.
VPS cỡ nào?
Hầu hết bot đều nhẹ. Gói 1 đến 2 vCPU và 2 GB RAM là quá đủ. Xem lưu trữ bot Telegram để biết các gói gợi ý.
Bước 1: lấy token bot
Nhắn cho @BotFather trên Telegram, gửi /newbot, chọn một tên và một username kết thúc bằng bot, rồi sao chép token. Hãy coi nó như mật khẩu, vì bất kỳ ai có nó đều điều khiển được bot.
Bước 2: chuẩn bị máy chủ
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
Bước 3: viết một bot nhỏ
# 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()
Polling không cần mở cổng nào, nên bạn không phải thiết lập tên miền hay webhook.
Bước 4: lưu token an toàn
echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env
Bước 5: chạy nó như một dịch vụ
Quay lại với tư cách người dùng quản trị, tạo /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
Cập nhật và theo dõi
- Cập nhật mã, rồi
sudo systemctl restart mybot. - Kiểm tra nhật ký bằng
journalctl -u mybot -n 100. - Hãy dùng sao lưu nếu bot lưu dữ liệu.
Polling hay webhook?
Polling đơn giản nhất và đủ tốt cho hầu hết bot. Dùng webhook nếu bạn cần chuyển phát tức thời ở khối lượng lớn, điều này cần tên miền và HTTPS. Xem lưu trữ với Nginx và HTTPS.