返回知识库

工程与栈 · 部署与上线

环境变量Environment Variables

环境变量是按运行环境注入的配置入口:代码只读键名,真值分环境存放。公开配置才能进浏览器,生产密钥不能贴进 Preview。

先认出这行密文,再看谁被放行

下面就是托管平台 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 的密钥从哪来。

正例Preview 用独立预览密文

支付密钥是 sk_preview_…,即便预览泄漏也只影响预览数据。

反例把生产 .env 复制到 Preview

测试下单走 live 账号,发生真实扣款。失败写在抽屉上,先阻断再轮换。

快速自测

Preview 突然走了生产支付账号,最先该做什么?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。