Змінні оточення

При розробці веб-застосунків часто використовується доступ до баз даних, різних сервісів, API тощо. Доступ до цих сервісів відбувається переважно за допомогою секретних ключів. Виникає проблема, коли потрібно синхронізувати проєкт з репозиторієм на GitHub. Адже ці ключі та паролі (з огляду безпеки) не можна викладати у загальний доступ.

Для розв'язання цього питання використовують змінні середовища. Їх створюють за допомогою модуля dotenv, а завантажують з файлів з розширенням .env.

Ці файли створює сам розробник. Файли .env можна розмістити як в корені проєкту, так і в якомусь підкаталозі.

Після підключення модуля у нашому додатку, зміні оточення додаються в об'єкт process.env. А вже із нього ці змінні ми можемо використовувати в нашому проєкті.

Файл .env ОБОВʼЯЗКОВО треба додати до файлу .gitignore. Утім, для інших розробників можна створити .env.example зі структурою оригінального файлу, але із заміненими значеннями секретних ключів.

Розберемо роботу з цими файлами:

Встановимо модуль

terminal
npm i dotenv

Заімпортуємо модуль в наш проєкт сервера

index.js
const dotenv = require("dotenv");

У корені проєкту створимо файл .env і додамо у нього змінні:

.env
APP_NAME='My App'
PORT=3000
MONGO_URL='real_mongodb_url'
SECRET_KEY=12345678

Тепер у файлі програми index.js треба якомога раніше підключити наш файл.

index.js
dotenv.config({ path: "./.env" });

І тепер визначені в .env змінні будуть доступні в нашій програмі як:

Щоб в цьому переконатися, можна вивести їх в консоль:

У файлі .env ми можемо зберігати URL, порти, ключі від вервісів і баз даних тощо.

Коментарі у файлі .env пишуть після символа #.

Як приклад візьмемо порт нашого сервера з оточення. Можна також (не обовʼязково) якщо порт буде невизначений, то дати йому дефолтне значення 3000:

Завантаження різних файлів оточення в залежності від запущеного скрипта

При запуску сервера можемо визначити змінну оточення, в якій зберігатимемо назву режиму в якому запускаємо сервер. Для цього пропишемо відповідне налаштування в package.json в розділі scripts:

Тобто на цьому етапі ми в змінну оточення process.env.NODE_ENV визначаємо в якому режимі запустили сервер.

Створимо два окремі файли production.env та development.env в яких будемо зберігати різні конфігурації змінних оточення. Покладемо ці файди в папку enviroments.

Раніше ми вже розглянули підключення файлу змінних оточення. Тепер будемо підключати різні файли в залежності від змінної NODE_ENV визначеної при запуску сервера. Також виведемо в консоль NODE_ENV і APP_NAME і запустимо сервер в різних режимах:

Запустимо сервер у двох режимах і переконаємося, що вантажиться відповідний файл змінних оточення:

Вантажиться development.env
Вантажиться production.env

Тобто NODE_ENV - встановлюється під час запуску сервера коли запускаємо скрипт. Відповідно знаючи яка конфігурація оточення у нас, ми й під'єднуємо той чи інший файл змінних оточення.

ЩЕ РАЗ ПОПЕРЕДЖЕННЯ: Ці файли треба додати в .gitignore, бо вони містять секретні дані і не можна їх вантажити на GitHub.

Щоб поділитися шаблоном цих файлів створіть їх копії production.env.example та development.env.example. АЛЕ замініть всі секретні параметри.

Покликання:

dotenv

Підсвічення синтаксису файлів .env

Last updated