1 引言

本方案旨在将 Tg_pm_bot 从本地通过 CF Tunnel 暴露公网,升级为独立服务部署,提升稳定性与可维护性。核心思路包括:

  • 服务拆分:将 Bot 服务与 MySQL 数据库分别部署在不同环境,避免单点故障。

  • 高可用策略:使用 Docker Compose(1Panel)管理容器,配置重启策略与健康检查。

  • 安全与运维:引入 Docker Secrets 管理敏感信息,定期自动化备份,并支持一键恢复。

项目地址:https://github.com/kkyu9527/Tg_pm_bot


2 架构概览

角色

服务组件

说明

Bot 服务

telegram_bot

运行 Python Bot,接收用户消息与 Webhook

数据库服务

telegram_mysql

存储消息与主题数据;独立备份与恢复


3 Bot 服务部署(1Panel)

3.1 基础配置

  1. 首先在应用商店下载openresty和mysql。

  1. 然后再创建一个数据库,数据库名称,用户名,密码需要记住,后面的环境变量的值需要和这里一致。

3.2 编排文件:docker-compose.yml

services:
  bot:
    image: kixyu9527/tg_pm_bot:latest
    container_name: telegram_bot
    network_mode: host
    env_file:
      - 1panel.env
    environment:
      DB_HOST: 127.0.0.1
    restart: always

3.3 环境变量管理

在编排的下面一栏的环境变量中配置:

BOT_TOKEN=你的BotToken
USER_ID=你的UserID
GROUP_ID=你的GroupID
WEBHOOK_URL=https://your-domain.com/webhook

DB_HOST=mysql
DB_USER=botuser
DB_PASSWORD=botpassword
DB_NAME=tg_pm_bot

4 绑定域名及加密模式

4.1 绑定域名

在 Cloudflare 控制台中,为二级域名 pmbot.your-domain.com 添加一条 A 记录,指向 VPS 的公网 IP。

  • 主机名:pmbot

  • 类型:A

  • 值:<你的服务器 IP>

  • TTL:自动

  • Proxied(橙云):开启(推荐开启以启用 DDoS 防护和 CDN 加速)

4.2 加密模式

根据 VPS 上是否配置证书,选择合适的模式:

  • Full (完全加密)

    • 要求:VPS 上已安装有效的 SSL/TLS 证书(Let's Encrypt、自签等)。

    • 特点:Cloudflare 与客户端、Cloudflare 与原站之间均使用 HTTPS,端到端加密。

    • 操作:在 1Panel 或 Nginx 配置中指定证书路径;确保证书定期续期。

  • Flexible (灵活加密)

    • 要求:VPS 上未配置证书。

    • 特点:仅 Cloudflare 与客户端之间使用 HTTPS,Cloudflare 与 VPS 之间仍使用 HTTP。

    • 操作:在 Cloudflare SSL/TLS 面板中选择 “Flexible”;无需在 VPS 上部署证书。

推荐:生产环境优先使用 Full 模式,以保障全链路加密;开发或测试可临时使用 Flexible,快速上手。


5 反向代理

  1. 登录 1Panel 控制台,左侧菜单点击 “网站” → “创建网站”

  2. 选择 “反向代理” 类型。

  3. 填写配置:

    • 域名pmbot.your-domain.com(全名)。

    • 协议:HTTP(1Panel 将接收 HTTP 请求并转发)。

    • 代理目标http://127.0.0.1:9527,将外部请求转发至本地 Bot 服务。

    • SSL/HTTPS:如果没有证书就不勾选开启。

  4. 保存后 1Panel 自动生成并加载内部代理配置。


6 备份与恢复

6.1 备份

在左侧的选项中点击数据库,找到对应的数据库,然后选择右侧的备份列表,点击备份后下载该文件。

6.2 恢复

继续在刚刚的页面中选择备份列表旁边的导入备份,将上一步的备份的文件传入到这里点击恢复即可。


7 总结

通过以上独立服务部署方案,Tg_pm_bot 将获得更高的稳定性、易维护性与安全性。