# PicAnalysis Docker 部署指南 本文档介绍如何使用 Docker Compose 部署 PicAnalysis 项目。 ## 前置要求 - Docker Engine 20.10+ - Docker Compose 2.0+ ## 快速开始 ### 1. 配置环境变量 复制生产环境配置模板: ```bash cp .env.production.example .env ``` 编辑 `.env` 文件,**至少**设置以下必填项: ```bash # 必须设置!生成强密钥: openssl rand -base64 32 JWT_SECRET="your-very-strong-random-secret-key" ``` ### 2. 构建并启动服务 ```bash # 构建并启动所有服务 docker compose up -d # 查看服务状态 docker compose ps # 查看日志 docker compose logs -f ``` ### 3. 访问应用 - **前端**: http://localhost:80 - **后端 API**: http://localhost:80/api - **健康检查**: http://localhost:80/api/health 默认测试账号: - 用户名: `testuser` - 密码: `Password123@` ## 服务架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Docker Network │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │ │ │ Frontend │───▶│ Backend │───▶│ RapidOCR │ │ │ │ (Nginx) │ │ (Node.js) │ │ │ │ │ │ :80 │ │ :4000 │ │ :8080 │ │ │ └──────────────┘ └──────────────┘ └──────────┘ │ │ │ │ │ ┌────▼─────┐ │ │ │ Volumes │ │ │ │ - data │ │ │ │ - uploads│ │ │ └──────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ## 常用命令 ### 服务管理 ```bash # 启动服务 docker compose up -d # 停止服务 docker compose stop # 重启服务 docker compose restart # 停止并删除容器 docker compose down # 停止并删除容器、卷、镜像 docker compose down -v --rmi all ``` ### 日志查看 ```bash # 查看所有日志 docker compose logs # 实时跟踪日志 docker compose logs -f # 查看特定服务日志 docker compose logs -f backend docker compose logs -f frontend docker compose logs -f rapidocr ``` ### 数据库管理 ```bash # 进入后端容器 docker compose exec backend sh # 运行 Prisma 命令 docker compose exec backend npx prisma studio docker compose exec backend npx prisma migrate dev docker compose exec backend npx prisma db push ``` ### 备份与恢复 ```bash # 备份数据库 docker compose exec backend cp /app/data/prod.db /app/data/backup-$(date +%Y%m%d).db # 从备份恢复 docker compose exec backend cp /app/data/backup-20250101.db /app/data/prod.db docker compose restart backend ``` ## 配置选项 ### OCR Provider 选择 在 `.env` 中设置 `OCR_PROVIDER`: | Provider | 说明 | 配置要求 | |----------|------|----------| | `auto` | 自动选择可用(推荐) | 无需配置,会尝试 Tesseract 和 RapidOCR | | `tesseract` | 本地轻量 | 已内置,无需额外配置 | | `rapidocr` | 本地快速准确 | 需要启动 RapidOCR 服务(已包含在 compose 中) | | `baidu` | 云端准确 | 需要 `BAIDU_OCR_API_KEY` 和 `BAIDU_OCR_SECRET_KEY` | ### AI 分析配置(可选) 如果需要使用 AI 分析功能,在 `.env` 中配置相应的 API Key: ```bash # GLM (智谱 AI) GLM_API_KEY="your-glm-api-key" # MiniMax MINIMAX_API_KEY="your-minimax-api-key" # DeepSeek DEEPSEEK_API_KEY="your-deepseek-api-key" ``` ### 自定义端口 修改 `.env` 中的 `FRONTEND_PORT`: ```bash # 前端端口改为 8080 FRONTEND_PORT="8080" ``` 然后重启服务: ```bash docker compose down docker compose up -d ``` ## 数据持久化 以下数据通过 Docker Volumes 持久化: - `backend-data`: 数据库文件(`/app/data/prod.db`) - `backend-uploads`: 用户上传的图片(`/app/uploads`) 即使删除容器,数据也不会丢失。要完全清除数据: ```bash docker compose down -v ``` ## 生产环境建议 ### 1. 安全加固 ```bash # 生成强密钥 openssl rand -base64 32 ``` ### 2. 反向代理 在生产环境,建议使用 Nginx 或 Traefik 作为反向代理: ```nginx # Nginx 配置示例 server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ### 3. 监控 - 使用 `docker compose ps` 检查服务状态 - 配置日志收集(如 ELK Stack) - 设置健康检查告警 ### 4. 资源限制 在 `docker-compose.yml` 中添加资源限制: ```yaml services: backend: deploy: resources: limits: cpus: '1' memory: 512M ``` ## 故障排查 ### 服务无法启动 ```bash # 查看详细日志 docker compose logs backend # 检查容器状态 docker compose ps -a ``` ### 数据库连接错误 ```bash # 进入容器检查 docker compose exec backend ls -la /app/data # 重建数据库 docker compose down -v docker compose up -d ``` ### OCR 识别失败 ```bash # 检查 RapidOCR 服务 docker compose logs rapidocr curl http://localhost:8080 # 切换到 Tesseract # 在 .env 中设置 OCR_PROVIDER=tesseract docker compose restart backend ``` ### 权限问题 ```bash # 修复上传目录权限 docker compose exec backend chown -R nodejs:nodejs /app/uploads ``` ## 升级部署 ```bash # 拉取最新代码 git pull # 重新构建并启动 docker compose up -d --build # 数据库迁移(如果有 schema 变更) docker compose exec backend npx prisma migrate deploy ``` ## 许可证 MIT License