# visionA — stage 環境 docker-compose # # 使用情境: # - 此檔放在 stage host:/opt/visiona/docker-compose.stage.yml(或由 deploy-stage.sh 從 dev 機透過 DOCKER_HOST 直接執行,--project-directory 指向 dev repo root 也可) # - .env.stage 同目錄(不進 git,由人工放上去) # - image 由 deploy-stage.sh 透過 docker save | DOCKER_HOST docker load 直接打進 stage docker daemon # (沒有 registry pull — 公司 internal registry 開了 auth 暫不採用;見 deploy-stage.sh "SAVE_LOAD" 區塊) # # 部署流程: # 1. 開發機跑 scripts/deploy-stage.sh # → buildx --load 進本機 daemon # → docker save | gzip | DOCKER_HOST=tcp://... docker load # 2. docker compose -f docker-compose.stage.yml up -d(透過 DOCKER_HOST 在 stage 上執行) # # Container 對外只開 :9527 → 容器內 nginx :80。 # 公司 host nginx 在外層 termination HTTPS(stage-9527.innovedus.com:9527 LE 證書)。 services: visiona: # local image(save/load 模式)— 不帶 registry prefix,docker compose 不會試著去 pull image: visiona:stage pull_policy: never container_name: visiona restart: unless-stopped # 公司 host nginx 期望 upstream 是 host:9527 → 這裡 host port 必須是 9527 ports: - "0.0.0.0:9527:80" env_file: - .env.stage # local-fs 雛形儲存:用 named volume(不用 bind mount) # 為什麼不用 bind mount /opt/visiona/data: # - compose 從 dev 機透過 DOCKER_HOST 執行,相對路徑會解成 dev 機路徑 # - stage docker daemon 在 host root 沒 mkdir 權限(試過 bind /opt/visiona 失敗) # named volume 由 docker 自己管,存在 stage host 的 docker volume 區(通常 /var/lib/docker/volumes/) # 升級到 S3 backend 後可拿掉 volumes: - visiona-data:/data # 直接讓 container healthcheck 接管(Dockerfile 已定義 /healthz 探測) # 這裡不重複 healthcheck,但補 logging driver 限制磁碟用量 logging: driver: json-file options: max-size: "50m" max-file: "5" # 注意:不掛 /etc/localtime(公司 stage host 與 container 都用 UTC) # 如需指定時區,改用 env TZ=Asia/Taipei(Dockerfile 已裝 tzdata) # top-level named volume — 對應 service 的 visiona-data 引用 volumes: visiona-data: driver: local