離線部署 docker image#

以下是 frontend + backend 的離線部署流程。假設建置機有外網、部署機為一般 Linux x86_64。

1. 有外網的建置機:建立 image#

在專案根目錄執行(版本號可自行替換):

export RELEASE_TAG=20260804

Frontend:

cd tams-frontend

docker buildx build \
  --platform linux/amd64 \
  --load \
  -t tams-frontend:${RELEASE_TAG} \
  -t tams-frontend:latest \
  --build-arg VITE_WS_URL=same-origin \
  --build-arg VITE_API_URL=/api/v1 \
  --build-arg VITE_LIDAR_MODE=real \
  --build-arg VITE_LIDAR_TEST_ROBOT=true \
  --build-arg VITE_HOSPITAL_INITIAL_RELEASE=true \
  --build-arg VITE_LOW_BATTERY_THRESHOLD_MIN=20 \
  .

Backend:

cd ../tams-backend-service

docker buildx build \
  --platform linux/amd64 \
  --target production \
  --load \
  -t tams-backend:${RELEASE_TAG} \
  -t tams-backend:production \
  .

VITE_API_URL=/api/v1 會編譯進 frontend bundle,因此瀏覽器會對前端同源 /api/v1/... 發請求,再由 Nginx 轉送至 backend。

2. 匯出離線安裝檔#

回到專案根目錄:

cd ..

docker save -o polymed-frontend-backend-${RELEASE_TAG}-amd64.tar \
  tams-frontend:${RELEASE_TAG} \
  tams-frontend:latest \
  tams-backend:${RELEASE_TAG} \
  tams-backend:production

shasum -a 256 polymed-frontend-backend-${RELEASE_TAG}-amd64.tar \
  > polymed-frontend-backend-${RELEASE_TAG}-amd64.tar.sha256

將以下檔案帶到部署機:

  • polymed-frontend-backend-20260804-amd64.tar
  • polymed-frontend-backend-20260804-amd64.tar.sha256
  • 專案的 Compose 設定與 production.env

不要把帳密寫進 Docker image;Mongo、Redis、RMF 的連線資訊應保留在部署機的 production.env

3. 無外網的部署機:匯入與啟動#

shasum -a 256 -c polymed-frontend-backend-20260804-amd64.tar.sha256
docker load -i polymed-frontend-backend-20260804-amd64.tar

docker image ls tams-frontend
docker image ls tams-backend

啟動 frontend、backend 與 backend 所依賴的 Redis:

cd /path/to/polyMedX

docker compose --env-file production.env -f docker-compose.prod.yml \
  up -d frontend backend

不要在內網部署機執行:

make prod-up-build

因為它會重新 build,缺少外網時會無法取得 Node、APT 與 Yarn 依賴。

4. Compose 是否需修改#

不需要。現有設定預期:

tams-frontend:latest
tams-backend:production

上面的 build 已經同時建立這兩個相容 tag。

5. 其他離線 image 注意事項#

backend 依賴 redis:7.2-alpine。若部署機尚未有它,也要在建置機另行匯出、部署機載入:

docker pull redis:7.2-alpine
docker save -o redis-7.2-alpine.tar redis:7.2-alpine

若部署時使用 --profile local-mongodb,還需要:

docker pull mongo:8.0.4-noble
docker save -o mongo-8.0.4-noble.tar mongo:8.0.4-noble

若改為執行 make prod-up 啟動整個系統,RMF、Loki、Grafana 等所有服務的 image 也必須先一併帶入。