fix(deploy): leo21c self-host 撞牆修復 — secret 被 vars 覆蓋 + 死 zone route + workers.dev 互連被擋

T-kb-skeleton①部署到 leo21c 補跑實測發現三坑:
1. [vars] 宣告 KBDB_BASE_URL="",wrangler deploy 會用它覆蓋掉已存在的 remote
   secret(vars 優先權 > secret),導致部署後 KBDB_BASE_URL 被打回空字串。移除該鍵,
   一律只透過 `wrangler secret put` 設定。
2. [[routes]] custom_domain "kbdb-graph.finally.click" 的 zone 不在 leo21c 帳號下
   (CF API GET /zones?name=finally.click 回空),會讓 deploy 該路由失敗。註解掉,
   self-hosted 預設乾淨部署到 workers.dev。
3. 最關鍵:Worker 直接 fetch() 另一個 *.workers.dev Worker 會被 CF 擋
   (error code 1042,workers.dev 共享 zone 的 loop-prevention)。self-hosted 帳號通常
   沒自訂域名可繞,正規解法是 Service Binding(CF 內部直連,不經公開網路)。
   新增 [[services]] binding=KBDB_BASE_SVC -> arcrun-kbdb。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Claude
2026-07-03 08:57:43 +00:00
parent 01f131a7a2
commit c7d8a74bee
+20 -6
View File
@@ -10,15 +10,29 @@ workers_dev = true
[vars] [vars]
ENVIRONMENT = "development" ENVIRONMENT = "development"
# 基本盤 arcrun/kbdb API 網址leo 2026-06-14:做成可設定,先留空) # 基本盤 arcrun/kbdb API 網址:務必只透過 `wrangler secret put KBDB_BASE_URL` 設定
# 部署前用 `wrangler secret put` 或在此填入,例如 https://arcrun-kbdb.<acct>.workers.dev # 2026-07-03 補跑實測發現的坑:若這裡也宣告 KBDB_BASE_URL(哪怕留空字串),
KBDB_BASE_URL = "" # `wrangler deploy` 會用這個 [vars] 值覆蓋掉已存在的 remote secretvars 優先權 > secret),
# 導致部署後 KBDB_BASE_URL 被打回空字串、插件連不到基本盤。故此鍵不可出現在 [vars]。
[alias] [alias]
"zod/v3" = "zod" "zod/v3" = "zod"
"zod/v4" = "zod" "zod/v4" = "zod"
"zod/v4-mini" = "zod" "zod/v4-mini" = "zod"
[[routes]] # 2026-07-03 補跑實測發現的坑:workers.dev 是共享 zoneWorker 直接 fetch()
pattern = "kbdb-graph.finally.click" # 另一個 *.workers.dev Worker 會被 CF 擋(error code 1042loop-prevention)。
custom_domain = true # self-hosted 帳號通常沒自訂域名可繞,正規解法 = Service BindingCF 內部直連,
# 不經公開網路、不受 1042 影響。KBDB_BASE_URL secret 仍保留(可讀性/未來自訂域名時 fallback),
# 但實際讀寫走這個 binding(見 src/lib/kbdb-client.ts / makeKbdbClient)。
[[services]]
binding = "KBDB_BASE_SVC"
service = "arcrun-kbdb"
# 2026-07-03 補跑實測:custom_domain "kbdb-graph.finally.click" 這個 zone
# 不在 leo21c 帳號下(CF API GET /zones?name=finally.click 回空),
# self-hosted 到 leo21c 時此路由會部署失敗(但不影響 workers.dev route 的部署本身)。
# 註解掉以让 self-hosted 用戶乾淨部署到預設 workers.dev;有自訂域名需求者自行改回。
# [[routes]]
# pattern = "kbdb-graph.finally.click"
# custom_domain = true