本次改造将 Telegram 多 Bot 管理平台完全支持 Docker 容器化部署,同时保留传统 systemd 部署方式的兼容性。
| 文件名 | 用途 | 说明 |
|---|---|---|
Dockerfile |
Docker 镜像构建文件 | 基于 Python 3.11-slim,包含所有依赖 |
docker-compose.yml |
Docker Compose 配置 | 定义服务、环境变量、数据卷 |
.dockerignore |
Docker 构建忽略文件 | 排除不必要的文件,减小镜像体积 |
.env.example |
环境变量模板 | 提供配置示例,包含详细注释 |
| 文件名 | 用途 |
|---|---|
README_DOCKER.md |
Docker 部署完整文档 |
QUICKSTART_DOCKER.md |
5分钟快速开始指南 |
MIGRATION_GUIDE.md |
本文档,改造说明 |
| 文件名 | 用途 |
|---|---|
docker-start.sh |
Docker 管理脚本,提供交互式菜单 |
修改点 1:Shebang 行
# 修改前
#!/opt/tg_multi_bot/venv/bin/python
# 修改后
#!/usr/bin/env python3原因:移除硬编码路径,支持任意环境运行
修改点 2:备份脚本路径配置
# 修改前
backup_script = "/opt/tg_multi_bot/backup.sh"
# 修改后
backup_script = os.environ.get('BACKUP_SCRIPT_PATH',
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'backup.sh'))原因:
- 支持环境变量配置
- 使用相对路径作为默认值
- Docker 环境下自动适配
无需修改
原代码已经支持通过环境变量 TG_BOT_DATA_DIR 配置数据目录:
DB_DIR = os.environ.get('TG_BOT_DATA_DIR', os.path.dirname(os.path.abspath(__file__)))新增内容:
.env文件(敏感信息)data/目录(运行时数据)- Docker 相关临时文件
| 变量名 | 必需 | 默认值 | 说明 |
|---|---|---|---|
MANAGER_TOKEN |
✅ | 无 | 管理机器人 Token |
ADMIN_CHANNEL |
✅ | 无 | 管理员频道/群组 ID |
TG_BOT_DATA_DIR |
❌ | /app/data (Docker) 或当前目录 |
数据存储目录 |
BACKUP_SCRIPT_PATH |
❌ | 当前目录/backup.sh | 备份脚本路径 |
| 变量名 | 说明 |
|---|---|
GH_USERNAME |
GitHub 用户名 |
GH_REPO |
GitHub 仓库名 |
GH_TOKEN |
GitHub Personal Access Token |
优点:
- ✅ 环境完全隔离
- ✅ 跨平台支持(Linux/macOS/Windows)
- ✅ 一键部署,无需配置系统环境
- ✅ 易于维护和更新
- ✅ 数据持久化自动管理
命令:
# 启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止
docker-compose down优点:
- ✅ 资源占用最小
- ✅ 与系统深度集成
- ✅ 适合单机部署
命令:
# 安装
bash setup.sh
# 管理
systemctl start/stop/restart tg_multi_bot
journalctl -u tg_multi_bot -fTG_Talk/
├── Dockerfile # 镜像构建
├── docker-compose.yml # 服务编排
├── .dockerignore # 构建忽略
├── .env.example # 配置模板
├── .env # 实际配置(gitignore)
├── docker-start.sh # 管理脚本
├── host_bot.py # 主程序
├── database.py # 数据库模块
├── README_DOCKER.md # Docker 文档
├── QUICKSTART_DOCKER.md # 快速开始
└── data/ # 数据目录(挂载)
└── bot_data.db # 数据库文件
/app/
├── host_bot.py
├── database.py
└── data/ # 映射到宿主机 ./data
└── bot_data.db
- 停止传统服务
sudo systemctl stop tg_multi_bot- 备份数据
cp /opt/tg_multi_bot/bot_data.db ~/bot_data.db.backup
cp /opt/tg_multi_bot/.env ~/tg_bot.env.backup- 克隆项目并迁移数据
git clone <repository_url>
cd TG_Talk
mkdir -p data
cp ~/bot_data.db.backup ./data/bot_data.db
cp ~/tg_bot.env.backup ./.env- 启动 Docker 服务
docker-compose up -d- 停止 Docker 服务
docker-compose down- 备份数据
cp ./data/bot_data.db ~/bot_data.db.backup
cp ./.env ~/tg_bot.env.backup- 运行传统安装
bash setup.sh- 恢复数据
sudo cp ~/bot_data.db.backup /opt/tg_multi_bot/bot_data.db
sudo cp ~/tg_bot.env.backup /opt/tg_multi_bot/.env
sudo systemctl restart tg_multi_bot# 启动服务
docker-compose up -d
# 检查容器状态
docker-compose ps
# 期望输出:tg_multi_bot 状态为 Up
# 检查日志
docker-compose logs
# 期望看到:✅ 宿主管理Bot已启动
# 检查数据库
docker-compose exec tg-bot-host ls -la /app/data
# 期望看到:bot_data.db- 向管理 Bot 发送
/start - 添加子 Bot(提供 Token)
- 用另一个账号向子 Bot 发送消息
- 验证消息转发到管理频道
- 在管理频道回复,验证消息发送给用户
| 指标 | Docker 部署 | 传统部署 |
|---|---|---|
| 内存占用 | ~150MB | ~80MB |
| CPU 占用 | 基本相同 | 基本相同 |
| 启动时间 | ~5秒 | ~3秒 |
| 部署时间 | ~5分钟 | ~10分钟 |
| 维护复杂度 | 低 | 中 |
- 环境隔离:容器与宿主机完全隔离
- 权限控制:容器内运行非 root 用户
- 网络隔离:可配置网络策略
- 镜像安全:基于官方 Python 镜像
.env文件已加入.gitignore.env.example仅包含示例值- 环境变量仅在容器内可见
- ✅ 开发测试环境
- ✅ 多环境部署(开发/测试/生产)
- ✅ 云服务器部署
- ✅ 需要频繁迁移的场景
- ✅ 团队协作开发
- ✅ 单机长期运行
- ✅ 极致性能要求
- ✅ 与系统服务深度集成
- ✅ 资源受限环境
- 添加 Docker 健康检查增强
- 支持多阶段构建减小镜像体积
- 添加 Docker Hub 自动构建
- 支持 Kubernetes 部署
- 添加监控和告警功能
- 实现高可用架构
- 支持分布式部署
- GitHub Issues:报告问题和建议
- Telegram 群组:@tg_multis_bot
- 文档:
- Docker 部署:README_DOCKER.md
- 快速开始:QUICKSTART_DOCKER.md
- 创建 Dockerfile
- 创建 docker-compose.yml
- 创建 .env.example 模板
- 创建 .dockerignore
- 修改 host_bot.py 移除硬编码路径
- 验证 database.py 环境变量支持
- 创建完整文档
- 创建快速开始指南
- 创建管理脚本
- 更新 .gitignore
- ✅ 完成 Docker 化改造
- ✅ 所有 Telegram bot 变量移至环境变量
- ✅ 创建完整文档和脚本
- ✅ 保持向后兼容性
💡 提示:建议先在测试环境验证 Docker 部署,确保一切正常后再迁移生产环境。