# 巡樓部署(Docker 一鍵啟動) 整套系統用單一 `docker compose` 拉起,對外只開前端 `:80`。 ``` 瀏覽器 → web(nginx :80) ├─ 前端靜態檔(vite build) └─ /api 反代 → gateway:8890 gateway / worker(Go)─┐ node-worker(playwright)┤→ Mongo / Redis(同網路,不對外) ``` | 容器 | 角色 | |------|------| | `mongo` / `redis` | 資料層(只綁 `127.0.0.1`,volume 持久化) | | `init` | run-once:建索引 / 權限 / 第一個 admin(冪等,跑完即退) | | `gateway` | API + scheduler + reaper(:8890,僅內網) | | `worker` | Go job worker | | `node-worker` | playwright style-8d | | `web` | nginx,serve 前端 + 反代 `/api` | ## 一鍵啟動 ```bash cp deploy/.env.example deploy/.env # 填密碼與 secret make up # = docker compose up -d --build ``` 啟動順序由 `depends_on` + healthcheck 保證:Mongo/Redis 健康 → `init` 跑完 → `gateway`/`worker` 起來 → `gateway` 健康 → `node-worker`/`web` 起來。 ## 常用指令 ```bash make ps # 狀態 make logs # 全部日誌 make logs-gateway # 只看 gateway make down # 停(保留資料) make down-clean # 停並清空 Mongo/Redis volume make rebuild # 無快取重建並重啟 make init # 重跑一次 DB 初始化 ``` ## 健康檢查 ```bash curl http://localhost/api/v1/health ``` ## 產生 secret ```bash openssl rand -base64 48 # JWT access / refresh / worker secret openssl rand -base64 32 # HAIXUN_SECRETS_KEY(機敏資料落地加密) ``` ## 注意事項 - `deploy/.env` 內含 secret,不要 commit。 - `MONGO_ROOT_PASSWORD` 建議只用英數字;含 `@ : / $` 等字元時,compose 內的 `HAIXUN_MONGO_URI` 需自行 URL-encode。 - 全系統時間 UTC+0(容器 `TZ=UTC`)。 - 本機開發(不全容器化)見根目錄 `make dev`。