整合路線圖 · 2026-08-17 · ← 主規劃:五個目的地,三條戰線 · 檢核清單 →

一次只開一個工地

從 19 個站台到「5 目的地+PBX」的執行順序(kn 與 delivery 由行動入口取代後退役)。 排序只有兩條原則:零風險搬移隨時可並行;重建型工地全域同時只能一個。 每個階段的依據與細節在主規劃,這頁只回答「先做什麼、再做什麼」。

階段0–5+尾聲
重建型工地3 個
同時進行≤ 1
終態存活6 部署
維護軌(可並行) 0 清場 1 權限與地基 隔離死區、讀者搬遷、快贏——持續小步 重建軌(排隊,同時 ≤1) 2 ERP 新殼+基礎資料 3 對外站 strangler 4 估奶與配送搬遷 5 對內站+行動入口 尾聲:業務異動核(最後單獨動)
總覽上軌是設定與搬移(零業務風險,隨時插隊);下軌是三個重建型工地,嚴格排隊。階段 3 與 4 可對調——照圖走拿到的是「錢流去重」的最大價值優先。

現況流量(2026-08-17 實測)

歸屬與排序的決策依據。左表=各站 vhost log 日均(近 14–19 天,含 bot);右表=salary 內部模組(DB 統計 90/30 天,僅 .php 頁)。

各專案日均請求
專案日均備註
erp.kng.tw(443+8888)25,900內勤主戰場
call.kng.tw 電訪8,300外勤大戶
salary 系(8901+外網)8,800DB 30 天推算
www.kngoatmilk.com8,500bot 佔比高
forms8,400
invoice5,900
sales.kng.tw 業務4,400外勤第二大戶
delivery3,900
shop3,600
inventory3,500
line.kngoatmilk.com3,300
kn.kng.tw 配送員3,000
cf 簡訊549
crm.kng.tw385幾乎全是貼圖資產(A5 收斂中)
report(內網)139
flux · sys · ny26 · pbx 外網≈0
salary 模組(90 天/近 30 天 hits)
模組90 天30 天
line_chat 客服對話601,778188,311
(root) 散頁 ×253183,79151,441
monitor(輪詢已停)170,212566
api34,36111,462
group 團戶12,9664,486
sms_management9,7263,196
ajax8,2091,403
capital 學校1,792615
hitachi · birthday_care · toy_bonus · pick · cockpit各百級
goat_milk_order 訂奶2,3163
sales(舊模組)· driver · call_transcript<150≈0

⚠️ 判讀注意:line_chat 含 SSE 輪詢灌水;sales.kng.tw 與 call.kng.tw 的真流量走自己的 vhost(DB 統計沒接到); Laravel 站路由被 .php 過濾摺疊——盲區修理已列入階段 0。紅線=歸屬判定時的重點對象(瀕死或收斂中)。 互動瀏覽:page_access_stats.php

階段 0 清場 零風險搬移 本週可完成
94 /var/www(現況) 正式業務站台(留下) 15 個研究目錄(2.1 GB,孤立) crm.kng.tw(貼圖已搬走) ✕ shadow 估奶排程(已停用) 125 主機(muxue) 94 端 lk/callhub 下線 /home/ying/lab/ 301 → salary.kng.tw 觀察一個月再清目錄 整批搬出 web root
清場全是「搬移」:沒有一行業務邏輯被改動,做完 web root 只剩正式業務。

完成條件web root 只剩正式業務;流量證據開始累積 · 檢核 →

階段 1 權限與地基 設定級
16 個站台 對外 · 對內 · ERP report · flux… david 共用帳號 站A 專屬帳號 站B 專屬帳號 …每站一把 goalu 最小權限 寫入權矩陣同步產出 → services.json(服務目錄)+ CI 護欄
一把萬能鑰匙換成一站一把——矩陣先畫(誰讀誰寫哪張表),帳號照矩陣發,CI 照矩陣攔。

完成條件每站專屬 DB 帳號與矩陣一致;矩陣成文進版控 · 檢核 →

▼ 以下三個重建型工地,嚴格一次一個 ▼

階段 2 ERP 新殼起步 重建型 #1
erp.kng.tw(使用者無感) Apache 路徑分流 其餘路徑 /next/* 舊 ERP(凍結) 只修 bug · 每搬一頁就縮一點 自己的 FPM pool / queue / APP_KEY 新殼(strangler) 基礎資料 CRUD · 命令 API · AI 地基 票據登入 · 獨立 pool/queue/KEY goalu 全表(現況) 專屬帳號=只授權新世代表
同一個網址、兩個互相隔離的 app;新殼碰不到舊表——邊界鎖在 DB 帳號,不是靠自律。

完成條件第一批頁面在新殼上線;金絲雀全綠 · 檢核 →

階段 3 對外站 strangler 重建型 #2 價值最高 · 也最危險
① forms(最容易) ② ny26 活動頁 ③ shop(+併庫) ④ www 5.8 萬行 API 新對外站 kngoatmilk.com 新殼命令 API → goalu 寫入 每日對帳 job 新舊筆數 × 金額 差異即告警 舊寫入路徑並行保留 → 對帳連續兩個月結綠燈 → 才關舊路、退役外圍訂單邏輯
一次吞一站、順序照風險排;④ 的 www 隱藏 API 實測 5.8 萬行,永遠最後碰。

完成條件訂單/會員資料的唯一寫入者=ERP 新殼 · 檢核 →

階段 4 估奶與配送搬遷+雙寫收斂 重建型(續)
過渡期:雙算單寫 舊 DailyPre daily_orders(正式) 新殼估奶 staging(只比對) 逐筆比對 cutover epoch 切換後: 新殼=唯一 writer ✕ 舊 DailyPre 停排程 回退=同一開關切回 同場加映:SyncOld 收斂(雙寫關水龍頭) weekly_orders SyncOld job hcust_dorder(舊) 舊表讀者 salary · kn… 讀者逐個改讀 weekly_orders → 舊表讀者歸零 → ✕ 停 SyncOld → 引用舊表的程式這時才真的死
上半是估奶搬遷的安全機制(兩套 writer 永不同時寫正式表);下半是雙寫收斂的原理(先搬讀者、再關水龍頭)。

完成條件估奶由新殼唯一產出;至少停掉一組 SyncOld · 檢核 →

階段 5 對內站與行動入口 重建型 #3
call.kng.tw 電訪 report 93 支 FLUX 十頁 BI inventory 庫存 invoice 行政+薪資 salary.kng.tw 共用入口+SSO 電訪模組 含 PBX monitor 報表 BI 模組 唯讀帳號接 goalu 庫存模組 行政表單模組 🔒 人資模組(薪資兩套合一) 專屬 DB 帳號 · 附件出 web root · 匯出審計
模組間禁互讀 model——邊界用 route group+service 層守住,不然只是把總務室換個門牌。
客服/內勤 辦公室 · 桌面 對內站 salary.kng.tw 業務員+配送員 外勤 · 手機為主 m.kng.tw erp-next 行動區 PWA 可安裝 · 依角色出模組 sales.kng.tw ✕退役 delivery ✕退役 kn(逐步)✕退役 功能逐頁上移 → 來源站清空即退役
內外勤分流:同一個 erp-next 部署,桌面與手機各一個門;行動區吸乾三個來源後,外勤只剩一個入口。

完成條件對外網址收斂到終態:對外站、ERP、對內站、行動入口 m、LINE+PBX;kn 與 delivery 功能清空後退役 · 檢核 →

尾聲 業務異動核+大清理 最後單獨動
舊 ERP(現在) 79 controllers 階段 2 凍結 階段 3–5 後 每個切片過 「可刪除」定義 只剩業務異動核 TradeService+DailyRenew 單獨搬 新殼 完整接管 舊 ERP 清空 → 死碼五關分批刪 → ✕ 整包退役——strangler 的終點是「殺死宿主」,不是共生
衡量整條路線成敗的就是這張圖:舊 ERP 有沒有真的一路變小。只長新殼、不縮舊殼=第二套 ERP。

完成條件strangler 不是第二套 ERP:舊 ERP 縮到可以整包退役 · 檢核 →

全程三條紀律

單一重建原則——重建型工地全域同時最多一個;開新工地前先問「上一個收工了嗎」。維護軌(隔離死區、搬讀者、快贏)不受限,隨時小步。

月結是驗收單位——動到訂單路徑或 ERP 的變更,以「跑過完整月結」為驗收,不以「測試綠了」為驗收。

每步可停——每個階段獨立收工,停在任何一步都比現在好;唯一的單向門是切流量,所以切流量的單位要小、要有對帳告警。