30核心 CPU 推論系統 - FastAPI + Next.js + PostgreSQL + ONNX Runtime
前端專案: exoplanet-spaceapps/frontend-test.git
CSV/DAT 檔案分析 - 完整的 TDD 開發
# 部署前端專案(自動化腳本)
sudo ./scripts/deploy_frontend.sh
# 啟動後端服務
make up
# 訪問服務
# Frontend: https://your-domain.com
# API Docs: https://your-domain.com/api/docs
# Grafana: https://monitoring.your-domain.com| 資料庫 | 用途 | 配置 |
|---|---|---|
| PostgreSQL 15 | 主資料庫(datasets, jobs, reports, audits) | 16GB RAM, 10 連線池 |
| Redis 7 | 快取 + 任務佇列 | 4GB RAM, 50 連線池 |
| MinIO | S3 相容物件儲存(CSV/DAT/PDF) | 4GB RAM, 版本控制 |
完整資料庫策略: docs/DATABASE_STRATEGY.md
Gunicorn Workers: 4 cores (API 請求處理)
ONNX Runtime (intra): 24 cores (AI 推論運算)
ONNX Runtime (inter): 2 cores (算子並行)
PostgreSQL: 2 cores (資料庫)
System + Monitor: 2 cores (OS + 監控)
詳細資源分配: docs/FRONTEND_INTEGRATION_GUIDE.md
backend/
├── app/
│ ├── backend/ # FastAPI 後端
│ │ ├── src/
│ │ │ ├── api/ # API 路由
│ │ │ ├── db/ # 資料庫模型
│ │ │ ├── inference/ # ONNX Runtime
│ │ │ ├── uploads/ # 檔案上傳
│ │ │ └── observability/# 監控
│ │ └── tests/ # pytest 測試
│ ├── web/ # Next.js 前端(已實作)
│ └── shared/ # 共享 schemas
├── deploy/
│ ├── docker-compose.dev.yml # 開發環境
│ ├── nginx/ # Nginx 配置
│ ├── postgres/ # DB 初始化
│ └── monitoring/ # Prometheus + Grafana
├── docs/ # 完整文件
│ ├── DATABASE_STRATEGY.md # 資料庫策略 ⭐
│ ├── FRONTEND_INTEGRATION_GUIDE.md # 前端整合 ⭐
│ └── DEPLOYMENT_SUMMARY.md # 部署總結
└── scripts/
└── deploy_frontend.sh # 一鍵部署腳本 ⭐
sequenceDiagram
Frontend->>API: 1. 請求預先簽名 URL
API->>MinIO: 2. 生成 15 分鐘短效 URL
MinIO-->>API: 3. 回傳簽名 URL
API-->>Frontend: 4. 回傳 URL + checksum
Frontend->>MinIO: 5. 直接上傳檔案(不經過 API)
Frontend->>API: 6. 通知上傳完成
API->>PostgreSQL: 7. 記錄 metadata
API->>Redis: 8. 入列預處理任務
1. 選擇已上傳的 CSV/DAT 檔案
2. 配置超參數(threshold, max_candidates, temperature)
3. 提交推論作業 → Redis 佇列
4. ONNX Runtime 執行(24核心並行)
5. 生成 PDF 報告(含 manifest)
6. 通知前端完成
- Python 3.11+
- Node.js 20+
- Docker & Docker Compose
- PostgreSQL 15
- Redis 7
- MinIO (S3-compatible)
# 1. 安裝依賴
make install
# 2. 設定環境變數
cp app/backend/.env.example app/backend/.env
cp app/web/.env.example app/web/.env.local
# 3. 啟動所有服務
make up
# 4. 執行測試
make test
# 5. 訪問服務
# API: http://localhost:8000/docs
# Frontend: http://localhost:3000- Backend: 80%+ (pytest)
- Frontend: 40 個 E2E 測試 (Playwright)
- Integration: k6 負載測試
# 後端單元測試
cd app/backend
poetry run pytest -v --cov=src
# 前端 E2E 測試
cd app/web
npm run test:e2e
# 負載測試
./scripts/load_test.sh- API 儀表板: 請求率、錯誤率、P95/P99 延遲
- 系統儀表板: 30核心 CPU、記憶體、磁碟 I/O
- 推論儀表板: 吞吐量、批次大小、NUMA 平衡
- API 錯誤率 >5%
- CPU 使用率 >95%
- 記憶體使用 >95%
- 磁碟空間 <10%
啟動監控:
cd deploy/monitoring
docker-compose -f docker-compose.monitoring.yml up -d
# 訪問 Grafana: http://localhost:3001 (admin/admin)- Clone frontend-test.git 至 /var/www/frontend-test
- 設定 .env.production
- npm run build
- Nginx 配置指向 dist/ 目錄
- 測試前端載入
- 啟動 PostgreSQL + Redis + MinIO
- 執行資料庫遷移
- 上傳 ONNX 模型
- 啟動 FastAPI
- 測試 API /health
- 前端連接 API 成功
- 上傳 CSV 成功
- 推論執行成功
- 報告生成成功
| 文件 | 說明 |
|---|---|
| DATABASE_STRATEGY.md | 資料庫選型與資源分配 ⭐ |
| FRONTEND_INTEGRATION_GUIDE.md | 前端整合完整指南 ⭐ |
| DEPLOYMENT_SUMMARY.md | 部署總結與檢查清單 |
| PRESIGN_API.md | 上傳 API 規格 |
| observability-implementation.md | 監控實作 |
- ✅ TLS/HTTPS 強制加密
- ✅ HSTS + 安全標頭
- ✅ 檔案上傳白名單(CSV/DAT/JSON)
- ✅ 預先簽名 URL(15分鐘短效)
- ✅ SHA256 校驗碼驗證
- ✅ 路徑遍歷防護
- ✅ 審計日誌(所有操作)
- ⏳ JWT/OIDC 認證(待整合)
- ⏳ 速率限制(待配置)
| 配置 | 吞吐量 | P95 延遲 |
|---|---|---|
| 保守 | ~50 req/s | <500ms |
| 平衡 ⭐ | ~80 req/s | <800ms |
| 激進 | ~120 req/s | <1200ms |
| 檔案大小 | 預處理 | 推論 | 總時間 |
|---|---|---|---|
| 1MB | ~1s | ~2s | ~3s |
| 10MB | ~3s | ~5s | ~8s |
| 100MB | ~10s | ~15s | ~25s |
| 1GB | ~30s | ~60s | ~90s |
| 5GB (max) | ~120s | ~300s | ~420s |
- Fork 專案
- 創建 feature branch (
git checkout -b feature/AmazingFeature) - 執行測試 (
make test) - Commit (
git commit -m 'Add AmazingFeature') - Push (
git push origin feature/AmazingFeature) - 開啟 Pull Request
MIT License
- NASA Space Apps Challenge - 專案靈感
- ONNX Runtime - CPU 優化推論引擎
- FastAPI - 現代 Python Web 框架
- Next.js - React 生產級框架
專案狀態: ✅ 生產就緒
最後更新: 2025-10-05
維護者: AI Team