# 在 VPS 上快速部署 Telegram 机器人:从本地运行到全天候在线
你已经开发好了你的 Telegram 机器人,但本地运行无法保证持续可用性。大多数开发者在部署到生产环境时感到困惑,被 Docker 和 Kubernetes 等海量信息淹没。其实,你只需 8 分钟和最少资源就能部署。本指南展示如何在廉价 VPS 上部署 aiogram 机器人,无需复杂设置,只用基本 Linux 工具。
准备基础设施
选择云提供商对机器人可靠运行至关重要。Timeweb Cloud 提供 12 个地理区域的服务器访问,包括俄罗斯以外的位置。这对于使用在俄罗斯被封锁的 API(Groq、ChatGPT 等人工智能服务)至关重要。对于无外部依赖的机器人,俄罗斯数据中心即可。
关键服务器参数:
- 操作系统:Ubuntu 24.04 LTS
- 配置:最低(1 vCPU、1 GB RAM、25 GB SSD)
- 费用:从 290 ₽/月起
- 备份:建议启用
创建实例时,检查备份选项。备份可防护:
- 服务器崩溃
- SQLite 数据库损坏
- 代码更新错误
- 意外文件删除
Timeweb 的备份系统允许你从过去 7 天每 24 小时的备份中恢复项目状态。这在测试新功能时防止数据丢失至关重要。
设置服务器环境
激活服务器后,通过 SSH 连接:
ssh root@your_IP_address
更新系统包并安装所需组件:
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip git -y
npm install pm2 -g
重要提示:在安装依赖前检查 Python 版本:
python3 --version
对于使用虚拟环境的的项目,运行:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
传输项目并启动
使用 SFTP 传输文件。在 FileZilla 中输入:
- 主机:服务器 IP 地址
- 用户名:root
- 密码:从控制面板获取
- 端口:22
复制项目到服务器后:
- 进入项目目录
- 激活虚拟环境
- 安装依赖
- 通过 PM2 启动机器人
cd /root/your_project
source venv/bin/activate
pm2 start main.py --name "telegram-bot"
PM2 确保重启后自动重启并监控崩溃。检查进程状态:
pm2 status
维护和更新
进行代码更改时,严格遵循此清单:
- 通过 SFTP 编辑文件(FileZilla → 查看/编辑)
- 保存更改(Ctrl+S)
- 在 FileZilla 中确认同步
- 在 PM2 中重启进程
pm2 restart telegram-bot
排查问题时,使用:
pm2 logs— 查看实时日志pm2 monit— 监控资源pm2 resurrect— 崩溃后恢复
关键要点
- 始终使用 .env 存储令牌
- 每 24 小时设置自动备份
- 在独立分支测试更新
- 使用 htop 监控内存使用
- 定期更新系统包
性能优化
对于高负载机器人(超过 1000 名活跃用户),推荐步骤:
- 设置交换文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
- 限制 PM2 资源
在 ecosystem.config.js 中:
module.exports = {
apps: [{
name: 'telegram-bot',
script: 'main.py',
instances: 1,
autorestart: true,
max_memory_restart: '300M'
}]
}
- 防火墙设置
sudo ufw allow OpenSSH
sudo ufw allow 22/tcp
sudo ufw enable
新手常见错误是未使用守护进程运行机器人。关闭 SSH 会话会导致进程终止。PM2 解决此问题,但需正确配置自动启动:
pm2 startup
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u root --hp /root
为可用性监控,在机器人代码中添加简单健康检查端点:
from aiogram import Router
router = Router()
@router.message(Command('health'))
async def health_check(message: Message):
await message.answer('Bot is running')
定期检查日志中的 Telegram API 连接错误。常见问题:
- .env 中的无效令牌
- IP 地址被封锁
- 超过速率限制
- Webhook 处理错误
使用 webhook 时,设置 Nginx 作为反向代理并配置 SSL 证书。对于低负载机器人,轮询模式足够,无需额外基础设施。
— Editorial Team
暂无评论。