離線部署 docker image#
以下是 frontend + backend 的離線部署流程。假設建置機有外網、部署機為一般 Linux x86_64。
1. 有外網的建置機:建立 image#
在專案根目錄執行(版本號可自行替換):
export RELEASE_TAG=20260804Frontend:
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.tarpolymed-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 也必須先一併帶入。