一個只在您筆電開著時才跑的 Telegram 機器人,其實不算在跑——它在演示。要它真正線上、凌晨三點也應答、熬過您的重新啟動和它自己的崩潰,它得住在一台伺服器上。這是完整的路徑,從頭到尾,附指令。
先說好訊息:機器人是一個極小的負載。它大多空閒著等訊息,所以最便宜的機器就跑得好好的——不用獨立IP、不用網域、什麼花哨的都不用。
1. 從 BotFather 拿一個 token
在 Telegram 裡,給 @BotFather 發訊息、發 /newbot、挑一個名字和使用者名稱。它遞給您一個像 12345:AAH... 這樣的 token。把它當密碼對待——任何拿到它的人都控制您的機器人。
2. 一個極簡機器人
SSH 進伺服器,裝好 Python 和庫:
sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot
一個會回覆的機器人——~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Alive and on a server. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
注意它從一個環境變數讀 token——不是硬編碼。這在下一步很重要。
3. 真正讓它保活的部分:systemd
如果您只是跑 python bot.py,您一關 SSH 它就死。一個 systemd 服務才是讓它熬過登出、崩潰和重新啟動的東西。建立 /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
[Install]
WantedBy=multi-user.target
然後:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # 應該顯示 active (running)
journalctl -u mybot -f # 即時日誌
Restart=always 是幹真正活的那一行——崩潰,5 秒內就回來。enable 意味著它在重新啟動後起來。那就是「我跑過一次機器人」和「我的機器人線上」之間的全部差別。
4. 為什麼不用網域或開放埠
機器人用長輪詢——它主動去 Telegram 拿更新,所以沒有東西需要連進來。不用公用 URL、不用對內防火牆規則、不用獨立IP。這正是為什麼一台 NAT VPS(沒有專屬 IP、SSH 在某個埠上)是機器人一個不錯又便宜的家。webhook 是給非常高流量存在的,但您開始時幾乎肯定不需要它們。
誠實的注意事項
- Token 衛生: 這裡為清楚起見把它內聯在 unit 檔案裡——在一台鎖死的機器上沒問題,但對任何共享的場景,改從一個只有 root 可讀的
EnvironmentFile載入它,永遠別提交到 git。洩露了?在 BotFather 裡撤銷、發一個新的。 - 重型機器人: 如果您的機器人自己做活(影像產生、本機模型),它就不再是小的了——相應地往上配。
就這樣。先用安全清單鎖當機器、把服務放進去,您的機器人無論您在不在都保持線上。在一台加密付款的 VPS 上,您決定後一分鐘它就能跑起來。
評論
目前還沒有評論。歡迎成為第一位。