Skip to content

Latest commit

 

History

History
215 lines (159 loc) · 9.56 KB

env.md

File metadata and controls

215 lines (159 loc) · 9.56 KB

Гайд по конфигурации Sequelize и переменным окружения

Описание

В данном гайде описано по шагам, как настроить подключение к базе данных в Sequelize: основной способ — через файл database.json, который создаётся при инициализации проекта; отдельно рассмотрен вариант с переменными окружения через .env и database.js.


Основной способ: конфигурация через database.json

При выполнении команды npx sequelize-cli init Sequelize CLI создаёт стандартную структуру проекта и файл конфигурации в формате JSON. Путь к нему зависит от настроек в .sequelizerc.

1. Установить зависимости

npm i sequelize pg pg-hstore && npm i -D sequelize-cli

2. Создать файл .sequelizerc

В корне проекта создайте .sequelizerc, чтобы задать пути к конфигу, моделям, миграциям и сидерам. Для конфигурации укажите расширение .json — так CLI будет использовать формат JSON по умолчанию:

const path = require('path');

module.exports = {
  config: path.resolve('db', 'database.json'),
  'models-path': path.resolve('db', 'models'),
  'seeders-path': path.resolve('db', 'seeders'),
  'migrations-path': path.resolve('db', 'migrations'),
};

Если .sequelizerc не создавать, CLI по умолчанию создаст папку config и файл config/config.json.

3. Выполнить инициализацию

npx sequelize-cli init

Будут созданы:

  • папка db (или config, если не задан свой путь);
  • файл db/database.json (или config/config.json) — конфигурация подключения к БД;
  • папки db/models, db/migrations, db/seeders.

4. Структура и настройка database.json

Файл database.json содержит настройки для окружений development, test и production. После init в нём обычно указан MySQL; для PostgreSQL нужно заменить dialect и параметры подключения.

Пример db/database.json для PostgreSQL:

{
  "development": {
    "username": "your_username",
    "password": "your_password",
    "database": "your_database",
    "host": "127.0.0.1",
    "port": 5432,
    "dialect": "postgres"
  },
  "test": {
    "username": "your_username",
    "password": "your_password",
    "database": "your_test_database",
    "host": "127.0.0.1",
    "port": 5432,
    "dialect": "postgres"
  },
  "production": {
    "username": "your_username",
    "password": "your_password",
    "database": "your_production_database",
    "host": "127.0.0.1",
    "port": 5432,
    "dialect": "postgres"
  }
}

Поля конфигурации:

Поле Описание
username Имя пользователя СУБД
password Пароль
database Имя базы данных
host Хост (например, 127.0.0.1 или адрес сервера)
port Порт (для PostgreSQL обычно 5432)
dialect Тип БД: postgres, mysql, sqlite, mariadb

Дополнительные опции (при необходимости):

  • logging: false — отключить вывод SQL-запросов в консоль.
  • Для сидеров можно задать хранилище в самой БД (через конфиг при использовании сидеров в коде), в JSON же обычно хранятся только параметры подключения.

Окружение выбирается переменной NODE_ENV (например, development, test, production). Sequelize CLI и приложение берут из database.json блок с соответствующим именем.

Важно: не добавляйте database.json с реальными паролями в публичный репозиторий. Добавьте его в .gitignore и храните только шаблон (например, database.json.example) без секретов.


Альтернатива: переменные окружения и database.js

Если нужно не хранить пароли в репозитории и подставлять их из окружения (например, на сервере или в CI), конфигурацию можно вынести в JavaScript-файл и читать переменные из .env.

1. Установить зависимости

Помимо Sequelize и драйвера БД нужен пакет dotenv:

npm i dotenv sequelize pg pg-hstore && npm i -D sequelize-cli

2. Указать в .sequelizerc конфиг с расширением .js

В пути к конфигурации укажите файл database.js:

const path = require('path');

module.exports = {
  config: path.resolve('db', 'database.js'),
  'models-path': path.resolve('db', 'models'),
  'seeders-path': path.resolve('db', 'seeders'),
  'migrations-path': path.resolve('db', 'migrations'),
};

3. Создать файл db/database.js

В этом файле подключается dotenv и экспортируется объект конфигурации с теми же ключами (development, test, production):

require('dotenv').config();

module.exports = {
  development: {
    username: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
    host: process.env.DB_HOST,
    dialect: 'postgres',
    use_env_variable: process.env.DB_URL ? 'DB_URL' : undefined,
  },
  test: {
    username: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
    host: process.env.DB_HOST,
    dialect: 'postgres',
  },
  production: {
    username: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
    host: process.env.DB_HOST,
    dialect: 'postgres',
    use_env_variable: process.env.DATABASE_URL ? 'DATABASE_URL' : undefined,
  },
};

Пояснения:

  • require('dotenv').config(); — загружает переменные из файла .env в process.env.
  • process.env.DB_USER, process.env.DB_PASS и т.д. — подстановка значений из окружения.
  • use_env_variable: process.env.DB_URL ? 'DB_URL' : undefined — если задана переменная DB_URL, Sequelize может использовать одну строку подключения вместо отдельных полей (см. ниже).

Подключение через одну переменную окружения

Можно подключаться к базе, используя только одну переменную окружения — строку подключения (connection string). В конфиге для нужного окружения задаётся use_env_variable: 'DB_URL' (или другое имя переменной), а в .env в эту переменную записывается строка в формате:

[dialect]://[user]:[password]@[host]:[port]/[database]

Примеры:

  • PostgreSQL: postgres://admin:password123@127.0.0.1:5432/my-database
  • MySQL: mysql://root:secret@localhost:3306/app_db

Когда use_env_variable указан, Sequelize берёт все параметры (пользователь, пароль, хост, порт, базу, диалект) из этой строки; поля username, password, host и т.д. в таком случае можно не заполнять для данного окружения.

4. Создать файлы .env и .env.example

В .env (не коммитить в репозиторий) задайте фактические значения. Можно указать и отдельные переменные, и строку подключения; при наличии use_env_variable достаточно одной переменной в формате [dialect]://[user]:[password]@[host]:[port]/[database]:

DB_USER=admin
DB_PASS=password123
DB_NAME=my-database
DB_HOST=127.0.0.1
DB_URL=postgres://admin:password123@127.0.0.1:5432/my-database

Либо только строка подключения:

DB_URL=postgres://admin:password123@127.0.0.1:5432/my-database

В .env.example оставьте только ключи без секретов:

DB_USER=
DB_PASS=
DB_NAME=
DB_HOST=
DB_URL=

Итого: основной вариант — конфигурация через database.json после npx sequelize-cli init; альтернатива — database.js с переменными окружения и .env для безопасной подстановки учётных данных.