OffshoreVps
教程2026年10月8日阅读约 5 分钟作者:OffshoreVps 团队

如何在 VPS 上托管 Telegram 机器人

获取机器人令牌,编写 Python 机器人,安全保存令牌,并通过 systemd 服务让它 24/7 持续运行。

Telegram 机器人必须一直运行才能回复消息。在笔记本上运行意味着合上盖子它就会下线。一台每月几美元的小型 VPS 就能解决这个问题。本指南将 Python 机器人作为 systemd 服务运行,使其开机自启并在崩溃后重启。

VPS 上的终端窗口,显示托管 Telegram 机器人所用的命令,以“sudo apt update && sudo apt install -y python3 p”开头
本指南中你将在服务器上运行的那类命令。

选多大的 VPS?

大多数机器人都很轻量。1 至 2 个 vCPU 和 2 GB 内存的套餐绰绰有余。推荐套餐请参阅 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()

轮询不需要开放端口,因此你不必设置域名或 webhook。

本指南的步骤依次为:1. 选多大的 VPS?;2. 获取机器人令牌;3. 编写一个小型机器人;4. 安全保存令牌;5. 更新与监控;6. 轮询还是 webhook?
本指南的步骤,按顺序排列。

步骤 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 查看日志。
  • 如果机器人存储数据,请使用备份。

轮询还是 webhook?

轮询最简单,对大多数机器人来说足够了。如果你需要在高流量下即时送达,请使用 webhook,这需要域名和 HTTPS。请参阅用 Nginx 和 HTTPS 托管。