Почему секрет должен быть переменной среды, а не храниться в файле конфигурации?
Работая над проектами, вы в конечном итоге загрузите свой код на github, который доступен всем. Если вы храните свои секреты в файле конфигурации, любой, у кого есть учетная запись github, сможет их прочитать, и, следовательно, это угроза безопасности. Хранение секретов в виде переменных среды гарантирует их сохранность. Ваш файл конфигурации должен считывать эти значения из объекта process.env
. Примерно так:
const jwtSecretKey = process.env.JWT_SECRET_KEY;
const googleApiKey = process.env.GOOGLE_API_KEY;
const serverPort = process.env.PORT || 8000; // 8000 is the default value in case if the env variable has not been set
module.exports = {
jwtSecretKey: jwtSectetKey,
googleApiKey: googleApiKey,
serverPort: serverPort
}
И любой другой фрагмент кода, использующий эти секреты, должен требовать файл конфигурации.
const config = require('./config');
...
jwt.verify(token, config.jwtSecretKey);
Помимо хранения секретов в виде переменных среды, вы также должны сохранять любые значения c, указанные в среде, как переменные среды. Например, ваш сервер NodeJS (который подключен к размещенной базе данных) работает в трех средах - Development, QA и PROD. Каждая из этих сред будет иметь разную информацию о БД ХОСТ и ПОРТ, к которым должна подключаться среда. Переменные среды - это хороший способ сохранить хост и порт БД в каждой отдельной среде и использовать один и тот же код во всех средах для подключения к разным базам данных путем чтения переменной среды.
Как сохранить значения как переменные среды - один из способов сделать это вручную, хотя я бы не рекомендовал это делать. Один из способов - использовать сценарии оболочки. На самом деле это зависит от вашей инфраструктуры.