立即停止使用 .env 文件!

2025-05-24

立即停止使用 .env 文件!

目录


你好,读者👋🏽

我曾在大型企业系统上工作过,但令我失望的是,99% 的 JavaScript 教程都告诉你使用.env生产配置和秘密,这很愚蠢。

是时候纠正这种困扰社区的行为了。让我们来探讨一下文件的问题.env以及最终的解决方案。

.env 文件的问题

1. 存储 .env 文件

问题是……它是一个文件。你不应该把你的“生产”文件存储在你的仓库里;你把它放在哪里?直接放在虚拟机根目录下吗?Docker 容器呢?你的机密信息是直接放在镜像里吗?如果镜像泄露,每个人都能访问你的机密信息。

2. 更新秘密配置

如果需要更新数据库密码,会发生什么?更新数据库的人.env将有权访问文件中的所有机密信息。我甚至不需要解释这有什么不好。每次需要更新配置时,更新数据库的人都可以看到所有机密信息。


更新程序可以访问您的所有机密


3. 版本控制

假设您正在部署一项新功能,需要更新您的配置/秘密变量,如果出现问题,应用程序就会回滚。

哦,有人记得我们最后保存的值.env吗?我们没有历史记录,而应用程序需要我们刚刚删除/覆盖的值。

配置服务器来救援🦸‍♂️

解决所有这些问题的完美方案是使用配置服务器。配置服务器是一个用于存储配置和机密信息的外部化应用程序。它被认为是跨环境管理机密信息的中央枢纽。

对于我的开源爱好者来说,多种云服务可以充当配置服务器,例如AWS Parameter StoreGoogle Secrets ManagerHashiCorp Vault 。

一旦您创建了秘密或配置,大多数情况下您会获得一个类似的 URL https://app.com/config/DB_PASSWORD/v1

让我们看看配置服务器如何解决所有文件问题.env

解决:1.存储.env文件

使用配置服务器,所有秘密都集中在一个地方,加密,并且只能由您批准的应用程序和用户访问。


看不到任何普通文件!


解决:2. 更新秘密

使用配置服务器,您无需更新密钥,而是创建一个新版本。创建新版本后,您可以像.../config/DB_PASSWORD/v2或 一样更新密钥 URL .../config/DB_PASSWORD/v3


添加新的秘密版本


解决方案:3. 版本控制

与方案二类似,大多数配置服务器都具有自动版本控制功能。如果您需要更新 secret,请创建一个新版本,并在应用程序中更新配置 URL。如果应用程序回滚,它将自动使用您上次使用的配置 URL。

这样,秘密就受到保护,并且您的应用程序可以回滚,而不会出现与以前的秘密相关的问题。


看看所有这些秘密版本


配置服务器的更多优点

自动秘密轮换

机密信息可能会过期,从而导致您的系统受到威胁!像 AWS 这样的集中式配置提供了自动机密信息轮换功能

如果您的团队或组织都拉取相同的配置,它们将自动更新为最新值。无需通过 Slack 发送,无需寻求“可信赖的”开发人员,也不用担心忘记更新某个文件.env。轻松便捷!

VPC 终端节点

配置服务器通常托管在 VPC 上,它为您的服务提供类似本地主机的连接。这使得您可以无需连接互联网(几乎没有延迟)即可获取机密信息,也不允许外部人员查询服务器。

审计日志

机密泄露了吗?配置服务器通常会记录审计日志,以便您可以检查机密何时何地被访问。

更新配置会导致错误吗?请检查上次更新时间,如有必要,请为所有服务执行全局更新。无需编辑纯文本文件。

最后的想法💭

我希望现在开发人员开始为他们的生产服务使用集中式配置。.env文件不可靠,并且没有访问管理、版本控制或安全更新。

我并不是说.env文件没有用途。它们可以用于本地或面向开发的环境。

我想说的是,不要将有价值的秘密存储在简单的文件中,特别是如果我的数据在您的服务中。

关于作者👨🏾‍💻

我是 Gregory Gaines,一位来自 Google 的普通软件工程师,致力于撰写优质文章。如果您想了解更多内容,请在 Twitter 上关注我:@GregoryAGaines

现在就去创造伟大的东西吧!如果你有任何问题,可以在 Twitter 上联系我 ( @GregoryAGaines );我们可以一起探讨。

感谢阅读!

文章来源:https://dev.to/gregorygaines/stop-using-env-files-now-kp0
PREV
什么是 HTTP/3?
NEXT
YouTube 热门前端开发频道