將 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>
11 KiB
Tool_OCR Docker 部署指南
架構說明
Tool_OCR 使用統一容器架構,將前端和後端封裝在同一個容器中:
┌─────────────────────────────────────┐
│ Container (tool_ocr) │
│ │
│ ┌──────────────────────────────┐ │
│ │ Nginx :12010 (External) │ │
│ │ - Frontend Static Files │ │
│ │ - Reverse Proxy for API │ │
│ └─────────┬────────────────────┘ │
│ │ proxy_pass │
│ ▼ │
│ ┌──────────────────────────────┐ │
│ │ FastAPI :8000 (Internal) │ │
│ │ - OCR Processing │ │
│ │ - File Management │ │
│ │ - Export Services │ │
│ └──────────────────────────────┘ │
│ │
│ Supervisor manages both services │
└─────────────────────────────────────┘
│
│ Port 12010 only!
▼
External Access
優勢
- 單一端口: 只需要暴露一個端口 (12010)
- 簡化部署: 一個容器包含完整應用
- 統一管理: Supervisor 管理所有服務
- 生產就緒: Nginx 提供高性能靜態文件服務和反向代理
快速開始
前置要求
- Docker Engine 20.10+
- Docker Compose 2.0+
- 至少 4GB 可用內存
- 至少 10GB 可用磁碟空間
1. 準備環境配置
複製環境配置範本:
Linux/Mac:
cp .env.docker .env
Windows (PowerShell):
Copy-Item .env.docker .env
編輯 .env 文件,至少修改以下重要配置:
# 修改為安全的密鑰
SECRET_KEY=your-very-secure-random-key-here
# 根據需要調整端口
FRONTEND_PORT=12010
# 根據實際情況配置 CORS
CORS_ORIGINS=http://your-domain.com:12010,http://localhost:12010
2. 創建數據目錄
Linux/Mac:
mkdir -p data/{uploads,storage,models,logs}
Windows (PowerShell):
mkdir -p data/uploads, data/storage, data/models, data/logs
或使用跨平台命令:
mkdir -p data/uploads data/storage data/models data/logs
3. 構建並啟動容器
# 構建映像
docker compose build
# 啟動服務
docker compose up -d
# 查看日誌
docker compose logs -f
注意:舊版本 Docker 使用
docker-compose(帶連字符),新版本使用docker compose(無連字符)。兩者都支持。
4. 驗證部署
Linux/Mac:
# 檢查健康狀態
curl http://localhost:12010/health
# 訪問 API 文檔
open http://localhost:12010/docs
# 訪問前端界面
open http://localhost:12010
Windows (PowerShell):
# 檢查健康狀態
curl http://localhost:12010/health
# 在瀏覽器中打開
Start-Process "http://localhost:12010"
Start-Process "http://localhost:12010/docs"
管理命令
提示:以下命令在 Windows、Linux 和 Mac 上通用。如果您使用舊版 Docker,將
docker compose替換為docker-compose。
查看狀態
# 查看容器狀態
docker compose ps
# 查看實時日誌
docker compose logs -f
# 查看特定服務日誌
docker compose exec tool_ocr tail -f /var/log/nginx/tool_ocr_access.log
docker compose exec tool_ocr tail -f /app/backend/logs/app.log
重啟服務
# 重啟容器
docker compose restart
# 重啟 Nginx (容器內)
docker compose exec tool_ocr supervisorctl restart nginx
# 重啟 Backend (容器內)
docker compose exec tool_ocr supervisorctl restart backend
停止和清理
# 停止服務
docker compose stop
# 停止並移除容器
docker compose down
# 完全清理(包括數據卷)⚠️ 慎用
docker compose down -v
進入容器調試
# 進入容器 shell
docker compose exec tool_ocr bash
# 查看 Supervisor 狀態
docker compose exec tool_ocr supervisorctl status
# 查看進程
docker compose exec tool_ocr ps aux
數據持久化
以下目錄會持久化到主機的 ./data/ 目錄:
| 容器內路徑 | 主機路徑 | 說明 |
|---|---|---|
/app/backend/uploads |
./data/uploads |
上傳文件 |
/app/backend/storage |
./data/storage |
處理結果 |
/app/backend/models |
./data/models |
OCR 模型 |
/app/backend/logs |
./data/logs |
應用日誌 |
備份數據
Linux/Mac:
# 備份所有數據
tar -czf tool_ocr_backup_$(date +%Y%m%d).tar.gz data/
# 只備份重要數據
tar -czf tool_ocr_data_$(date +%Y%m%d).tar.gz data/uploads data/storage
Windows (PowerShell):
# 備份所有數據(需要安裝 7-Zip 或使用 Compress-Archive)
$date = Get-Date -Format "yyyyMMdd"
Compress-Archive -Path data -DestinationPath "tool_ocr_backup_$date.zip"
# 只備份重要數據
Compress-Archive -Path data/uploads, data/storage -DestinationPath "tool_ocr_data_$date.zip"
恢復數據
Linux/Mac:
# 停止容器
docker compose stop
# 恢復數據
tar -xzf tool_ocr_backup_20250113.tar.gz
# 啟動容器
docker compose up -d
Windows (PowerShell):
# 停止容器
docker compose stop
# 恢復數據
Expand-Archive -Path tool_ocr_backup_20250113.zip -DestinationPath . -Force
# 啟動容器
docker compose up -d
1Panel 部署指南
1. 準備項目文件
在 1Panel 的應用目錄中創建項目:
cd /opt/1panel/apps
mkdir -p tool_ocr
cd tool_ocr
# 上傳項目文件
# - Dockerfile
# - docker-compose.yml
# - docker/ 目錄
# - backend/ 目錄
# - frontend/ 目錄
# - requirements.txt
# - .env
2. 在 1Panel 中創建應用
- 登入 1Panel 管理面板
- 進入「應用商店」→「自定義應用」
- 選擇「Docker Compose」
- 上傳或粘貼
docker-compose.yml內容 - 配置環境變量
- 點擊「創建」
3. 配置反向代理(可選)
如果需要通過域名訪問:
- 在 1Panel 中創建網站
- 配置反向代理:
- 目標地址:
http://127.0.0.1:12010 - 啟用 WebSocket 支援(如需要)
- 目標地址:
4. 配置 SSL 證書(可選)
- 在 1Panel 網站設置中
- 申請或上傳 SSL 證書
- 啟用 HTTPS
更新部署
更新代碼
# 停止容器
docker compose stop
# 拉取最新代碼
git pull
# 重新構建映像
docker compose build --no-cache
# 啟動容器
docker compose up -d
# 查看日誌確認啟動成功
docker compose logs -f
數據庫遷移
如果有數據庫結構變更:
# 進入容器
docker compose exec tool_ocr bash
# 運行遷移
cd /app/backend
alembic upgrade head
# 退出容器
exit
故障排除
1. 容器無法啟動
# 查看詳細錯誤
docker compose logs
檢查端口占用:
Linux/Mac:
netstat -tuln | grep 12010
# 或
lsof -i :12010
Windows (PowerShell):
netstat -ano | findstr 12010
# 或
Get-NetTCPConnection -LocalPort 12010
檢查磁碟空間:
Linux/Mac:
df -h
Windows (PowerShell):
Get-PSDrive
2. Nginx 無法啟動
# 檢查 Nginx 配置語法
docker compose exec tool_ocr nginx -t
# 查看 Nginx 錯誤日誌
docker compose exec tool_ocr cat /var/log/nginx/error.log
3. Backend API 無法訪問
# 檢查 Backend 是否運行
docker compose exec tool_ocr supervisorctl status backend
# 查看 Backend 日誌
docker compose exec tool_ocr cat /app/backend/logs/app.log
# 重啟 Backend
docker compose exec tool_ocr supervisorctl restart backend
4. 數據庫連接失敗
# 測試數據庫連接
docker compose exec tool_ocr python -c "
from app.core.database import engine
try:
with engine.connect() as conn:
print('Database connection successful!')
except Exception as e:
print(f'Database connection failed: {e}')
"
5. OCR 處理失敗
# 檢查 PaddleOCR 模型
docker compose exec tool_ocr ls -la /app/backend/models/paddleocr/
# 測試 OCR 功能
docker compose exec tool_ocr python -c "
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang='ch')
print('PaddleOCR initialized successfully!')
"
6. 前端頁面無法訪問
# 檢查前端文件是否存在
docker compose exec tool_ocr ls -la /app/frontend/dist/
# 檢查 Nginx 配置
docker compose exec tool_ocr cat /etc/nginx/conf.d/default.conf
性能優化
1. 調整 OCR 工作進程數
根據 CPU 核心數調整:
# 在 .env 中設置
MAX_OCR_WORKERS=8 # 建議設置為 CPU 核心數
2. 調整 Nginx Worker 進程數
編輯 docker/nginx.conf:
worker_processes auto; # 自動根據 CPU 核心數
3. 優化 Upload 大小限制
根據實際需求調整:
# 在 .env 中設置(以字節為單位)
MAX_UPLOAD_SIZE=104857600 # 100MB
同時修改 docker/nginx.conf:
client_max_body_size 100M;
監控和日誌
日誌位置
| 服務 | 容器內路徑 | 主機路徑 |
|---|---|---|
| Nginx Access | /var/log/nginx/tool_ocr_access.log |
- |
| Nginx Error | /var/log/nginx/tool_ocr_error.log |
- |
| Backend | /app/backend/logs/app.log |
./data/logs/app.log |
| Supervisor | /var/log/supervisor/supervisord.log |
- |
日誌輪轉
建議配置日誌輪轉以防止日誌文件過大:
# 創建 logrotate 配置(主機上)
cat > /etc/logrotate.d/tool_ocr << 'EOF'
/path/to/tool_ocr/data/logs/*.log {
daily
rotate 7
compress
delaycompress
notifempty
create 0644 root root
}
EOF
安全建議
- 修改默認密鑰: 務必修改
.env中的SECRET_KEY - 使用 HTTPS: 在生產環境中啟用 SSL/TLS
- 限制 CORS: 只允許可信的來源
- 定期更新: 及時更新 Docker 映像和依賴
- 備份數據: 定期備份重要數據
- 監控日誌: 定期檢查日誌中的異常活動
常見問題
Q: 如何修改對外端口?
A: 修改 .env 中的 FRONTEND_PORT 和 docker-compose.yml 中的端口映射。
Q: 如何增加上傳文件大小限制?
A: 修改 .env 中的 MAX_UPLOAD_SIZE 和 docker/nginx.conf 中的 client_max_body_size。
Q: 如何連接外部 MySQL 數據庫?
A: 在 .env 中配置正確的數據庫連接信息。
Q: 如何查看詳細的錯誤信息?
A: 設置 .env 中的 LOG_LEVEL=DEBUG 並重啟容器。
聯繫支援
如果遇到問題,請:
- 查看日誌:
docker-compose logs -f - 檢查配置: 確認
.env文件正確 - 查看文檔: 參考本文檔的故障排除部分
- 提交 Issue: 在項目倉庫提交問題報告