git push

问题描述

我目前在数字海洋中液滴的环境变量有问题,问题如下:如果我用export PORT=3000设置了一个环境变量,它适用于我所有的应用程序(我有更多而不是同一液滴中的一个应用程序),因此抛出错误,因为如果我使用.env文件和dotenv包设置env变量,则每次我推送一个新的commit(i正在使用github操作进行自动部署),重置存储库并删除.env文件,是否有任何方法可以只为一个目录设置env变量,或者是否设置为不会删除

这是我部署应用程序的方式:创建github动作,我的Droplet监听存储库中的更改,使用pm2,使应用程序监听特定的端口,使用Nginx,我使用子域作为代理来显示该子域的正确应用

解决方法

我了解您不是将.env提交到存储库中。

这是一种最佳做法,它可以使您的秘密更安全(因为攻击者必须获得对您​​的DO液滴的访问权限才能获得它们)。

在您的情况下,尤其是如果您的git存储库是私有的,最简单的解决方案可能只是在git中包含.env文件。如果您仅将配置信息存储在环境中,则没有理由不这样做(除非其他人可能会严厉地判断您的情况)。

您的工作流程完全相同,只是您不必每次运行github操作时都一直重新创建.env文件。

如果出于某种原因,您不想走这条路,那么就会想到一些低技术含量的解决方案:

如果只有几个配置,并且您对风险感到满意,则只需在每个应用程序的节点启动命令前添加env变量即可

PORT=300 KEY2=foo node app1.js

如果您有很多常见的共享配置,则可以继续使用上述技术将它们导出到环境中,然后覆盖每个应用程序设置(例如端口)。

您还可以将所有.env文件放置在小滴的目录中,如下所示:

/var/configs/app1.env
/var/configs/app2.env

然后,您可以使用如下命令行启动每个节点应用程序:

node -r dotenv/config your_script.js dotenv_config_path=/var/configs/app2.env

这两种技术都会迅速为您提供可行的部署工作流程。但是,如果您要公开敏感或有价值的机密,请考虑使用机密管理系统。您可以从刚刚引入的github开始:https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets