В данном гайде описано по шагам, как настроить подключение к базе данных в Sequelize: основной способ — через файл database.json, который создаётся при инициализации проекта; отдельно рассмотрен вариант с переменными окружения через .env и database.js.
При выполнении команды npx sequelize-cli init Sequelize CLI создаёт стандартную структуру проекта и файл конфигурации в формате JSON. Путь к нему зависит от настроек в .sequelizerc.
npm i sequelize pg pg-hstore && npm i -D sequelize-cliВ корне проекта создайте .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.
npx sequelize-cli initБудут созданы:
- папка
db(илиconfig, если не задан свой путь); - файл
db/database.json(илиconfig/config.json) — конфигурация подключения к БД; - папки
db/models,db/migrations,db/seeders.
Файл 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) без секретов.
Если нужно не хранить пароли в репозитории и подставлять их из окружения (например, на сервере или в CI), конфигурацию можно вынести в JavaScript-файл и читать переменные из .env.
Помимо Sequelize и драйвера БД нужен пакет dotenv:
npm i dotenv sequelize pg pg-hstore && npm i -D sequelize-cliВ пути к конфигурации укажите файл 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'),
};В этом файле подключается 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 и т.д. в таком случае можно не заполнять для данного окружения.
В .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 для безопасной подстановки учётных данных.