一个只在你笔记本开着时才跑的 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 上,你决定后一分钟它就能跑起来。
评论
暂无评论。来做第一个吧。