Files
PicAnalysis/docker-compose.yml

118 lines
3.2 KiB
YAML
Raw Permalink Normal View History

services:
# ========================
# Backend Service
# ========================
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: picanalysis-backend
restart: unless-stopped
environment:
NODE_ENV: production
DATABASE_URL: file:./prod.db
PORT: 13057
CORS_ORIGIN: http://localhost:13056
JWT_SECRET: ${JWT_SECRET}
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-24h}
OCR_PROVIDER: ${OCR_PROVIDER:-tesseract}
OCR_CONFIDENCE_THRESHOLD: ${OCR_CONFIDENCE_THRESHOLD:-0.3}
BAIDU_OCR_API_KEY: ${BAIDU_OCR_API_KEY:-}
BAIDU_OCR_SECRET_KEY: ${BAIDU_OCR_SECRET_KEY:-}
GLM_API_KEY: ${GLM_API_KEY:-}
GLM_API_URL: ${GLM_API_URL:-https://open.bigmodel.cn/api/paas/v4/chat/completions}
GLM_MODEL: ${GLM_MODEL:-glm-4-flash}
MINIMAX_API_KEY: ${MINIMAX_API_KEY:-}
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
UPLOAD_MAX_SIZE: ${UPLOAD_MAX_SIZE:-10485760}
UPLOAD_ALLOWED_TYPES: ${UPLOAD_ALLOWED_TYPES:-image/jpeg,image/png,image/webp}
# OCR Services URLs
RAPIDOCR_API_URL: ${RAPIDOCR_API_URL:-http://rapidocr:9004}
PADDLEOCR_API_URL: ${PADDLEOCR_API_URL:-http://paddleocr:8866}
volumes:
# Persist database and uploads
- backend-data:/app/data
- backend-uploads:/app/uploads
networks:
- picanalysis-network
depends_on:
- rapidocr
- paddleocr
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:13057/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# ========================
# RapidOCR Service (本地快速 OCR)
# ========================
rapidocr:
image: volador/rapidocr:latest
container_name: picanalysis-rapidocr
restart: unless-stopped
ports:
- "13058:9004"
networks:
- picanalysis-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:9004"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
# ========================
# PaddleOCR Service (本地高精度 OCR - 使用官方预构建镜像)
# ========================
paddleocr:
image: 987846/paddleocr:latest
container_name: picanalysis-paddleocr
restart: unless-stopped
ports:
- "13059:8866"
environment:
# 修复 protobuf 兼容性问题
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
networks:
- picanalysis-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8866/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# ========================
# Frontend Service
# ========================
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: picanalysis-frontend
restart: unless-stopped
ports:
- "${FRONTEND_PORT:-13056}:80"
networks:
- picanalysis-network
depends_on:
- backend
# ========================
# Volumes
# ========================
volumes:
backend-data:
driver: local
backend-uploads:
driver: local
# ========================
# Networks
# ========================
networks:
picanalysis-network:
driver: bridge