本项目支持使用 Docker 和 Docker Compose 进行部署,方便快捷且环境隔离。
根据不同的基础镜像,最终镜像大小如下:
| Dockerfile | 基础镜像大小 | 预估最终大小 | 说明 |
|---|---|---|---|
Dockerfile (slim) |
~130 MB | 250-300 MB | 推荐,兼容性好 |
Dockerfile.alpine |
~50 MB | 150-200 MB | 最小体积,生产环境推荐 |
镜像大小构成:
- 基础 Python 镜像:130 MB (slim) / 50 MB (alpine)
- 系统字体和依赖:30-50 MB
- Python 包(Streamlit, ReportLab 等):80-100 MB
- 应用代码:< 5 MB
- 其他系统文件:10-20 MB
-
确保已安装 Docker 和 Docker Compose
-
配置环境变量
编辑
.env文件:cp .env.example .env # 编辑 .env 文件,填入你的 API Key -
启动服务
docker-compose up -d
-
访问应用
打开浏览器访问:http://localhost:8501
-
查看日志
docker-compose logs -f
-
停止服务
docker-compose down
-
构建镜像
使用 slim 版本(推荐):
docker build -t storycraft:latest .或使用 alpine 版本(更小):
docker build -f Dockerfile.alpine -t storycraft:alpine . -
运行容器
docker run -d \ --name storycraft \ -p 8501:8501 \ -v $(pwd)/output:/app/output \ -e API_KEY=your-api-key-here \ -e ARK_API_KEY=your-ark-key-here \ -e IMAGE_SERVICE=doubao \ storycraft:latest -
查看日志
docker logs -f storycraft
-
停止容器
docker stop storycraft docker rm storycraft
必需的环境变量:
| 变量 | 说明 | 示例 |
|---|---|---|
API_KEY |
通义千问 API Key | sk-xxx |
ARK_API_KEY |
豆包 API Key | ark-xxx |
可选的环境变量:
| 变量 | 说明 | 默认值 |
|---|---|---|
IMAGE_SERVICE |
图片服务(doubao/tongyi) | doubao |
DEFAULT_SCENES |
默认场景数 | 10 |
PDF_IMAGE_QUALITY |
PDF 图片质量 | 85 |
Docker 容器默认会在 /app/output 目录生成文件。建议挂载本地目录以持久化数据:
volumes:
- ./output:/app/output容器包含健康检查功能,会定期检查应用状态:
docker ps
# 查看 HEALTHY 状态Alpine 版本镜像更小,启动更快:
docker build -f Dockerfile.alpine -t storycraft:alpine .如果需要进一步优化,可以考虑多阶段构建,减少最终镜像大小。
在 docker-compose.yml 中添加资源限制:
services:
storycraft:
deploy:
resources:
limits:
cpus: '2'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M在生产环境中,建议使用 Docker Compose 并配置以下选项:
- 重启策略:
restart: always - 资源限制
- 日志轮转
- 健康检查
使用 Nginx 或 Traefik 作为反向代理:
# docker-compose.yml
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl
depends_on:
- storycraft- 不要在镜像中包含
.env文件 - 使用 Docker secrets 管理敏感信息
- 定期更新基础镜像
- 限制容器权限
-
检查日志:
docker logs storycraft
-
验证环境变量:
docker exec storycraft env | grep API
-
检查端口占用:
netstat -tuln | grep 8501
如果中文无法正常显示,检查字体是否正确安装:
docker exec storycraft fc-list | grep -i noto-
清理缓存重新构建:
docker build --no-cache -t storycraft:latest . -
检查网络连接,确保可以访问 PyPI
-
停止并删除旧容器
docker-compose down
-
拉取最新代码
git pull
-
重新构建镜像
docker-compose build
-
启动新容器
docker-compose up -d
如果未来发布到 Docker Hub:
docker pull cnvhql/storycraft:latest
docker run -d -p 8501:8501 cnvhql/storycraft:latest