Files
recommend/README_DOCKER.md
2025-11-05 13:32:14 +08:00

274 lines
5.8 KiB
Markdown
Raw 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.
# Docker 部署指南
本文档说明如何使用Docker部署个性化饮食推荐助手Web应用。
## 📋 前置要求
- Docker Engine 20.10+
- Docker Compose 2.0+
## 🚀 快速开始
### 方式一:使用 Docker Compose推荐
#### 生产环境
```bash
# 构建并启动容器
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止容器
docker-compose down
```
#### 开发环境(支持代码热重载)
```bash
# 使用开发配置启动
docker-compose -f docker-compose.dev.yml up -d
# 查看日志
docker-compose -f docker-compose.dev.yml logs -f
# 停止容器
docker-compose -f docker-compose.dev.yml down
```
### 方式二:使用 Docker 命令
```bash
# 构建镜像
docker build -t diet-recommendation-app .
# 运行容器
docker run -d \
--name diet_recommendation_app \
-p 7400:7400 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/models:/app/models \
diet-recommendation-app
# 查看日志
docker logs -f diet_recommendation_app
# 停止容器
docker stop diet_recommendation_app
docker rm diet_recommendation_app
```
## 🌐 访问应用
容器启动后,访问:
- **主页**: http://localhost:7400
- **背诵排序**: http://localhost:7400/recitation
- **数据采集**: http://localhost:7400/data-collection
- **智能推荐**: http://localhost:7400/recommendation
- **营养分析**: http://localhost:7400/analysis
- **健康检查**: http://localhost:7400/health
## 📁 数据持久化
以下目录会自动挂载到容器中,确保数据不丢失:
- `./data` - 用户数据和数据库
- `./logs` - 日志文件
- `./models` - 训练好的模型文件
## 🔧 配置说明
### 环境变量
可以通过 `docker-compose.yml` 中的 `environment` 部分或 `.env` 文件配置:
```yaml
environment:
- FLASK_ENV=production
- QWEN_API_KEY=your_api_key_here
```
### 端口配置
默认端口为 `7400`,如需修改:
```yaml
ports:
- "8080:7400" # 将主机的8080端口映射到容器的7400端口
```
## 🐛 故障排除
### 查看容器日志
```bash
# Docker Compose
docker-compose logs -f web
# Docker
docker logs -f diet_recommendation_app
```
### 进入容器调试
```bash
# Docker Compose
docker-compose exec web bash
# Docker
docker exec -it diet_recommendation_app bash
```
### 重启容器
```bash
# Docker Compose
docker-compose restart
# Docker
docker restart diet_recommendation_app
```
### 重新构建镜像
```bash
# Docker Compose
docker-compose build --no-cache
# Docker
docker build --no-cache -t diet-recommendation-app .
```
## 📊 健康检查
容器包含健康检查功能,可以通过以下方式查看状态:
```bash
# Docker Compose
docker-compose ps
# Docker
docker ps
```
健康检查端点:`http://localhost:7400/health`
## 🔒 安全建议
1. **生产环境**
- 使用反向代理Nginx/Traefik
- 配置HTTPS
- 限制端口访问
- 使用环境变量管理敏感信息
2. **数据备份**
- 定期备份 `data` 目录
- 备份 `models` 目录中的模型文件
## 🚢 生产部署示例
### 使用 Nginx 作为反向代理
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:7400;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
## 💾 小内存机器配置512MB-1GB
如果你的 Linux 机器内存较小,可以使用专门优化的小内存版本:
```bash
# 使用小内存优化的 Dockerfile 和配置
docker-compose -f docker-compose.low-mem.yml up -d
# 查看日志
docker-compose -f docker-compose.low-mem.yml logs -f
# 停止容器
docker-compose -f docker-compose.low-mem.yml down
```
### 小内存优化措施
1. **单 Worker 配置**Gunicorn 使用 1 个 worker + 2 个线程,减少内存占用
2. **最小化依赖**:移除 GUI 相关依赖CustomTkinter、Kivy等
3. **OpenCV Headless**:使用 `opencv-python-headless`,不包含 GUI 组件
4. **内存限制**:容器内存限制为 512MB最大保留 256MB
5. **环境变量优化**:设置 `MALLOC_ARENA_MAX=2``PYTHONHASHSEED=0` 减少内存碎片
### 内存需求对比
| 配置 | 内存需求 | 适用场景 |
|------|---------|---------|
| 标准版Dockerfile | 1GB+ | 服务器、开发环境 |
| 小内存版Dockerfile.low-mem | 512MB-1GB | 树莓派、小型 VPS、低配服务器 |
### 手动调整内存限制
如果使用标准版,可以通过修改 `docker-compose.yml` 来限制内存:
```yaml
services:
web:
deploy:
resources:
limits:
memory: 512M # 限制最大内存
reservations:
memory: 256M # 保留内存
```
## 📝 注意事项
1. **OCR功能**
- Docker镜像已包含 Tesseract OCR 支持(轻量级)
- **未包含** PaddleOCR 和 EasyOCR内存占用大需要手动安装
- 默认只使用 Tesseract OCR内存占用很小
2. **内存限制**
- 标准版:建议至少分配 **1GB 内存**给容器
- 小内存版:可以在 **512MB 内存**的机器上运行
3. **Worker 数量调整**
- 标准版默认 2 个 worker适合 1GB+ 内存)
- 小内存机器可以在 `Dockerfile` 中修改为 1 个 worker
```dockerfile
CMD ["python", "-m", "gunicorn", "--bind", "0.0.0.0:7400", "--workers", "1", ...]
```
4. **文件权限**:确保挂载的目录有适当的读写权限
5. **时区设置**如需修改时区在Dockerfile中添加
```dockerfile
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
```
## 🔄 更新应用
```bash
# 停止容器
docker-compose down
# 拉取最新代码
git pull
# 重新构建并启动
docker-compose build --no-cache
docker-compose up -d
```