Bot Telegram trên máy chủ: khởi chạy và tự động khởi động
Cách lưu trữ bot Telegram trên VPS: cô lập dưới người dùng riêng, dịch vụ systemd, lưu trữ token, log, và xử lý gián đoạn mạng.
Cập nhật 23 tháng 8, 2026
Bot cần một tiến trình chạy liên tục — đó là lúc hosting miễn phí kết thúc và VDS bắt đầu. Bot hầu như không cần tài nguyên: ngay cả VDS-1 (1 nhân, 2 GB) cũng xử lý được bot với hàng nghìn người dùng.
Bố trí
Một người dùng và thư mục riêng — để bot không chạy dưới quyền root:
useradd -r -m -d /srv/bot -s /usr/sbin/nologin botuser
cd /srv/bot && sudo -u botuser git clone https://github.com/you/bot.git .
sudo -u botuser python3 -m venv venv
sudo -u botuser venv/bin/pip install -r requirements.txt
Với Node.js: dùng npm ci --omit=dev thay cho venv.
Giữ token trong một tệp môi trường, không để trong mã nguồn:
install -o botuser -g botuser -m 600 /dev/null /srv/bot/.env
echo 'BOT_TOKEN=123456:ABC...' > /srv/bot/.env
Tệp chứa token không được lọt vào kho lưu trữ: thêm nó vào .gitignore trước lần commit đầu tiên.
Dịch vụ
/etc/systemd/system/tgbot.service:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=botuser
WorkingDirectory=/srv/bot
EnvironmentFile=/srv/bot/.env
ExecStart=/srv/bot/venv/bin/python -u bot.py
Restart=always
RestartSec=10
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tgbot
journalctl -u tgbot -f
Cờ -u của Python tắt đệm đầu ra — nếu không có nó, log sẽ xuất hiện trong journal với độ trễ vài phút, hoặc không xuất hiện chút nào.
Long polling hay webhook
Long polling đơn giản hơn: bot tự thăm dò Telegram, và bạn không cần mở ra thứ gì. Như vậy là đủ cho hầu hết tác vụ.
Webhook nhanh hơn và tiết kiệm lưu lượng hơn, nhưng nó đòi hỏi một tên miền và chứng chỉ:
location /bot/token {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
Bạn sẽ cần Let's Encrypt và một reverse proxy. Telegram tiếp nhận chứng chỉ tự ký một cách miễn cưỡng — hãy dùng chứng chỉ thông thường.
Không bao giờ được có hai bản sao của bot chạy cùng lúc: Telegram chỉ gửi bản cập nhật đến một người nhận, và các bot sẽ bắt đầu phản hồi chập chờn. Sau khi sửa, hãy restart, đừng khởi chạy lần thứ hai.
Dữ liệu
SQLite là đủ cho cài đặt và thống kê — một tệp nằm cạnh bot. Chỉ cần máy chủ cơ sở dữ liệu riêng khi bot có bảng điều khiển web hoặc nhiều tiến trình.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân |
|---|---|
Conflict: terminated by other getUpdates | Hai bản sao của bot đang chạy |
| Bot im lặng sau một đêm | Restart=always chưa được cấu hình, và tiến trình gặp sự cố khi mạng rớt |
Unauthorized | Token đã bị thu hồi hoặc bị sao chép kèm khoảng trắng thừa |
| Không có log | Đệm đầu ra, hoặc ghi vào tệp thay vì stdout |
| Chạy thủ công thì được, chạy dưới dạng dịch vụ thì gặp sự cố | Thiếu biến môi trường trong systemd |
Token đã xuất hiện trong ảnh chụp màn hình, kho lưu trữ công khai hoặc chat của người khác được coi là đã bị lộ. Hãy thu hồi nó qua BotFather và đổi tệp
.env— đừng trông chờ vào việc không ai để ý.