Files
funstat-mcp/docs/DOCKER_DEPLOYMENT.md
2025-11-01 21:58:03 +08:00

601 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Funstat MCP - Docker 部署指南
## 🐳 Docker 一键部署
最简单的部署方式!用户只需要 3 个命令即可完成部署。
---
## 🚀 快速开始5分钟
### 前置要求
- ✅ Docker 已安装
- ✅ Docker Compose 已安装(通常随 Docker 一起安装)
- ✅ 一个 Telegram 账号
- ✅ Telegram API 凭证(访问 https://my.telegram.org/apps 获取)
### 步骤 1获取项目
```bash
# 方法 A从 Git 克隆
git clone https://github.com/your-repo/funstat-mcp.git
cd funstat-mcp
# 方法 B解压下载的文件
tar -xzf funstat-mcp.tar.gz
cd funstat_mcp
```
### 步骤 2配置环境变量
```bash
# 复制示例配置
cp .env.example .env
# 编辑配置文件
nano .env
```
填入你的 API 凭证:
```bash
TELEGRAM_API_ID=你的_api_id
TELEGRAM_API_HASH=你的_api_hash
```
### 步骤 3首次创建 Session
```bash
# 启动容器并创建 session
docker-compose run --rm funstat-mcp python3 create_session_safe.py
```
按照提示:
1. 输入手机号
2. 输入验证码
3. 如果有两步验证,输入密码
### 步骤 4启动服务
```bash
# 启动服务(后台运行)
docker-compose up -d
# 查看日志
docker-compose logs -f
```
应该看到:
```
✅ 初始化 Telegram 客户端...
✅ 已连接到: KT超级数据
✅ 当前账号: @your_username
```
### 步骤 5配置 Claude Code
编辑 Claude Code 配置文件:
**macOS**:
```bash
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
添加配置:
```json
{
"mcpServers": {
"funstat": {
"command": "docker",
"args": [
"exec",
"-i",
"funstat-mcp",
"python3",
"server.py"
]
}
}
}
```
### 步骤 6重启 Claude Code 并测试
完全退出并重启 Claude Code然后测试
```
你: "帮我搜索 Python 学习群组"
```
---
## 📋 常用命令
### 启动和停止
```bash
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 重启服务
docker-compose restart
# 查看状态
docker-compose ps
```
### 日志查看
```bash
# 查看实时日志
docker-compose logs -f
# 查看最近 100 行日志
docker-compose logs --tail=100
# 查看特定时间的日志
docker-compose logs --since="2024-01-01"
```
### 进入容器
```bash
# 进入容器 shell
docker-compose exec funstat-mcp /bin/bash
# 运行 Python 命令
docker-compose exec funstat-mcp python3 -c "print('Hello')"
```
### 更新和维护
```bash
# 拉取最新镜像
docker-compose pull
# 重新构建镜像
docker-compose build --no-cache
# 清理旧镜像
docker image prune -a
```
---
## 🔧 高级配置
### 使用预构建镜像
如果我们发布了 Docker Hub 镜像:
```yaml
# docker-compose.yml
services:
funstat-mcp:
image: yourname/funstat-mcp:latest
# 移除 build 部分
```
使用:
```bash
docker-compose pull
docker-compose up -d
```
### 自定义端口
如果需要通过 HTTP 访问(未来功能):
```yaml
# docker-compose.yml
services:
funstat-mcp:
ports:
- "8080:8080"
```
### 资源限制
调整内存和 CPU 限制:
```yaml
# docker-compose.yml
services:
funstat-mcp:
deploy:
resources:
limits:
cpus: '2.0' # 最多使用 2 个 CPU
memory: 1G # 最多使用 1GB 内存
```
### 多个 Session多账号
运行多个实例:
```yaml
# docker-compose.yml
services:
funstat-mcp-1:
build: .
container_name: funstat-mcp-1
environment:
- TELEGRAM_API_ID=${API_ID_1}
- TELEGRAM_API_HASH=${API_HASH_1}
volumes:
- ./sessions/account1:/app/sessions
funstat-mcp-2:
build: .
container_name: funstat-mcp-2
environment:
- TELEGRAM_API_ID=${API_ID_2}
- TELEGRAM_API_HASH=${API_HASH_2}
volumes:
- ./sessions/account2:/app/sessions
```
---
## 🐛 故障排除
### 问题 1容器无法启动
**检查日志**
```bash
docker-compose logs funstat-mcp
```
**常见原因**
- .env 文件配置错误
- session 文件不存在
- 端口被占用
**解决方案**
```bash
# 检查配置
cat .env
# 重新创建 session
docker-compose run --rm funstat-mcp python3 create_session_safe.py
# 清理并重启
docker-compose down -v
docker-compose up -d
```
### 问题 2Session 文件丢失
**症状**
```
FileNotFoundError: Session 文件不存在
```
**解决方案**
```bash
# 检查 session 文件
ls -la sessions/
# 如果不存在,重新创建
docker-compose run --rm funstat-mcp python3 create_session_safe.py
```
### 问题 3权限错误
**症状**
```
PermissionError: Permission denied
```
**解决方案**
```bash
# 修复 sessions 目录权限
chmod -R 755 sessions/
chown -R $USER:$USER sessions/
```
### 问题 4网络连接问题
**症状**
```
ConnectionError: Failed to connect
```
**解决方案**
```bash
# 检查 Docker 网络
docker network ls
# 重建网络
docker-compose down
docker network prune
docker-compose up -d
```
---
## 🔐 安全建议
### 1. 保护敏感文件
```bash
# 设置 .env 文件权限
chmod 600 .env
# 设置 sessions 目录权限
chmod 700 sessions/
```
### 2. 使用 Docker Secrets生产环境
```yaml
# docker-compose.yml
version: '3.8'
services:
funstat-mcp:
secrets:
- telegram_api_id
- telegram_api_hash
environment:
- TELEGRAM_API_ID_FILE=/run/secrets/telegram_api_id
- TELEGRAM_API_HASH_FILE=/run/secrets/telegram_api_hash
secrets:
telegram_api_id:
file: ./secrets/api_id.txt
telegram_api_hash:
file: ./secrets/api_hash.txt
```
### 3. 定期备份 Session
```bash
# 创建备份脚本
cat > backup_sessions.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf sessions_backup_$DATE.tar.gz sessions/
echo "备份完成: sessions_backup_$DATE.tar.gz"
EOF
chmod +x backup_sessions.sh
# 运行备份
./backup_sessions.sh
```
### 4. 使用只读挂载(配置文件)
```yaml
# docker-compose.yml
services:
funstat-mcp:
volumes:
- ./config.json:/app/config.json:ro # 只读
- ./sessions:/app/sessions:rw # 读写
```
---
## 📦 分发给其他用户
### 方法 1分享项目文件
```bash
# 打包(排除敏感信息)
tar -czf funstat-mcp-docker.tar.gz \
--exclude=".env" \
--exclude="sessions/*" \
--exclude=".git" \
Dockerfile \
docker-compose.yml \
.env.example \
requirements.txt \
server.py \
create_session_safe.py \
*.md
# 分享 funstat-mcp-docker.tar.gz
```
用户使用:
```bash
tar -xzf funstat-mcp-docker.tar.gz
cd funstat_mcp
cp .env.example .env
nano .env # 填入 API 凭证
docker-compose run --rm funstat-mcp python3 create_session_safe.py
docker-compose up -d
```
### 方法 2发布到 Docker Hub
```bash
# 登录 Docker Hub
docker login
# 构建镜像
docker build -t yourname/funstat-mcp:latest .
# 推送到 Docker Hub
docker push yourname/funstat-mcp:latest
# 添加版本标签
docker tag yourname/funstat-mcp:latest yourname/funstat-mcp:1.0.0
docker push yourname/funstat-mcp:1.0.0
```
用户使用:
```bash
# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
funstat-mcp:
image: yourname/funstat-mcp:latest
container_name: funstat-mcp
environment:
- TELEGRAM_API_ID=${TELEGRAM_API_ID}
- TELEGRAM_API_HASH=${TELEGRAM_API_HASH}
volumes:
- ./sessions:/app/sessions
restart: unless-stopped
stdin_open: true
tty: true
EOF
# 配置并启动
cp .env.example .env
nano .env
docker-compose run --rm funstat-mcp python3 create_session_safe.py
docker-compose up -d
```
---
## 🎯 最佳实践
### 1. 使用版本标签
```yaml
# docker-compose.yml
services:
funstat-mcp:
image: yourname/funstat-mcp:1.0.0 # 指定版本
# 不要使用 :latest
```
### 2. 健康检查
```yaml
# docker-compose.yml
services:
funstat-mcp:
healthcheck:
test: ["CMD", "python3", "-c", "import os; exit(0)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
### 3. 日志轮转
```yaml
# docker-compose.yml
services:
funstat-mcp:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
### 4. 环境隔离
```bash
# 开发环境
docker-compose -f docker-compose.dev.yml up
# 生产环境
docker-compose -f docker-compose.prod.yml up -d
```
---
## 📊 性能优化
### 1. 使用 Alpine 基础镜像(更小)
```dockerfile
FROM python:3.11-alpine
```
### 2. 多阶段构建
```dockerfile
# 构建阶段
FROM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# 运行阶段
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python3", "server.py"]
```
### 3. 缓存优化
```dockerfile
# 优先复制依赖文件,利用 Docker 缓存
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 最后复制代码
COPY . .
```
---
## 🎊 总结
### Docker 部署的优势
**一键启动** - `docker-compose up -d`
**环境隔离** - 不污染主机
**易于分发** - Docker Hub 或 tar 包
**跨平台** - Windows/macOS/Linux
**易于更新** - `docker-compose pull`
**资源控制** - 限制 CPU/内存
**日志管理** - 统一日志输出
### 用户体验
**传统部署**
```bash
# 安装 Python
# 配置环境
# 安装依赖
# 创建 session
# 配置服务
# ... 20+ 步骤
```
**Docker 部署**
```bash
cp .env.example .env
nano .env
docker-compose run --rm funstat-mcp python3 create_session_safe.py
docker-compose up -d
# ✅ 完成!
```
**时间对比**
- 传统部署30-60 分钟
- Docker 部署:**5-10 分钟** ⚡
---
**Docker 让部署变得简单!** 🐳🎉