咻揪趣 MVP · v0.19.0
交接行動 · 文件 上線待辦與協助清單 · 產生於 2026-09-22 15:45

上線待辦與協助清單

產生時間:2026-09-21 · 對應版本:v0.11.0 · 依據:npm run preflight 實跑結果

這張清單屬於「上線部署」階段。 產品本身已於上線前完成(見「上線前完成報告」的 Go 判定);本清單只在你要開始部署時使用,現在不必處理。

一句話結論: 程式、資料、文件都已就緒,上線前檢查顯示 0 項擋上線、6 項待補;其中只有 2 件事真的需要你出手——選一台主機加一個網域,以及(可選)提供 API 金鑰。其餘都是設定動作,我可以代跑與驗證。

1. 只有你能做的兩件事

項目
為什麼非你不可
決定主機平台+網域
涉及你的帳號、付款方式與 DNS 控制權。沒有這兩項就無法對外提供服務,Web Share Target 也需要 HTTPS 才會生效。
API 金鑰(可選)
屬於你的帳號與額度。不給也能上線(內建規則引擎+地標辭典可運作),只是解析覆蓋率較低。

2. Google One(Google 雲端硬碟)能不能用?

用途
能不能用 Google One
當作 App 的主機
不行。Google One 只提供儲存空間(Google 雲端硬碟+Gmail+相簿共用,15 GB 起、100 GB 月租 65 元起),沒有可執行程序的運算環境、無法常駐服務、也不能綁你的網域提供 HTTPS。
存放資料庫備份
可以。三條路都能走,本專案已支援第二條:
rclone Linux VPS 最省事,單一執行檔、token 授權
Drive API 程式內建(npm run backup:remote),只要一組權杖
桌面同步 本機最簡單,把備份目錄指到同步資料夾
當作網域
不行。Google One 不含網域。網域要另外買(Cloudflare/Namecheap/Squarespace 皆可,年費約數百元)。
如果想把服務也留在 Google 生态圈
  • Cloud Run:直接跑我們的容器映像,自動 HTTPS、有免費額度,適合快速上線;持久化請掛磁碟或配合 Cloud Storage。
  • Compute Engine e2-micro:特定區域有永久免費額度,等於一台小型 Linux 主機,適合本專案的 SQLite 單機形態。
  • 網域:可使用 Google Cloud 的 Cloud Domains,或任何外部註冊商。
  • 一個容易踩的坑
    不要把 data/ 直接同步到雲端硬碟。那是執行中的 SQLite(WAL 模式),同步到寫入一半的檔案會損壞。 只同步 backups/——npm run backup 會先做 WAL checkpoint 再產出一致的快照,這才是可以上傳的檔案。

    3. 逐項行動表

    #你要做什麼做完交給我什麼我拿到後會做什麼、如何驗證
    1選一個平台(Fly.io/Render/Railway/VPS 皆可)並準備一個網域平台名稱、網域(例如 mapsync.example.com)、以及該平台的登入方式或 API Tokendeploy/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_ENDPOINTMAPSYNC_LLM_MODEL設好後我重跑 npm run test:ai,確認引擎由 heuristic-v1llm,並拿你的真實貼文抽樣比對準確率
    4(可選)申請 Google Places API 金鑰MAPSYNC_PLACES_KEY設好後我確認圖釘寫入 place_idgeo_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 雲端硬碟屬於「可用的備份目的地」,詳細比較見上一節。

    4. 最小上線路徑(三步)

    1
    你:給平台與網域(+一組權杖)
    只要這一句話,例如「用 Fly.io,網域 mapsync.example.com」。平台登入方式或 API Token 一併給我,我才代操作。
    2
    我:部署並自我驗證
    建映像 → 掛磁碟 → 設環境變數 → 起服務 → 跑 preflight/smoke/monitor,把每一項的實際輸出交給你;有失敗我直接修到過。
    3
    你:驗收一次真實流程
    用手機開網址 → 加入主畫面 → 從 IG 分享一則貼文進來 → 確認圖釘落地、後台查得到。這是唯一需要你動手的驗收動作。

    5. 目前狀態(preflight 實跑結果)

    分級項目目前狀況
    <span class="rich-badge ok">通過</span>Node 版本 ≥ 22.5v22.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 APIDNS/TLS 正常
    <span class="rich-badge ok">通過</span>可連線 LLM APIDNS/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_URLDOMAIN第 1 項
    <span class="rich-badge warn">待補</span>LLM 金鑰未設定 → 第 3 項(可選)
    <span class="rich-badge warn">待補</span>Google Places 金鑰未設定 → 第 4 項(可選)

    判讀方式:「擋上線」0 項=程式本身沒有缺口;6 項待補全部是環境設定與金鑰,對應上面第 2 節的六個行動。

    6. 不需要你動手的事(已備妥)

  • 部署腳本與設定:deploy/Dockerfiledocker-compose.ymlCaddyfile(自動 HTTPS)、mapsync.service(systemd 常駐)。
  • 驗證工具:npm test(30 項)、npm run test:ai(21 項)、npm run smoke(16 項)、npm run preflightnpm run monitor
  • 回復手段:npm run backup--restore(已實際演練 10→9 筆)、遠端備份 npm run backup:remote(Drive 上傳與失敗路徑已驗證 9 項)、程式碼版本錨點 v0.9.0v0.10.0v0.10.1
  • 文件:範圍定義、部署與回滾、驗收證據、里程碑看板、交接手冊(皆在 /docs/)。
  • 只要給我第 1 與第 2 項,我就能把服務推上正式環境並留下可查驗的部署紀錄與驗收輸出。