這張清單屬於「上線部署」階段。 產品本身已於上線前完成(見「上線前完成報告」的 Go 判定);本清單只在你要開始部署時使用,現在不必處理。
一句話結論: 程式、資料、文件都已就緒,上線前檢查顯示 0 項擋上線、6 項待補;其中只有 2 件事真的需要你出手——選一台主機加一個網域,以及(可選)提供 API 金鑰。其餘都是設定動作,我可以代跑與驗證。
npm run backup:remote),只要一組權杖data/ 直接同步到雲端硬碟。那是執行中的 SQLite(WAL 模式),同步到寫入一半的檔案會損壞。
只同步 backups/——npm run backup 會先做 WAL checkpoint 再產出一致的快照,這才是可以上傳的檔案。
| # | 你要做什麼 | 做完交給我什麼 | 我拿到後會做什麼、如何驗證 |
|---|---|---|---|
| 1 | 選一個平台(Fly.io/Render/Railway/VPS 皆可)並準備一個網域 | 平台名稱、網域(例如 mapsync.example.com)、以及該平台的登入方式或 API Token | 用 deploy/Dockerfile 建映像、掛持久化磁碟、設環境變數、以 Caddy 自動簽 TLS;部署後跑 npm run preflight -- --base https://<你的網域> 與 npm run smoke,把逐項結果貼給你 |
| 2 | 產生一組管理權杖 | 直接把權杖貼給我,或自己設進平台環境變數 MAPSYNC_ADMIN_TOKEN | 我把它設進環境變數並確認 /admin 可登入、未授權回 401 |
| 3 | (可選)申請 LLM 金鑰(OpenAI 或任何相容 API) | MAPSYNC_LLM_KEY(+可選 MAPSYNC_LLM_ENDPOINT/MAPSYNC_LLM_MODEL) | 設好後我重跑 npm run test:ai,確認引擎由 heuristic-v1 變 llm,並拿你的真實貼文抽樣比對準確率 |
| 4 | (可選)申請 Google Places API 金鑰 | MAPSYNC_PLACES_KEY | 設好後我確認圖釘寫入 place_id 與 geo_source=google-places,並量測多少比例的圖釘能取得精準座標 |
| 5 | (可選)指定告警要送到哪 | 通知管道(Email/Slack/LINE/Telegram…) | 把 npm run monitor 或平台內建健康檢查接上該管道,並實測一次告警 |
| 6 | (可選)指定備份要上傳到哪 | 選一個:① Google 雲端硬碟(提供一組 Drive 權杖,或在你主機裝好 rclone remote)② S3 相容儲存 ③ 只要本機備份 | 設定每日 <code>npm run backup</code> + <code>npm run backup:remote</code>,並實測一次上傳與一次還原 |
第 1、2 項是上線的必要條件;第 3~6 項不影響能否上線,只影響解析準確率與維運順手程度。
第 ⑥ 項的 Google 雲端硬碟屬於「可用的備份目的地」,詳細比較見上一節。
| 分級 | 項目 | 目前狀況 |
|---|---|---|
| <span class="rich-badge ok">通過</span> | Node 版本 ≥ 22.5 | v22.22.0 |
| <span class="rich-badge ok">通過</span> | 資料目錄存在且可寫 | 專案內 data/ |
| <span class="rich-badge ok">通過</span> | 資料庫檔案存在 | 112 KB |
| <span class="rich-badge ok">通過</span> | 已有備份 | 2 份 |
| <span class="rich-badge ok">通過</span> | 健康檢查 / 就緒探針 | 皆 HTTP 200 |
| <span class="rich-badge ok">通過</span> | PWA 分享目標已宣告 | action=/share |
| <span class="rich-badge ok">通過</span> | Service Worker 可取得 | HTTP 200 |
| <span class="rich-badge ok">通過</span> | 部署版本一致 | 0.10.0 = 0.10.0 |
| <span class="rich-badge ok">通過</span> | 可連線 Google Places API | DNS/TLS 正常 |
| <span class="rich-badge ok">通過</span> | 可連線 LLM API | DNS/TLS 正常 |
| <span class="rich-badge warn">待補</span> | 資料目錄指向持久化位置 | 目前是預設 ./data,雲端請指向掛載磁碟 |
| <span class="rich-badge warn">待補</span> | 管理後台權杖 | 目前為自動產生,建議改用環境變數固定 |
| <span class="rich-badge warn">待補</span> | NODE_ENV=production | 該次檢查的 shell 未設定(服務本身已以 production 執行) |
| <span class="rich-badge warn">待補</span> | 對外網域 | 未設定 MAPSYNC_PUBLIC_URL/DOMAIN → 第 1 項 |
| <span class="rich-badge warn">待補</span> | LLM 金鑰 | 未設定 → 第 3 項(可選) |
| <span class="rich-badge warn">待補</span> | Google Places 金鑰 | 未設定 → 第 4 項(可選) |
判讀方式:「擋上線」0 項=程式本身沒有缺口;6 項待補全部是環境設定與金鑰,對應上面第 2 節的六個行動。
deploy/Dockerfile、docker-compose.yml、Caddyfile(自動 HTTPS)、mapsync.service(systemd 常駐)。npm test(30 項)、npm run test:ai(21 項)、npm run smoke(16 項)、npm run preflight、npm run monitor。npm run backup/--restore(已實際演練 10→9 筆)、遠端備份 npm run backup:remote(Drive 上傳與失敗路徑已驗證 9 項)、程式碼版本錨點 v0.9.0/v0.10.0/v0.10.1。/docs/)。只要給我第 1 與第 2 項,我就能把服務推上正式環境並留下可查驗的部署紀錄與驗收輸出。