For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /zh-tw/docs/web/provider-keys.md (or send Accept: text/markdown).
收集其餘提供商金鑰
剩下這些服務的短演練:AI 提供商、Trigger.dev、S3 儲存、Sentry 或 PostHog、Turnstile,以及你的域名。
如何使用本頁
下面每一節都是一套完整的設定演練:建賬戶、找金鑰、設 env 名、驗證。只取你產品要上線的服務對應的節——沒有 AI 功能的站點永遠不需要第一節;這裡的每一節都跳過,套件也照常執行。
與其他地方相同的金鑰規則:API 金鑰和 webhook 金鑰只在服務端;只有帶 NEXT_PUBLIC_/EXPO_PUBLIC_ 字首的值能到客戶端;生產金鑰放在託管方的金鑰儲存中;開發伺服器只在重啟時重新讀取 env。
AI 提供商金鑰
套件的 AI_PROVIDER 接受 openai、anthropic、openai-compatible 和 openrouter——外加預設的本地替身 fake。選一個;提供商金鑰是唯一要開的賬戶,因為模型 ID 和定價來自套件的資料庫目錄,而不是 env 變數。
OpenAI:platform.openai.com → API keys → Create new secret key → 複製 sk-… → OPENAI_API_KEY。Anthropic:console.anthropic.com → API Keys → Create Key → sk-ant-… → ANTHROPIC_API_KEY。兩家都按 token 計費——幾美元額度就夠開發用了。
OpenRouter 用一把金鑰路由目錄裡的所有模型:openrouter.ai → Keys → Create Key → sk-or-… → AI_PROVIDER=openrouter 加 OPENROUTER_API_KEY;可選的 OPENROUTER_APP_NAME/OPENROUTER_SITE_URL 傳送歸屬標頭。openai-compatible 覆蓋任何 OpenAI 形態的端點:OPENAI_COMPATIBLE_API_KEY 加 OPENAI_COMPATIBLE_BASE_URL。
驗證:重啟,跑一個 AI 任務,應得到真實模型回答而不是確定性的假響應。啟動報錯點名金鑰,表示提供商開關開著卻沒有金鑰。真實回答還需要下面 Trigger.dev 一節的 JOB_PROVIDER=trigger,以及套件目錄中啟用的一個模型——設定 AI 講了那部分配置。
# apps/web/.env.local — pick ONE provider
AI_PROVIDER=openai
OPENAI_API_KEY=sk-…
# or AI_PROVIDER=anthropic
# ANTHROPIC_API_KEY=sk-ant-…
# or AI_PROVIDER=openrouter
# OPENROUTER_API_KEY=sk-or-…
# or AI_PROVIDER=openai-compatible
# OPENAI_COMPATIBLE_API_KEY=…
# OPENAI_COMPATIBLE_BASE_URL=https://your-endpoint/v1Trigger.dev
除非產品需要真實的後臺任務執行,否則跳過——JOB_PROVIDER=local 把任務排進記憶體佇列而不執行,開發時這就夠了。
1. 開啟 app.trigger.dev → 註冊 → 建立專案。
2. 複製兩個值:專案 settings 或儀錶板 URL 裡的專案引用 proj_… → TRIGGER_PROJECT_REF,以及專案 API keys 頁上的金鑰(開發環境是 tr_dev_…,生產是 tr_prod_…)→ TRIGGER_SECRET_KEY。兩者都僅限服務端。
3. 套件的任務已在 apps/web/trigger 中,apps/web/trigger.config.ts 讀取 TRIGGER_PROJECT_REF。在 apps/web 下執行 npx trigger.dev@latest dev——它把任務註冊到你的專案,並用開發金鑰在本地執行。
驗證:dev 命令會記錄註冊的任務;在應用中排一個任務,看它在儀錶板 Runs 列表裡跑起來。已部署環境執行 corepack pnpm --filter @supastack/web trigger:deploy 來發布任務集。
# apps/web/.env.local
JOB_PROVIDER=trigger
TRIGGER_PROJECT_REF=proj_…
TRIGGER_SECRET_KEY=tr_dev_… # tr_prod_… in production
# run the worker alongside the app, from apps/web:
cd apps/web
npx trigger.dev@latest devS3 相容儲存(Cloudflare R2)
除非產品要存檔案,否則跳過——STORAGE_PROVIDER=memory 把上傳留在程式內,供開發使用。
任何 S3 相容桶都行;Cloudflare R2 是對免費檔友好的選擇。1. 開啟 dash.cloudflare.com → R2 Object Storage → Create bucket,命名並保留預設位置提示。
2. 回到 R2 概覽,開啟 Manage R2 API Tokens → Create API token → 許可權選 Object Read & Write,範圍限定到那個桶 → Create。複製 Access Key ID、Secret Access Key,以及顯示的 S3 端點——https://<account-id>.r2.cloudflarestorage.com。
3. 設定下面的 env 名。STORAGE_REGION=auto 是 R2 慣例——套件預設 us-east-1,R2 也接受。STORAGE_FORCE_PATH_STYLE 對自定義端點本來就預設開啟,正是 R2 要的。對外提供公開檔案還需要 STORAGE_PUBLIC_BASE_URL 或 CDN 接線;私有檔案不需要更多。
驗證:重啟並通過應用上傳——物件會出現在 R2 桶瀏覽器裡。簽名或 403 錯誤表示令牌沒有該桶的物件讀寫許可權;建一個範圍正確的新令牌。
# apps/web/.env.local
STORAGE_PROVIDER=s3
STORAGE_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
STORAGE_REGION=auto
STORAGE_BUCKET=your-bucket
STORAGE_ACCESS_KEY_ID=… # server-only
STORAGE_SECRET_ACCESS_KEY=… # server-only
# STORAGE_PUBLIC_BASE_URL= # optional public-URL baseSentry 或 PostHog(可選)
完全可選:所有可觀測性值預設不設定,套件沒有它們也執行良好——等你想在生產裡要錯誤報告和分析時再配。
錯誤用 Sentry:sentry.io → 建專案 → 選 Next.js 平臺 → 設定頁顯示 DSN https://…@….ingest.sentry.io/… → SENTRY_DSN。之後異常會帶著 correlation-id 標籤到達 Sentry;免費檔夠起步。
產品分析改用 PostHog:posthog.com → 建專案 → 複製專案 API 金鑰 phc_… → NEXT_PUBLIC_POSTHOG_KEY 加 NEXT_PUBLIC_POSTHOG_HOST(https://us.i.posthog.com,或你的 EU 主機)。這兩個是刻意公開的瀏覽器值;SENTRY_DSN 留在服務端。ALERT_WEBHOOK_URL 可選地把失敗告警發到 Slack 相容端點。
驗證:重啟,製造一個測試異常(或回放 Sentry 的示例事件),確認它落到專案的 Issues 列表裡。
# apps/web/.env.local — all optional
SENTRY_DSN=https://…@….ingest.sentry.io/…
NEXT_PUBLIC_POSTHOG_KEY=phc_…
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# ALERT_WEBHOOK_URL=https://hooks.slack.com/services/…Cloudflare Turnstile
給公開表單和憑據端點的機器人防護——CAPTCHA_PROVIDER=off 是預設,所以在對陌生人開放註冊前加上它。免費。
1. 開啟 dash.cloudflare.com → Turnstile → Add widget → 命名並列出主機名:開發用 localhost 加你的真實域名 → Create。
2. 複製兩個值:Site Key——本來就公開,渲染在小元件裡 → NEXT_PUBLIC_TURNSTILE_SITE_KEY——和伺服器用來校驗的 Secret Key → TURNSTILE_SECRET_KEY。
3. CAPTCHA_PROVIDER=turnstile 開啟它;啟動會失敗並點名缺了哪個金鑰。驗證碼指南列出了小元件具體保護哪些面。
驗證:開啟 /auth 或聯絡表單——小元件渲染出來;未完成挑戰的提交被拒絕。小元件一直不載入,說明你瀏覽的主機名不在小元件名單裡。
# apps/web/.env.local
CAPTCHA_PROVIDER=turnstile
NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x… # public by design
TURNSTILE_SECRET_KEY=0x… # server-only你自己的域名
在任意註冊商買一次就行——Cloudflare Registrar、Porkbun、Namecheap 都可以。這裡沒有要複製進 env 的東西;域名出現在你一路配置的 Services ID、Resend DNS、Turnstile 主機名和 OAuth return URL 裡。
指向應用的兩種方式:Cloud Run 用部署指南里的域名對映——控制台點幾下,加上 Google 列出的 DNS 記錄。或者把 DNS 遷到 Cloudflare nameserver(註冊商改兩條記錄)——可選,但也是把 R2 公開桶和 Turnstile 主機名放到一處管理的整潔辦法。
如果你想繼續完成設定,可以閱讀《設定資料庫》。