本项目支持通过Docker容器化部署4个独立的Telegram Bot实例:
每个bot都是独立的Docker容器,拥有自己的配置、日志和持久化数据。
aichatbot/ ├── Dockerfile # 共享的镜像定义 ├── docker-bot.sh # 统一管理脚本 ├── run/ │ ├── tomato/ │ │ ├── docker-compose.yml # Tomato bot配置 │ │ ├── .env.example # 环境变量模板 │ │ ├── .env # 实际配置(需创建) │ │ ├── CLAUDE.md # 个性提示词 │ │ ├── bot.log # Bot日志 │ │ └── debug.log # 调试日志 │ ├── cyrene/ # 同上结构 │ ├── gold-ship/ # 同上结构 │ └── lunatalk_private/ # 同上结构
每个bot目录都需要创建 .env 文件:
# 以Tomato为例 cd run/tomato cp .env.example .env nano .env # 编辑配置
必需的配置项:
ANTHROPIC_API_KEY - Claude API密钥TELEGRAM_BOT_TOKEN - Telegram Bot TokenTELEGRAM_ALLOWED_USERS - 允许的用户ID列表(JSON格式)TELEGRAM_ALLOWED_GROUPS - 允许的群组ID列表(JSON格式)可选配置:
ANTHROPIC_BASE_URL - 自定义API端点(留空使用官方API)WEBHOOK_PORT - Webhook回调端口项目提供了便捷的管理脚本 docker-bot.sh:
# 查看帮助 ./docker-bot.sh help # 启动单个bot ./docker-bot.sh start tomato # 启动所有bot ./docker-bot.sh start all # 停止bot ./docker-bot.sh stop tomato # 重启bot ./docker-bot.sh restart cyrene # 查看日志 ./docker-bot.sh logs tomato # 查看所有bot状态 ./docker-bot.sh status # 重新构建镜像 ./docker-bot.sh build # 清理Docker资源 ./docker-bot.sh clean
如果你更喜欢手动操作:
# 启动单个bot cd run/tomato docker-compose up -d # 查看日志 docker-compose logs -f # 停止bot docker-compose down # 重启bot docker-compose restart # 查看容器状态 docker-compose ps
Claude API密钥,从 Anthropic Console 获取。
必需
自定义API端点,用于:
可选,留空使用官方API
Telegram Bot Token,从 @BotFather 创建bot时获取。
必需
允许使用bot的用户ID列表,JSON数组格式。
获取用户ID:发送消息给 @userinfobot
示例:
TELEGRAM_ALLOWED_USERS=[156318176, 123456789]
必需
允许bot加入的群组ID列表,JSON数组格式。
获取群组ID:添加 @raw_data_bot 到群组
注意: 群组ID通常是负数
示例:
TELEGRAM_ALLOWED_GROUPS=[-1001074286857, -1002454076747]
必需
Webhook回调端口,默认值:
可选
每个bot使用Docker Volume持久化数据:
查看Volumes:
docker volume ls | grep claude-bot
清理特定bot的数据(⚠️ 会删除所有历史记录):
docker volume rm claude-bot-tomato_data docker volume rm claude-bot-tomato_sessions
检查 .env 文件:
cd run/tomato cat .env
确保:
查看日志:
./docker-bot.sh logs tomato
错误: 401 Unauthorized
ANTHROPIC_API_KEY 是否正确错误: 403 Forbidden
检查Token:
curl https://api.telegram.org/bot<YOUR_TOKEN>/getMe
检查网络:
docker exec -it claude-bot-tomato ping -c 3 api.telegram.org
错误: address already in use
修改 .env 文件中的 WEBHOOK_PORT:
WEBHOOK_PORT=40541 # 使用不同的端口
如果日志文件无法写入:
cd run/tomato touch bot.log debug.log chmod 666 bot.log debug.log
# 1. 拉取最新代码 git pull # 2. 停止所有bot ./docker-bot.sh stop all # 3. 重新构建镜像 ./docker-bot.sh build # 4. 启动所有bot ./docker-bot.sh start all
修改 .env 文件后重启bot:
./docker-bot.sh restart tomato
修改 run/{bot}/CLAUDE.md 后重启bot:
./docker-bot.sh restart tomato
# 使用管理脚本 ./docker-bot.sh logs tomato # 或直接使用docker-compose cd run/tomato docker-compose logs -f
每个bot的日志文件:
run/{bot}/bot.log - Bot运行日志run/{bot}/debug.log - 详细调试日志# 清空日志文件 cd run/tomato > bot.log > debug.log
保护 .env 文件
chmod 600 run/*/. env
不要提交敏感信息到Git
.env 文件已在 .gitignore 中.env.example定期更新依赖
# 更新基础镜像 docker pull python:3.12-slim # 重新构建 ./docker-bot.sh build
使用最小权限
监控API使用
每个bot使用独立的Docker网络:
claude-bot-tomatoclaude-bot-cyreneclaude-bot-goldshipclaude-bot-lunatalk这确保了bot之间的隔离。
分阶段部署
# 先测试单个bot ./docker-bot.sh start tomato # 确认正常后再启动其他 ./docker-bot.sh start all
监控资源使用
docker stats claude-bot-tomato
定期备份数据
# 备份Volume docker run --rm -v claude-bot-tomato_data:/data \ -v $(pwd):/backup alpine \ tar czf /backup/tomato-backup.tar.gz -C /data .
使用健康检查
日志轮转
# 配置logrotate sudo nano /etc/logrotate.d/claude-bot
Q: 可以在同一台机器上运行多个bot吗? A: 可以,每个bot是独立容器,使用不同的端口和网络。
Q: 数据存储在哪里? A: 使用Docker Volume持久化存储,位置由Docker管理。
Q: 如何迁移bot到另一台服务器? A: 导出Volume数据,传输到新服务器,导入Volume即可。
Q: Bot重启后会丢失对话历史吗? A: 不会,对话历史持久化在Docker Volume中。
Q: 可以使用自己的API代理吗? A: 可以,设置 ANTHROPIC_BASE_URL 环境变量。
维护者: Rivoreo AutoPilot 最后更新: 2025-12-11