Рубрики
Без рубрики

Управляющие переменные среды в Node.js с dotenv

Автор оригинала: Marcus Sanatan.

Вступление

Развертывание приложения требует, чтобы разработчики поставить мысли и рассмотрение в том, как она настроен. Многие приложения развернуты в среде разработки, прежде чем развернуть в производственную среду. Нам нужно правильно настроить каждую среду, это может быть катастрофическое, если наше производственное приложение использовало нашу базу данных развития.

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

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

Каковы переменные среды?

От программирования мы знаем, что переменные хранятся значения, которые можно изменить. Они смены и могут варьироваться – отсюда и название Переменные Отказ

Переменные среды Внешние являются переменными, внешние для нашего применения, которые находятся в ОС или контейнере приложения. Переменная среды – это просто имя, сопоставленное к значению.

По соглашению название капитализировано E.g. [Защищена электронная почта] Отказ Значения являются строками.

Если вы откроете приложение терминала или командной строки в Linux, Mac OS или Windows и введите Установить , вы увидите список всех переменных среды для вашего пользователя.

Зачем использовать переменные среды?

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

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

  • HTTP Port и адрес
  • База данных, кэш и другое соединение для хранения
  • Расположение статических файлов/папок
  • Конечные точки внешних услуг
    • Например, в среде разработки Ваше приложение будет указывать на тестовый URL-адрес API, в то время как в производственной среде ваше приложение будет указывать на URL Live API.

Чувствительные данные, такие как клавиши API, не должны находиться в исходном коде или известные лицам, которые не нуждаются в доступа к этим внешним услугам.

Переменные среды в Node.js

Рассмотрим Hello World Node.js Приложение с переменными среды для хоста и порта приложение работает.

Создайте новый файл под названием hello.js В рабочем пространстве вашего выбора и добавьте следующее:

const http = require('http');

// Read the host address and the port from the environment
const hostname = process.env.HOST;
const port = process.env.PORT;

// Return JSON regardless of HTTP method or route our web app is reached by
const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'application/json');
    res.end(`{"message": "Hello World"}`);
});

// Start a TCP server listening for connections on the given port and host
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

Node.js предоставляет глобальную переменную Process.env , объект, который содержит все переменные среды, доступные для пользователя, выполняющего приложение. Ожидается, что имя хоста и порта, которое приложение будет работать, чтобы определиться окружающей средой.

Вы можете запустить это приложение, введя эту команду в терминале, Хост = Localhost Node Hello.js Предоставлено, у вас установлено Node.js. Вы заметите следующее сообщение на вашей консоли:

Server running at http://localhost:3000/

Создание и чтение переменных среды это так просто. Допустим, мы пишем микросервис, который общается с MySQL и Redis Экземпляр, мы хотели бы получить данные о подключении, доступные в наших переменных среда.

Мы могли бы в конечном итоге с командой такой:

$ DB_HOST=localhost DB_PORT=3306 DB_USER=test DB_PASSWORD=verySecret123!$ DB_MAX_CONNECTIONS=15 CACHE_ADDR=localhost CACHE_PORT= 6379 HOST=localhost PORT=3000 node hello.js

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

Библиотека Дотенва

Эта библиотека делает одну простую задачу: загружает переменные среды из A .env файл в Process.env Переменная в Node.js. Давайте использовать Доценв Для предыдущего примера.

Во-первых, нам нужно установить его через NPM :

$ npm init # Optional, creates a local package.json that prevents global installs
$ npm install dotenv --save

И тогда мы делаем одно минимальное изменение кода, добавьте эту строку на вершину hello.js :

require('dotenv').config()

Теперь в том же каталоге вашего приложения создайте новый файл под названием .env и добавьте следующее:

HOST=localhost
PORT=3000

Ваши переменные окружающей среды объявлены так же, как если бы вы вводили их в оболочку перед запуском команды узла. Вместо того, чтобы отделить каждое переменное назначение пространством, мы разделяем их по Новая линия Отказ Теперь в вашей оболочке, если вы входите Узел Hello.js Приложение будет работать на порту 3000 на вашем localhost !

Даже если Доценв используется в приложении, он полностью необязательно. Если нет .env Файл найден, библиотека не работает молча. Вы можете продолжать использовать переменные среды, определенные за пределами файла.

Примечание : Есть также много вариаций Доценв через другие языки программирования и рамки. Очень популярное руководство по созданию современных веб-приложений Приложение для двенадцати факторов Отказ Документ был создан многими разработчиками, созданными программными приложениями AS-A-Service. Одним из 12 соображений современного масштабируемого приложения является конфигурация, в частности, использование переменных среды для хранения конфигурации. Популярность этой методологии помогла топливо создать и популярность Доценв и подобные модули.

Использование производства

Хранение ваших переменных среды в файле поставляется с одним золотым правилом: никогда не совершайте его в репозиторий исходного кода. Вы не хотите, чтобы посторонние набирали доступ к секретам, как ключи API. Если вы используете Доценв Чтобы помочь управлять вашим переменным окружающей среды, обязательно включите .env Файл в вашем .gitignore или соответствующий черный список для вашего инструмента управления версиями.

Если вы не можете совершить .env Файл, то для разработчика должен быть какой-то способ узнать, какие переменные среды требуются для запуска программного обеспечения. Для разработчиков часто встречается перечислить переменные среды, необходимые для запуска программы в Readme или подобная внутренняя документация.

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

HOST=
PORT=

Разработчик тогда клонирует репозиторий, скопируйте .sample-env Файл в новый .env Файл и заполните значения.

Если ваше приложение работает на физической машине или виртуальной машине (например, Digital Ocean Croplets , Amazon EC2 и Azure Virtual Machines ), тогда вы можете создать .env Во время вошении в сервер, и он будет работать так же, как это сделано на вашем локальном компьютере.

Если ваше приложение работает на контейнере Docker или поставщик платформы, как Heroku или Openshift Затем вы сможете настроить переменные среды без использования .env файл.

Помните , он не работает, поэтому он не повлияет на работу приложения, если файл отсутствует.

Заключение

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

С приложениями Node.js переменные среды доступны через Process.env Глобальная переменная. Мы можем установить переменные среды, прежде чем мы запустим Узел команда или мы можем использовать Доценв Библиотека, которая позволяет нам определить нашу переменные среды в .env файл.

.env Файл никогда не должен быть в репозитории исходного кода.