根本原因: 1. 憑證過期時瀏覽器只回 Failed to fetch,前端無法辨識原因,使用者誤以為是 DB 連不上(本次 7/1 憑證過期即是如此)。 2. 歷史戰績一次撈出全部資料(400+ 筆、逾 100KB),筆數持續成長會越來越慢。 影響:所有 API 的連線錯誤訊息、歷史戰績頁載入速度、Docker 憑證掛載路徑與檔名。 修法: - 後端讀取 cert.pem 到期日(60 秒快取),由 /api/version 與 /api/health 回傳 certNotAfter - 前端把到期日存進 localStorage;fetch 失敗時依離線、憑證已過期、其他連線問題分別顯示明確訊息 - 憑證到期前 7 天於頁面跳出「SSL 憑證提醒」通知,可手動關閉 - /api/history 支援 page/pageSize(預設 20 筆、上限 100),回傳 total 與 totalPages - 歷史戰績頁加入分頁控制列(上一頁/頁碼含省略號/下一頁/總筆數),刪除後自動重新載入並修正超出範圍的頁碼 - 憑證掛載目錄改為 /volume1/docker/certs,檔名改為 cert.pem / chain.pem / privkey.pem,app 容器同步掛載以讀取到期日 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
47 lines
1.4 KiB
YAML
47 lines
1.4 KiB
YAML
services:
|
|
badminton-scoreboard:
|
|
container_name: badminton-scoreboard
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: badminton-scoreboard:latest
|
|
restart: unless-stopped
|
|
expose:
|
|
- "8788"
|
|
environment:
|
|
PORT: 8788
|
|
DB_HOST: ${DB_HOST:-192.168.0.15}
|
|
DB_PORT: ${DB_PORT:-3307}
|
|
DB_USER: ${DB_USER:-jianmiau}
|
|
DB_PASSWORD: ${DB_PASSWORD}
|
|
DB_DATABASE: ${DB_DATABASE:-badminton}
|
|
DB_TABLE: ${DB_TABLE:-badminton}
|
|
DB_HISTORY_TABLE: ${DB_HISTORY_TABLE:-history}
|
|
SSL_CERT_DIR: /certs
|
|
SSL_CERT_FILE_NAME: ${SSL_CERT_FILE_NAME:-cert.pem}
|
|
volumes:
|
|
- /volume1/docker/certs:/certs:ro
|
|
|
|
badminton-scoreboard-web:
|
|
container_name: badminton-scoreboard-web
|
|
build:
|
|
context: .
|
|
dockerfile: docker/nginx/Dockerfile
|
|
image: badminton-scoreboard-web:latest
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- badminton-scoreboard
|
|
ports:
|
|
- "3501:3501"
|
|
environment:
|
|
NGINX_PORT: 3501
|
|
NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_}
|
|
SSL_CERT_DIR: /etc/nginx/certs
|
|
SSL_CERT_FILE_NAME: ${SSL_CERT_FILE_NAME:-cert.pem}
|
|
SSL_CHAIN_FILE_NAME: ${SSL_CHAIN_FILE_NAME:-chain.pem}
|
|
SSL_KEY_FILE_NAME: ${SSL_KEY_FILE_NAME:-privkey.pem}
|
|
UPSTREAM_HOST: badminton-scoreboard
|
|
UPSTREAM_PORT: 8788
|
|
volumes:
|
|
- /volume1/docker/certs:/etc/nginx/certs:ro
|