我想使用环境变量来安全地保存pm2的秘密。
我有一个快速支持服务器的反向代理,每次连接时都使用带有密码的数据库来执行查询。
我想从程序中正常访问它:
procsess.env.my_secret
但我假设只是在运行时设置变量,就像下面的安全一样:
MY_SECRET="secret password" pm2/node my_api_server.js
考虑到我使用pm2,我应该如何设置密码?我希望变量在重启/崩溃时保持不变?
我应该注意,不同的环境处理和通过VCN向其他开发人员传递代码对我来说不那么重要。
答案 0 :(得分:0)
在过去需要连接数据库的Express后端的ReactJS项目中,我在NPM上使用了dotenv包。一旦作为项目的依赖项添加,您将在服务器文件结构的根目录中创建一个隐藏的.env文件。
在该.env文件中,您可以创建环境变量。这些变量需要以REACT_APP为前缀,如下所示:
REACT_APP_DBURI=<conn string here>
REACT_APP_MAILGUN_API_KEY=<key string here>
REACT_APP_CAPTCHA_SECRET_KEY=<key string here>
您需要在代码中按要求提供包:
require('dotenv').config();
您可以在server.js(或其他)代码中引用它们:
process.env.REACT_APP_VARIABLE_NAME
This Medium article有完整的解释。
希望这有帮助!
答案 1 :(得分:0)
使用.env存储API密钥或凭据会在量产时公开给客户端!
通过React docs-
警告:请勿在您的React应用程序中存储任何秘密(例如私有API密钥)! 环境变量已嵌入到内部版本中,这意味着任何人都可以通过检查应用程序的文件来查看它们。
建议将所有环境密钥直接存储在服务器上,并且服务器应用作客户端和API之间的中间点。这样,密钥可以直接应用于服务器,而不会暴露在前端。您可以查看有关如何在特定服务器上设置环境变量的相应文档。
前端代码
fetchData = () => {
fetch('/users', { method: 'POST', body: JSON.stringify(data) }
.then(res => res.json())
}
服务器代码
app.post('/users', (req, res) => {
const API_KEY = process.env.API_KEY;
connection.query(`/apiPath/${API_KEY}`)
}