返回知识库工程与栈 · 部署与上线
环境变量Environment Variables
环境变量是按运行环境注入的配置入口:代码只读键名,真值分环境存放。公开配置才能进浏览器,生产密钥不能贴进 Preview。
先认出这行密文,再看谁被放行
下面就是托管平台 Preview 里的那行环境变量。默认用本环境密文,预览站正常;把生产密钥贴进来或下发到浏览器,阻断会写在抽屉和站点上。
DATABASE_URL
postgres://preview/[redacted]本环境专用:抽屉和预览站都写着本环境值。
原因:Preview 注入的是本环境密文,站点写预览库。下一步:试「粘贴生产密钥」,看抽屉和站点一起变红。
知识点:键名进代码,真值按环境注入
抽屉上的印章已经演示了边界,这里只给命名。
- 同一键名在 Preview 和 Production 是两个值;代码只写 process.env.DATABASE_URL。
- 公开配置才能进浏览器;服务器密钥进 bundle 视为已泄露,必须轮换。
- 跨环境借值是真实事故:Preview 用 live 支付密钥会发生真实扣款。
- 真值不进仓库,只进 .env.example 的键名和平台密文;日志只打键名。
什么时候用、怎么用
环境变量是配置入口,不是万能保险箱。
- 信号:本地能跑、一上线就 undefined;或担心密码进 git、进浏览器。
- 适用:API 地址、数据库、第三方 token、功能开关——同一份代码换环境换行为。
- 不适用单独承担:高敏感密钥的轮换和审计,应交给秘密管理器,环境变量只做注入通道。
- 最短路径:代码读键名 → 仓库只交 .env.example → 平台按环境注入 → 启动校验缺键即崩。
正反例:同一目标「让 Preview 跑起来」
只改 Preview 的密钥从哪来。
支付密钥是 sk_preview_…,即便预览泄漏也只影响预览数据。
测试下单走 live 账号,发生真实扣款。失败写在抽屉上,先阻断再轮换。
快速自测
Preview 突然走了生产支付账号,最先该做什么?
继续查证
术语的技术定义和行为以这些一手或权威资料为准。