环境变量
四类环境变量作用域——前端公开、Rust 运行时、构建密钥与 Edge 密钥——以及模板读取的每个键。
桌面应用有不止一条环境边界。本模板有四类,分清它们,就分清了哪些值可以安全地 随应用发布、哪些会泄露密钥。
四类作用域
| 作用域 | 前缀 / 位置 | 是否打包进应用? |
|---|---|---|
| 前端 | .env 中的 VITE_* | 是——内联进 webview bundle。设计上公开。 |
| Rust 运行时 | SENTRY_DSN、SENTRY_ENVIRONMENT、UPDATE_SERVER_URL | 否——由 Rust 进程在运行时读取(或编译期烘焙)。 |
| 构建 / CI 密钥 | TAURI_SIGNING_*、APPLE_*、WINDOWS_CERTIFICATE* | 否——仅供发布构建;未设置时为空操作。 |
| Edge 密钥 | CREEM_*、BILLING_SUCCESS_URL | 否——用 supabase secrets set 设置;绝不放进应用 .env。 |
Supabase URL 与 publishable key 可安全发布,因为 Row Level Security 在服务端
强制授权。Supabase service-role key 不安全,绝不能出现在 .env 中。minisign
私钥绝不进入仓库——只有公钥存在 tauri.conf.json 里。
所有前端配置在 shared/config.ts 中只读一次;带注释的权威来源见 .env.example。
下面每个 VITE_* 键都已在 .env.example 中。
前端参考(VITE_*)
功能开关
Prop
Type
Supabase
Prop
Type
Creem 产品 ID
Prop
Type
产品 ID 不是密钥。shared/price-config.ts 将其映射到方案层级;未设置或未知的 ID
回退为 free,因此未配置的构建绝不会误解锁付费功能。
可观测性、分析与支持
Prop
Type
Rust 运行时 env
由 Rust 进程读取,不打包进 webview。每项都通过 std::env::var 在运行时读取,
回退到 option_env!(编译期烘焙),因此两种方式都可提供。
Prop
Type
更新端点优先级(src-tauri/src/commands/update.rs):非空的运行时
UPDATE_SERVER_URL 优先;否则用编译期 option_env! 值;否则用内置默认值
https://updates.soarstarter.com。此外,tauri.conf.json 硬编码了一个
endpoints 条目与 minisign 公钥——请把两者改指向你自己的更新源。见
自动更新。
构建戳
“关于”页诊断显示的构建时间与提交 SHA,通过编译期 option_env!("VITE_BUILD_TIME")
与 option_env!("VITE_COMMIT_SHA") 读取。它们不在 .env.example 中,随附的 CI
也不注入它们,因此默认为 "dev"。若想要真实戳记,在你的发布构建环境中设置它们。
构建 / CI 密钥
每个签名输入都由 env 驱动且未设置时为空操作,因此 fork 与本地构建在没有密钥时 也能正常工作。
Prop
Type
Edge 密钥
用 supabase secrets set 设置;由 supabase/functions/ 下的函数读取。它们在
.env.example 中仅供参考(已注释)——绝不把真实值放进应用 .env。
Prop
Type
可安全发布清单
| 值 | 可放入应用 bundle? | 原因 |
|---|---|---|
| Supabase URL | 是 | 标识项目端点。 |
| Supabase publishable key | 是 | 面向客户端;RLS 决定用户可读哪些行。 |
| Creem 产品 ID | 是 | 仅为标识符;本身不创建结账会话。 |
| Sentry DSN | 是,带 opt-in | DSN 是上报地址,不是签名密钥;用户 opt-in 仍控制是否上报。 |
| 分析 write key | 视为公开 | 若设置会随 webview 发布。 |
| Supabase service-role key | 否 | 绕过 RLS。仅限服务端。 |
| Creem API key / webhook secret | 否 | 服务端凭据;仅作 Edge 密钥。 |
| minisign 私钥 | 否 | 为你的更新签名;只有公钥随应用发布(在 tauri.conf.json)。 |
| 代码签名证书 | 否 | 供 CI 或你的签名机使用的发布密钥。 |
