Погружение глубже: раскрытие основ конфигурации проекта Node.js с помощью переменных env

В этой серии мы рассмотрим суть проекта Node.js и углубимся во внутреннюю работу одной из самых популярных сред выполнения JavaScript. В следующем выпуске мы сосредоточимся на понимании одного из наиболее важных и часто упускаемых из виду аспектов конфигурации: переменных среды.

Переменные среды или для краткости переменные env — это пары ключ-значение, которые можно использовать для настройки проекта Node.js во время выполнения. Они позволяют хранить конфиденциальную информацию, такую ​​как учетные данные базы данных или ключи API, отдельно от кодовой базы. Это позволяет разработчикам скрывать конфиденциальную информацию от систем контроля версий, сохраняя при этом доступ к ней в приложении.

В Node.js переменные env обычно хранятся в файле с именем «.env» в корне проекта. Системы контроля версий обычно игнорируют этот файл, поэтому конфиденциальная информация не будет передана другим пользователям. Чтобы получить доступ к переменным env в приложении Node.js, разработчики могут использовать такой пакет, как «dotenv», который упрощает загрузку и доступ к переменным env из файла «.env».

Когда переменные env загружены и доступны, они могут настраивать различные аспекты приложения, такие как подключение к базе данных, порт сервера или ключи API. Например, вместо жесткого кодирования строки подключения к базе данных в коде разработчик может использовать переменную env для хранения строки подключения и доступа к ней во время выполнения. Это позволяет легко переключаться между базами данных или средой разработки и производства.

Использование переменных env также делает управление различными конфигурациями между разными средами более управляемым. Например, разработчик может использовать другие переменные env для среды разработки и производства. Это позволяет легко переключаться между двумя средами без изменения кода, просто изменяя переменные env.

Помимо настройки приложения, переменные env также можно использовать для повышения безопасности приложения. Например, ключ или секрет API можно хранить в переменной env и получать к ним доступ во время выполнения, а не жестко запрограммировать в коде. Это значительно усложняет злоумышленникам доступ к конфиденциальной информации, поскольку она хранится отдельно от кодовой базы.

.env-файл

Файл .env обычно содержит пары ключ-значение, по одной на строку, которые представляют переменные среды для приложения Node.js. Вот пример того, как может выглядеть файл .env:

DATABASE_URL=mongodb://localhost:27017/myapp
PORT=3000
API_KEY=mysecretkey
SECRET=mysecret

В этом примере файл .env содержит четыре переменные: DATABASE_URL, PORT, API_KEY и SECRET.

Переменная DATABASE_URL содержит строку подключения к базе данных MongoDB. Переменная PORT содержит номер порта, который приложение должно прослушивать. Переменная API_KEY включает в себя ключ для доступа к определенному API. Переменная SECRET имеет секрет, который приложение использует для подписи токенов.

Использование переменных среды

Доступ к этим переменным можно получить в приложении Node.js с помощью пакета «dotenv» и объекта process.env, например:

require('dotenv').config()
console.log(process.env.DATABASE_URL)
console.log(process.env.PORT)
console.log(process.env.API_KEY)
console.log(process.env.SECRET)

Мне нравится использовать файл конфигурации, чтобы упростить использование переменных среды во всем моем проекте.

require('dotenv').config()

const config = {
    mongo: {
        live: process.env.MONGODB_URL,
        test: process.env.MONGODB_TEST_URL
    },
    port: process.env.SERVER_PORT ? Number(process.env.SERVER_PORT) : 5001,
    host: process.env.HOST,
    env: process.env.NODE_ENV,
    jwtSecret: process.env.JWT_SECRET,
    jwtExp: 86400,
    corsWhitelist: process.env.CORS_DOMAINS,
    aws: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        region: process.env.AWS_REGION,
        fromEmail: process.env.AWS_FROM_EMAIL
    },
};

module.exports = config;

С этой модификацией объект config можно импортировать и использовать в других файлах с помощью функции require:

const config = require('./config');
console.log(config.port);
console.log(config.mongo.live);

Использование переменных среды в облаке

Хорошо, теперь мы можем получить доступ к переменным среды локально, но как нам получить к ним доступ в наших облачных средах?

У облачных провайдеров есть разные способы установки переменных среды для приложений, работающих на их платформах. Вот несколько примеров некоторых популярных облачных провайдеров:

  • AWS Elastic Beanstalk. В AWS Elastic Beanstalk вы можете установить переменные среды, перейдя на страницу конфигурации вашей среды и нажав кнопку «Изменить» в разделе «Программное обеспечение». Вы можете добавить переменные среды в раздел «Свойства среды».
  • AWS Lambda. В AWS Lambda вы можете установить переменные среды для функции, перейдя на страницу конфигурации и прокрутив вниз до раздела «Переменные среды». Оттуда вы можете добавлять, редактировать или удалять переменные.
  • Облачные функции Google. В облачных функциях Google вы можете установить переменные среды, перейдя на страницу конфигурации функции, прокрутив вниз до раздела «Переменные среды» и настроив их.
  • Служба приложений Azure. В службе приложений Azure вы можете установить переменные среды, перейдя на страницу конфигурации вашего веб-приложения, прокрутив вниз до раздела «Настройки приложения» и добавив, отредактировав или удалив переменные. в теме.
  • Heroku: в Heroku вы можете установить переменные среды для приложения, выполнив команду heroku config:set с соответствующими парами ключ-значение. Например, heroku config:set MONGODB_URL=mongodb://example.com:27017/myapp
  • Docker. В Docker вы можете установить переменные среды, передав флаг -e при выполнении команды docker run. Например, docker run -e MONGODB_URL=mongodb://example.com:27017/myapp myimage

Всегда проверяйте документацию вашего конкретного облачного провайдера для получения более подробной информации о том, как установить переменные среды.

Настройка переменных .env в зависимости от среды

Существует несколько причин, по которым вам может потребоваться установить разные переменные среды в зависимости от среды:

  1. Разделение задач. Для разных сред могут потребоваться разные конфигурации. Например, среда разработки может использовать другую базу данных или API, чем производственная среда. Разделяя переменные среды, вы можете гарантировать, что для каждого домена используется правильная конфигурация.
  2. Безопасность. Конфиденциальная информация, такая как ключи API или учетные данные базы данных, должна храниться в секрете и не включаться в систему контроля версий. Скрывая конфиденциальную информацию об окружающей среде, вы можете гарантировать, что она не будет случайно раскрыта или передана другим пользователям.
  3. Простота развертывания. Переключение между различными средами во время развертывания более управляемо. Вам не нужно искать и изменять жестко заданные значения переменных в кодовой базе. Вам нужно только изменить переменную настройки, которую вы используете.
  4. Надежность. Вы можете быть уверены, что ваше приложение работает должным образом. Например, вы можете использовать тестовую базу данных в среде разработки и живую в рабочей среде. Кроме того, вы можете включить подробное ведение журнала во время отладки, но отключить его в рабочей среде, чтобы не загромождать журнал.

Сохраняя переменные среды отдельно для каждой среды, вы можете гарантировать, что используется правильная конфигурация, обеспечить безопасность конфиденциальной информации, упростить развертывание и гарантировать надежность.

В заключение, понимание переменных среды имеет решающее значение для правильной настройки проекта Node.js. Осваивая переменные env, разработчики могут эффективно отделять конфиденциальную информацию от кодовой базы, упростить процесс развертывания в различных средах и упростить общее управление проектом. Это только начало нашего пути к пониманию сути проекта Node. Следите за новостями из этой серии, пока мы продолжаем изучать другие важные темы. Удачного кодирования!

Другие истории из этой серии









Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.