跳转到内容
supastack
浏览文档
WebNext.js

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/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/v1

Trigger.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 dev

S3 兼容存储(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 base

Sentry 或 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 主机名放到一处管理的整洁办法。

如果你想继续完成设置,可以阅读《设置数据库》。

常见问题

14 个问题

supastack 是什么?

supastack 是用于构建 AI 驱动 SaaS 产品的模块化基础。它把通用基础设施整合在一起,让你专注于产品专属的功能。

它支持 Web 和移动端吗?

支持。supastack 包含 Next.js 与 Expo 应用,作为 Web 与移动端体验的起点。

包含哪些认证方式?

Better Auth 覆盖邮箱/密码、OTP 与社交登录。个人工作区随账户一起开通,产品记录从第一天起就有边界。

AI 是如何支持的?

supastack 包含可配置的多供应商 AI、用量追踪、预算,以及加密的自带密钥(BYOK)支持。

订阅如何处理?

对于基于该套件构建的产品,Stripe 计费、订阅与权限构成付费访问的基础。供应商密钥仅存于服务端。

我的产品专属代码放在哪里?

产品专属功能保留在独立的代码库中,产品通过配置接入 supastack 的基础模块。

supastack 如何定价?

套件为一次性购买、终身更新:单框架 249 美元(限时优惠价,较常规价 349 美元优惠 100 美元),或全框架(Next.js、iOS、Android)499 美元(限时优惠价,较常规价 599 美元优惠 100 美元),每个额外开发者席位 75 美元。套件本身没有订阅。本站结账后通过邮件发送许可证密钥,仓库访问通过 GitHub 邀请授予。

工作区如何界定我的数据?

用户记录按 workspaceId 划定边界。身份、权限、AI 用量、计费事件与审计条目都留在个人工作区边界内。

后台任务如何工作?

Trigger.dev 是明确的任务运行时。JobRunner 契约只承诺 enqueue、status 与 cancel——工作流语义保持 Trigger.dev 专有且显式。

邮件与营销触达有何不同?

事务性邮件覆盖产品工作流,如任务完成通知。冷触达与营销活动属于产品自身的范畴,不在本套件的邮件模块内。

移动端购买如何运作?

移动端已支持 RevenueCat 原生购买和恢复购买,访问权限由服务端验证。发布前需配置商店账户并完成设备测试。Web 计费保持独立。

AI 供应商密钥存放在哪里?

自带密钥凭证经过加密且仅存于服务端。密钥在日志中被脱敏;用量与预算在工作区级别保持可见。

结账支持哪些付款方式?

Stripe 托管结账接受银行卡,在 Stripe 账户启用后还可提供支付宝与微信支付——方便中国买家。钱包授权为异步确认,付款完成后许可证页面会立即更新。

我能申请退款吗?

获得代码仓库访问权限后,supastack 将永久归你所有,因此无法退款。但请放心,你将获得包含终身更新的完整源代码,可为你自己或客户构建并发布无限数量的产品。你只需注意不能转卖代码,也不能将仓库作为启动模板二次分发。

CN
主题