確認部署環境與 Cloudflare 資源

確認帳戶、專案狀態與資源繫結,避免混淆首次初始化、遠端更新和本機開發。

Saavo 的正式應用程式在 Cloudflare Workers 上執行,業務資料、檔案、內容和背景工作分別使用不同資源。部署前先確認資源屬於哪個帳戶,以及目前專案是否已初始化,後續才能選擇正確指令。

Cloudflare 註冊和 R2 啟用步驟請見準備 Cloudflare,這裡主要檢查專案與帳戶之間的關係。

一、確認目前操作的專案

在應用程式根目錄檢查 package.json 和 wrangler.jsonc,確認這是準備上線的業務專案。目前範本提供下列部署入口:

npm run deploy:init
npm run deploy:update
npm run domain:set -- https://app.example.com

這裡只列出入口供核對,實際執行順序請見首次部署與後續更新。不要將 Saavo 官網本身的建置指令碼當成新應用程式的部署指令,也不要因為舊教學提到 deploy:prod,就自行補上一個同名指令碼。

接著確認專案狀態:

  • 尚未初始化:Worker 和資源名稱仍待確認,D1 的 database_id、KV 的 id 尚未透過部署寫入。
  • 已初始化:wrangler.jsonc 已記錄帳戶和資源 ID,遠端存在對應的 Worker。
  • 初始化中斷:部分資源已存在,但資料庫遷移、KV 同步或健康檢查尚未完成。

第三種狀態需要先排查,不能直接歸類為「還沒部署過」。

二、核對 Cloudflare 帳戶

在終端機執行:

npx wrangler whoami

如果尚未登入,再執行:

npx wrangler login

同一位 Cloudflare 使用者可能可以存取多個帳戶。請檢查 whoami 輸出的帳戶清單,確認準備部署的帳戶與 wrangler.jsonc 的 account_id 一致。

首次部署時,指令碼可以讓你選擇帳戶並寫入設定。後續更新會檢查目前身分是否能存取已記錄的帳戶,不會自動將專案遷移到另一個帳戶。

如果使用部署主機或 CI,部署驗證資訊應放在執行環境的驗證資訊設定中。這些資訊提供發布工具所需的權限,不屬於應用程式的執行階段變數,不要寫入 .env.production。

三、認識範本使用的資源

繫結或設定Cloudflare 資源用途
Worker 的 nameWorker接收頁面、API、佇列和排程觸發的請求
DBD1使用者、訂單、權限、客服案件及業務資料
ANALYTICS_DBD1流量統計資料,與主要業務資料庫分開
MAIN_KVKV Namespace文件、部落格內容,以及專案使用的 KV 資料
MAIN_R2R2 Bucket上傳檔案等物件資料
ASYNC_POLICY_TASK_QUEUEQueueReaction 背景業務工作
ASYNC_LOGGER_QUEUEQueue非同步記錄寫入
ANALYTICS_QUEUEQueue流量統計事件
durable_objects.bindingsDurable Objects速率限制、計數、Nonce、Token Bucket 與 Timer
triggers.cronsCron Triggers依排程觸發權益檢查和資料維護

預設設定會保留這些資源。即使第一版暫時不使用某項介面功能,也不要只憑名稱刪除繫結,相關服務和背景入口可能仍依賴它。

DB 與 ANALYTICS_DB 必須指向不同的 D1。兩者的資料表結構、維護工作和資料用途不同,不能為了減少設定而填入相同 ID。

四、首次部署由指令碼建立資源

新專案使用 npm run deploy:init。指令碼會先檢查目標帳戶和資源名稱,確認後透過部署流程建立、繫結資源,並將產生的識別資訊記錄在專案設定中。

因此,通常不需要事先執行一組 wrangler d1 create、kv namespace create 和 queues create 指令。如果同名資源已存在,初始化檢查就會停止,不會預設接管這些資源。

範本初始的 D1、KV 設定不含可跨帳戶共用的正式環境 ID。資源名稱也會依 Worker 名稱調整,例如 Worker 名稱為 my-app 時,主資料庫會使用 my-app-db 作為名稱。

首次部署需要帳戶已能使用 R2。如果提示尚未啟用 R2,請先依事前準備啟用後再繼續。權限檢查失敗時,也要先核對帳戶和授權,不要修改資源 ID 來略過錯誤。

Durable Objects 的類別註冊會隨部署,透過 wrangler.jsonc 中的遷移設定處理,不需要手動建立物件實例。已發布的遷移標籤不要任意重新命名或回復舊版本。

五、既有專案只需檢查繫結

完成首次部署後,執行:

npm run doctor:remote

它會檢查正式環境檔案、繫結設定、遷移檔案和目前的 Cloudflare 身分。ERROR 會使檢查失敗,WARNING 則需要依你啟用的功能判斷。例如第一版不收款時,尚未設定 Stripe 可以是預期狀態。

doctor:remote 不是完整的線上業務探測,也不會逐一驗證郵件、付款和所有資源內的資料。通過後,仍須在 Cloudflare 中核對 Worker 的繫結,並依後文驗證業務流程。

建議保留下列部署紀錄:

  • 程式碼提交或發布版本。
  • Cloudflare 帳戶和 Worker 名稱。
  • 主資料庫、統計資料庫、KV、R2 與 Queue 的對應關係。
  • 正式網域、最近部署時間和使用的指令。

資源 ID 記錄在專案設定中,方便後續更新,金鑰則分開管理。不要在部署紀錄中貼上完整的 Secret。

六、本機、正式環境與額外業務服務

本機 npm run dev 使用的資料庫狀態,與遠端 D1 並不是同一份資料。部署後看不到本機測試帳號是正常現象,不要因此將整個本機測試資料庫覆寫到正式環境。

.env.production 是目前專案部署時使用的正式環境設定檔,不代表範本已自動提供一個名為 production 的 Wrangler environment。目前預設流程使用專案的最上層資源設定,不需要額外加上 --env production。

如果需要獨立的預覽環境,應明確準備獨立的 Worker、資源繫結、網域和供應商測試設定。只複製環境檔案,不會自動隔離資料庫和佇列。

實作教學中的 PDF Worker 是業務功能新增的相依服務,通用部署指令碼不會自動發布它。上線前請先部署這類服務,再確認主網站的 Service Binding、驗證資訊和呼叫約定。實際產品需要哪些相依服務,以自己的業務實作為準。

下一步:準備正式環境設定與金鑰。