本文档介绍如何使用 Docker 和 Docker Compose 部署 Z2API 服务。
确保已安装:
- Docker (>= 20.10)
- Docker Compose (>= 2.0)
复制环境变量模板:
cp .env.example .env编辑 .env 文件,设置必要的环境变量:
# 必须设置的变量
API_KEY=your-api-key-here
Z_AI_COOKIES=your_jwt_token_here
# 可选配置
HOST=0.0.0.0
PORT=8000
LOG_LEVEL=INFO# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down# 构建镜像
docker build -t z2api .
# 运行容器
docker run -d \
--name z2api \
-p 8000:8000 \
--env-file .env \
z2api访问健康检查端点:
curl http://localhost:8000/health启用 Nginx 反向代理(可选):
docker-compose --profile with-nginx up -d这将启动:
- Z2API 服务(内部端口 8000)
- Nginx 反向代理(端口 80/443)
编辑 nginx.conf 文件来自定义 Nginx 设置。
将 SSL 证书放在 ssl/ 目录下:
ssl/
├── cert.pem
└── key.pem
然后取消注释 nginx.conf 中的 HTTPS 配置。
# 拉取最新镜像
docker pull ghcr.io/your-username/z2api:latest
# 使用预构建镜像运行
docker run -d \
--name z2api \
-p 8000:8000 \
--env-file .env \
--restart unless-stopped \
ghcr.io/your-username/z2api:latest在生产环境中,建议设置资源限制:
# docker-compose.override.yml
version: "3.8"
services:
z2api:
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
reservations:
cpus: "0.5"
memory: 256M配置日志轮转:
services:
z2api:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"项目包含自动化的 CI/CD 流程:
- 推送到
main、master或develop分支时自动构建 - 创建标签时构建带版本号的镜像
- 支持多架构构建(amd64, arm64)
- 使用 Trivy 进行容器安全扫描
- 扫描结果上传到 GitHub Security tab
- 确保 GitHub 仓库启用了 GitHub Packages
- 推送代码到仓库
- 查看 Actions 页面的构建状态
- 构建成功后,镜像将推送到
ghcr.io/your-username/repo-name
# 查看容器日志
docker-compose logs z2api
# 检查容器状态
docker-compose ps# 进入容器检查
docker-compose exec z2api bash
# 手动测试健康检查
curl localhost:8000/health# 检查环境变量是否正确加载
docker-compose exec z2api env | grep Z_AI修改 Dockerfile 中的启动命令:
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]FROM python:3.11-alpine日志默认输出到容器标准输出,可以通过以下方式查看:
# 实时查看日志
docker-compose logs -f z2api
# 查看最近的日志
docker-compose logs --tail=100 z2api服务提供健康检查端点 /health,可以集成到监控系统中。
- 不要在镜像中包含敏感信息
- 使用非 root 用户运行容器(已在 Dockerfile 中配置)
- 定期更新基础镜像
- 使用安全扫描工具(已集成 Trivy)
- 限制容器权限
- 使用 HTTPS(生产环境)
如有问题,请查看:
- 项目 README.md
- GitHub Issues
- 容器日志输出