环境变量
Env Var
中级通用环境变量(Env Var)是进程运行时从外部获得的名称和值,例如 API_BASE_URL 对应一个接口地址。它让同一份程序在本地、测试和线上使用不同配置,而不必为每个环境改一遍代码。
你可能会说:「我想让同一套代码在本地和线上连接不同的服务,别每次上线都改代码里的地址。」
读之前建议先了解
动手看看服务启动时的接口配置
切换运行环境,对照变量值和请求目标:代码与变量名都没变,变的是外部提供的值。这里模拟程序带着不同配置重新启动。
请求目标是读取到的地址加上 /health。这里仅展示模拟结果,不会访问网络;example 域名也是演示用的。
要点环境变量怎样影响正在运行的程序?
- 1
它是进程拿到的配置值
你可以把它理解成启动程序时交给进程的一组“名称和值”。程序通过名称读取值,比如读取数据库地址。值从哪里设置,取决于你是在终端、本地开发工具还是部署平台启动它。
- 2
改了值不等于程序已更新
程序通常在启动或构建时读取这些值。所以你在部署平台改完配置,还要看它要求重启服务还是重新构建;否则正在运行的进程可能仍用旧值。排错时先确认值在哪个阶段被读取。
- 3
变量本身不负责保密
把密钥放进服务端进程的环境变量,可以避免直接写进代码仓库,但这不等于密钥绝对安全。如果构建工具把某个值打进前端代码,访问网站的人就可能看到它;密钥应只由服务端使用。
容易混淆的地方
环境变量和配置文件都能提供配置,区别在于交付方式:配置文件是程序读取的文件,环境变量由运行环境提供给进程。它也不是 API 密钥本身:密钥是一种凭证,环境变量只是传递它的方式。你可以用环境变量传密钥,但仍要控制谁能读取,以及它会不会进入前端产物。
什么时候用
适合用
- 同一个网站要部署到预发布和生产环境,两边的 API 地址不同,用环境变量给各自的服务进程提供地址。
- AI 工具的服务端要调用模型接口,把密钥交给部署平台配置,运行时读取,而不是写进代码仓库。
- 本地开发和线上服务连接不同数据库,用同一个变量名提供各自的连接信息,减少改代码的次数。
不适合用
- 用户在设置页切换深色模式,这是使用过程中的个人偏好;用应用状态或浏览器存储更合适。
- 运营人员要随时调整所有用户看到的公告内容,这是业务数据;放在数据库或内容管理后台更合适。
- 想让不同用户拥有不同的付费权益,这是按用户判断的权限;用账户数据和服务端权限控制更合适。
练一练选一个答案,看看解释
你做的 AI 网站在本地能调用模型,上线后却仍请求本地接口。团队希望同一份代码用于本地和线上。你会让 AI Agent 怎么改?
让 AI 帮你做复制给 AI Agent 直接用
请检查项目里 API 地址和密钥目前从哪里读取,改为由服务端读取环境变量;给出本地与部署平台各自需要配置的变量名,说明变量在启动还是构建时生效。不要把密钥放进前端产物,也不要提交真实密钥。