Меню

Сконфигурируем наш сервер Nodejs

04.07.2018 - Back-end, NodeJS

Configuration in Nodejs Express

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

Есть очень хороший пакет для управления конфигурацией — один из самых популярных — rc. Наберите в гугле npmrc. Но с этим пакетом довольно много различных проблем, поэтому рассмотрим не такой популярный пакет, который хорошо спроектирован и легок в использовании. Наберите в гугле npm config.

Давайте установим его

npm i config

Теперь создадим папку config. В этой папке должен быть файл конфигурации по умолчанию. Давайте создадим его — default.json. Создадим json объект, для определения настроек по умолчанию. Например, давайте укажем название приложения.

{
    "name": "My Express App",
}

Теперь давайте создадим другой файл — development.json. В этом файле мы можем указать настройки конкретно для среды разработки. Также мы можем перезаписать настройки указанные в default.json по умолчанию. Также мы можем указать дополнительные настройки. Эти настройки могуть быть сложными объектами. Например настройка почты — mail.

{
    "name": "My Express App - Development",
    "mail": {
        "host": "dev-mail-server"
    }
}

Теперь создадим другой конфигурационный файл под названием — production.json.
И укажем там немного другие настройки.

{
    "name": "My Express App - Production",
    "mail": {
        "host": "prod-mail-server"
    }
}

Теперь перейдем к нашему index.js файлу. И в самом вверху подгрузим config модуль.

const config = require('config');

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

Например давайте получим имя текущего названия приложения, указанное в настройках. Вызываем объект config, у него есть метод get, которому в качестве аргумента передаем название свойства. Теперь выведем настройки почты, в этот раз в качестве аргумента передаем настройку, но в виде обращения к объекту в виде dot нотации. Хотя мы передаем строку.

console.log(`Application Name: ${config.get('name')}`);
console.log(`Mail Server: ${config.get('mail.host')}`);

Теперь давайте установим среду как среду разработки и запустим сервер.

export NODE_ENV=development

Мы увидим

Morgan enabled...
Application Name: My Express App - Development
Mail Server: dev-mail-server
We listen 3000

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

export password=1234

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

export app_password=1234

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

Вернемся в папку config и создадим другой файл — custom-environment-variables.json. Название файла — очень важно. И в этом файле мы создадим карту конфигурационных настроек из переменных среды. Мы какбы привязываем настроки конфигурации к переменным среды. Также вместо переменной среды, это может быть аргумент командной строки (для этого можно посмотреть документацию).

{
    "mail": {
        "password": "app_password"
    }
}

Теперь давайте перейдем в index.js и отобразим пароль майл сервера, чтобы проверить что всё работает.

console.log(`Mail Password: ${config.get('mail.password')}`);
Application Name: My Express App - Production
Mail Server: prod-mail-server
Mail Password: 1234
We listen 3000
Метки: , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *