已关闭,该问题为opinion-based,目前不接受回答。
**想改进这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
5小时前关闭
Improve this question
当通常认为bad practice将.env
文件推送到生产存储库时,在生产构建中访问环境变量的最佳实践是什么?
我目前正在处理一个需要访问环境变量(例如API密钥和数据库凭据)的项目,但我不确定如何在不包括生产存储库中的.env
文件的情况下完成此操作。
如果我推它们,那么如果有人访问repo,我就会受到攻击。但是如果我不这样做,那么编译后的代码将无法访问这些必要的凭据。
处理这种情况的最佳实践是什么?有没有什么工具或方法可以帮助访问生产构建中的环境变量,而不直接将它们推到生产环境中?
const connection = {
host: "127.0.0.1",
// All of these will result in undefined
user: process.env.DB_PROD_USER,
pass: process.env.DB_PROD_PASS,
table: process.env.DB_PROD_TABLE
};
3条答案
按热度按时间mccptt671#
您使用 actual 环境变量,在生产环境本身(而不是存储库或代码)中定义。您如何做到这一点取决于环境。
如果你自己正在运行一个实际的服务器(物理或VPS),你应该在运行代码的进程的环境设置中或者在运行代码的用户帐户中设置它们。(理想情况下,使用一个工具,允许你在休息时加密它们,并且只在运行时解密到内存中。)
如果你使用的是托管解决方案,它会有一种方法来提供环境变量,当环境运行时,这些变量应该对你的代码可用。下面是来自render.com的配置页面的一个示例:
下面是来自Deno Deploy的一个:
mi7gmzs62#
我的方法是在我的本地环境中使用.env文件,并使用npm包dotenv加载它们。
我忽略.gitignore中的.env文件,这样它们就不会被添加到存储库中。
在服务器上,这些环境变量已经存在,服务器管理员管理这些变量,但是如果需要,可以使用ssh和vim或ftp在服务器上复制.env文件,尽管这不是最佳实践。
我也有一个.env文件的副本,其中的值为空,作为repo中的模板,其中有一个自述文件,说明在哪里复制文件,以及在哪里/谁从其他开发人员那里获取值。
ctehm74n3#
是的。我几天前做了这个,我认为这是一个更好的解决方案。
这是我的对象包含不同的url: