feat: Docker化部署 - 單容器架構轉換
將 Tool_OCR 從 macOS conda 環境轉換為 Docker 單容器部署方案。 前後端整合於同一容器,通過 Nginx 反向代理,僅對外暴露單一端口。 ## 新增功能 - Docker 單容器架構(Frontend + Backend + Nginx) - 多階段構建優化鏡像大小 - Supervisor 進程管理 - 健康檢查機制 - 完整部署文檔 ## 技術細節 - 對外端口:12015(原 12010 已被佔用) - 內部架構:Nginx(12015) → FastAPI(8000) - 前端靜態文件由 Nginx 直接服務 - API 請求通過 Nginx 反向代理 ## 系統依賴完善 - libmagic1:文件類型檢測 - LibreOffice:Office 文檔轉換 - paddlex[ocr]:PP-StructureV3 版面分析 - 中日韓字體支援 ## 配置調整 - 環境變數路徑:macOS 路徑 → 容器絕對路徑 - 前端 API URL:修正為統一端口 12015 - Pip 安裝:延長超時至 600 秒,重試 5 次 - CRLF 轉換:自動處理 Windows 換行符 ## 清理 - 移除臨時文檔(API_FIX_SUMMARY.md 等 7 個文檔) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
97
docker-compose.yml
Normal file
97
docker-compose.yml
Normal file
@@ -0,0 +1,97 @@
|
||||
services:
|
||||
tool_ocr:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
image: tool_ocr:latest
|
||||
container_name: tool_ocr
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
- "12015:12015" # Only one port needed!
|
||||
|
||||
environment:
|
||||
# Database Configuration
|
||||
- MYSQL_HOST=${MYSQL_HOST:-mysql.theaken.com}
|
||||
- MYSQL_PORT=${MYSQL_PORT:-33306}
|
||||
- MYSQL_USER=${MYSQL_USER:-A060}
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-WLeSCi0yhtc7}
|
||||
- MYSQL_DATABASE=${MYSQL_DATABASE:-db_A060}
|
||||
|
||||
# Application Configuration
|
||||
- BACKEND_PORT=8000 # Internal backend port
|
||||
- FRONTEND_PORT=12015 # External port
|
||||
- SECRET_KEY=${SECRET_KEY:-your-secret-key-here-please-change-this}
|
||||
- ALGORITHM=${ALGORITHM:-HS256}
|
||||
- ACCESS_TOKEN_EXPIRE_MINUTES=${ACCESS_TOKEN_EXPIRE_MINUTES:-1440}
|
||||
|
||||
# OCR Configuration
|
||||
- PADDLEOCR_MODEL_DIR=/app/backend/models/paddleocr
|
||||
- OCR_LANGUAGES=${OCR_LANGUAGES:-ch,en,japan,korean}
|
||||
- OCR_CONFIDENCE_THRESHOLD=${OCR_CONFIDENCE_THRESHOLD:-0.5}
|
||||
- MAX_OCR_WORKERS=${MAX_OCR_WORKERS:-4}
|
||||
|
||||
# File Upload Configuration
|
||||
- MAX_UPLOAD_SIZE=${MAX_UPLOAD_SIZE:-52428800}
|
||||
- ALLOWED_EXTENSIONS=${ALLOWED_EXTENSIONS:-png,jpg,jpeg,pdf,bmp,tiff,doc,docx,ppt,pptx}
|
||||
- UPLOAD_DIR=/app/backend/uploads
|
||||
- TEMP_DIR=/app/backend/uploads/temp
|
||||
- PROCESSED_DIR=/app/backend/uploads/processed
|
||||
- IMAGES_DIR=/app/backend/uploads/images
|
||||
|
||||
# Export Configuration
|
||||
- STORAGE_DIR=/app/backend/storage
|
||||
- MARKDOWN_DIR=/app/backend/storage/markdown
|
||||
- JSON_DIR=/app/backend/storage/json
|
||||
- EXPORTS_DIR=/app/backend/storage/exports
|
||||
|
||||
# PDF Generation Configuration
|
||||
- PANDOC_PATH=/usr/bin/pandoc
|
||||
- FONT_DIR=/usr/share/fonts
|
||||
- PDF_PAGE_SIZE=${PDF_PAGE_SIZE:-A4}
|
||||
- PDF_MARGIN_TOP=${PDF_MARGIN_TOP:-20}
|
||||
- PDF_MARGIN_BOTTOM=${PDF_MARGIN_BOTTOM:-20}
|
||||
- PDF_MARGIN_LEFT=${PDF_MARGIN_LEFT:-20}
|
||||
- PDF_MARGIN_RIGHT=${PDF_MARGIN_RIGHT:-20}
|
||||
|
||||
# Translation Configuration (Reserved)
|
||||
- ENABLE_TRANSLATION=${ENABLE_TRANSLATION:-false}
|
||||
- TRANSLATION_ENGINE=${TRANSLATION_ENGINE:-offline}
|
||||
- ARGOSTRANSLATE_MODELS_DIR=/app/backend/models/argostranslate
|
||||
|
||||
# Background Tasks Configuration
|
||||
- TASK_QUEUE_TYPE=${TASK_QUEUE_TYPE:-memory}
|
||||
|
||||
# CORS Configuration
|
||||
- CORS_ORIGINS=${CORS_ORIGINS:-http://localhost:12015,http://127.0.0.1:12015}
|
||||
|
||||
# Logging Configuration
|
||||
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||
- LOG_FILE=/app/backend/logs/app.log
|
||||
|
||||
volumes:
|
||||
# Persist data directories
|
||||
- ./data/uploads:/app/backend/uploads
|
||||
- ./data/storage:/app/backend/storage
|
||||
- ./data/models:/app/backend/models
|
||||
- ./data/logs:/app/backend/logs
|
||||
|
||||
networks:
|
||||
- tool_ocr_network
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:12010/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
tool_ocr_network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
uploads:
|
||||
storage:
|
||||
models:
|
||||
logs:
|
||||
Reference in New Issue
Block a user