zai / README_DOCKER.md
sanbo110's picture
update sth at 2025-10-23 17:38:54
fdc7f56
# 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)