# Docker 部署文档 ## 快速部署 ### 方式一: 使用预构建镜像 (推荐) 从 Docker Hub 拉取镜像: ```bash # 拉取最新镜像 docker pull zyphrzero/z-ai2api-python:latest # 创建数据目录 mkdir -p data logs # 快速启动 docker run -d \ --name z-ai-api-server \ -p 7860:7860 \ -e ADMIN_PASSWORD=admin123 \ -e AUTH_TOKEN=sk-your-api-key \ -e ANONYMOUS_MODE=true \ -e DB_PATH=/app/data/tokens.db \ -v $(pwd)/data:/app/data \ -v $(pwd)/logs:/app/logs \ --restart unless-stopped \ zyphrzero/z-ai2api-python:latest ``` **优势**: - ✅ 无需本地构建,节省时间 - ✅ GitHub Actions 自动化构建,保证质量 - ✅ 多架构支持 (amd64/arm64) - ✅ 镜像已优化,体积更小 ### 方式二: 使用本地构建 适用于需要自定义修改代码的场景: ```bash # 进入部署目录 cd deploy # 启动服务 (会自动构建镜像) docker compose up -d # 查看日志 docker compose logs -f api-server ``` 服务将在 `http://localhost:7860` 启动。 ## 架构说明 ### 持久化存储 容器使用卷映射实现数据持久化: ```yaml volumes: - ./data:/app/data # 数据库存储 (tokens.db) - ./logs:/app/logs # 应用日志 ``` **目录结构**: ``` deploy/ ├── data/ │ └── tokens.db # SQLite 数据库 (自动创建) ├── logs/ # 应用日志 (自动创建) ├── docker-compose.yml ├── Dockerfile └── README_DOCKER.md ``` ### 环境变量 核心配置参数 (在 `docker-compose.yml` 中设置): | 变量 | 默认值 | 说明 | |------|--------|------| | `DB_PATH` | `/app/data/tokens.db` | 数据库文件路径 | | `ADMIN_PASSWORD` | `admin123` | 管理后台密码 | | `AUTH_TOKEN` | `sk-your-api-key` | API 认证密钥 | | `SKIP_AUTH_TOKEN` | `false` | 跳过 API 验证 | | `ANONYMOUS_MODE` | `true` | 匿名访问模式 | | `DEBUG_LOGGING` | `true` | 调试日志开关 | | `TOOL_SUPPORT` | `true` | Function Call 支持 | **生产环境建议**: - 修改 `ADMIN_PASSWORD` 和 `AUTH_TOKEN` - 设置 `DEBUG_LOGGING=false` - 设置 `ANONYMOUS_MODE=false` ## 运维操作 ### 服务管理 ```bash # 启动服务 docker compose up -d # 停止服务 docker compose down # 重启服务 docker compose restart # 查看状态 docker compose ps # 实时日志 docker compose logs -f ``` ### 更新应用 **使用预构建镜像**: ```bash # 停止当前容器 docker compose down # 拉取最新镜像 docker pull zyphrzero/z-ai2api-python:latest # 启动新版本 (数据会自动保留) docker compose up -d # 清理旧镜像 docker image prune -f ``` **使用本地构建**: ```bash # 拉取最新代码 git pull # 重新构建并启动 (数据会保留) docker compose up -d --build # 清理旧镜像 docker image prune -f ``` ### 数据备份与恢复 **备份**: ```bash # 备份数据库 cp ./data/tokens.db ./data/tokens.db.backup.$(date +%Y%m%d_%H%M%S) # 完整备份 tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz ./data ./logs ``` **恢复**: ```bash # 停止服务 docker compose down # 恢复数据库 cp ./data/tokens.db.backup.20250116_120000 ./data/tokens.db # 启动服务 docker compose up -d ``` ### 数据库迁移 如需从其他位置迁移现有数据库: ```bash # 使用迁移脚本 ./migrate_db.sh /path/to/existing/tokens.db # 或手动复制 cp /opt/1panel/docker/compose/k2think/tokens.db ./data/ chmod 644 ./data/tokens.db # 启动服务 docker compose up -d ``` ## 故障排查 ### 数据库初始化失败 **错误**: `unable to open database file` **原因**: 目录权限或卷映射问题 **解决**: ```bash # 停止容器 docker compose down # 确保目录存在 mkdir -p ./data ./logs # 设置权限 chmod 755 ./data ./logs # 重新构建并启动 docker compose up -d --build ``` ### 容器无法启动 **检查步骤**: ```bash # 查看详细日志 docker compose logs api-server # 检查容器状态 docker compose ps # 验证配置文件 docker compose config ``` ### 端口冲突 如端口 7860 被占用,修改 `docker-compose.yml`: ```yaml ports: - "8081:7860" # 映射到宿主机 8081 端口 ``` ### 健康检查失败 ```bash # 检查健康状态 docker compose ps # 手动测试接口 curl http://localhost:7860/v1/models # 进入容器排查 docker exec -it z-ai-api-server bash ``` ## API 访问 | 端点 | 地址 | 说明 | |------|------|------| | API 根路径 | `http://localhost:7860` | OpenAI 兼容 API | | 模型列表 | `http://localhost:7860/v1/models` | 获取可用模型 | | 管理后台 | `http://localhost:7860/admin` | Web 管理界面 | | API 文档 | `http://localhost:7860/docs` | OpenAPI/Swagger 文档 | | 健康检查 | `http://localhost:7860/v1/models` | 服务健康状态 | ## 高级配置 ### 自定义数据库路径 修改 `docker-compose.yml` 使用外部路径: ```yaml volumes: - /opt/mydata:/app/data # 使用绝对路径 environment: - DB_PATH=/app/data/tokens.db ``` ### 使用 .env 文件 创建 `.env` 文件 (基于 `.env.example`): ```bash cp .env.example .env # 编辑配置 vim .env ``` 修改 `docker-compose.yml`: ```yaml services: api-server: env_file: .env ``` ### 启用日志轮转 在生产环境配置 Docker 日志驱动: ```yaml services: api-server: logging: driver: "json-file" options: max-size: "10m" max-file: "3" ``` ### 资源限制 限制容器资源使用: ```yaml services: api-server: deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '0.5' memory: 512M ``` ## 监控与日志 ### 查看日志 ```bash # 实时日志 docker compose logs -f # 最近100行 docker compose logs --tail=100 # 特定时间段 docker compose logs --since 30m # 导出日志 docker compose logs > app.log ``` ### 容器指标 ```bash # 资源使用情况 docker stats z-ai-api-server # 容器详情 docker inspect z-ai-api-server ``` ## 安全建议 1. **修改默认密码**: 更改 `ADMIN_PASSWORD` 和 `AUTH_TOKEN` 2. **限制网络访问**: 生产环境使用反向代理 (Nginx/Caddy) 3. **启用 HTTPS**: 配置 SSL 证书 4. **定期备份**: 自动化数据库备份任务 5. **日志审计**: 定期检查 `request_logs` 表 6. **最小权限**: 避免以 root 运行容器 ## 参考资料 - [Docker Compose 文档](https://docs.docker.com/compose/) - [项目主 README](../README.md) - [配置示例](.env.example)