Конфигурация СУБД
Все необходимые данные для подключения и работы сервера приложения с используемыми СУБД можно задать в файле /etc/webim/db.json
, а также в json-файлах в директории /etc/webim/db.json.d
. При инициализации сервера все данные, хранящиеся в этих файлах, будут объединены в один словарь, так что Вы можете использовать оба предложенных способа. После создания словаря в нём будет произведён поиск необходимых данных. При удачном исходе поиска данные будут использованы для подключения к СУБД.
Вы можете задать конфигурации для всех используемых системой СУБД:
-
Аналитические СУБД - MySQL, MariaDB, PostgreSQL. Ключевые СУБД, используются для хранения большей части данных;
-
Колоночная СУБД - ClickHouse, используется для работы с модулем Статистики v2;
-
Поисковый движок - Elasticsearch, используется для ускорения поиска по истории чатов;
Из представленного списка обязательными для работы сервиса являются только реляционные СУБД - одна из них должна быть активна, настроена и подключена к серверу. Остальные СУБД являются опциональными и подключаются при необходимости.
Структура файла конфигурации СУБД
В db.json
предусмотрена конкретная структура, неследование которой может повлечь за собой неработоспособность сервиса. Параметры для подключения СУБД хранятся в объекте dbs
. Необходимым минимумом для работы сервиса является наличие в объекте dbs
объектов meta
и pro.default
, внутри которых хранятся параметры, используемые сервером для подключения к соответствующим базам реляционной СУБД. Перечень принимаемых параметров зависит от типа СУБД, который указывается в соответствующем объекте.
В объекте default
содержатся параметры для подключения к СУБД по умолчанию. Его наличие является обязательным для схемы pro
и опциональным для остальных СУБД (кроме схемы meta
- её параметры не оборачиваются в какие-либо дополнительные объекты, т. к. эта схема существует в единственном экземпляре и содержит в себе информацию об аккаунтах). В случае, если на Вашем Webim Server работает только один аккаунт, Вы можете использовать в качестве ключа обёртки как default
, так и имя Вашего аккаунта (указанный Вами при регистрации сайт без точек). В тех случаях, если на Вашем Webim Server работают несколько аккаунтов, необходимо "расселить" их по разным БД, в противном случае данные из БД будут доступны всем аккаунтам. Для каждого аккаунта необходимо указать свою конфигурацию для подключения к СУБД, ключом для такой конфигурации будет имя аккаунта (например, wwwtestru
).
При необходимости (например, при возникновении дублирования данных или большом размере конфигурационного файла) параметры подключения к СУБД можно хранить отдельно от основной конфигурации (в т. ч. и в другом файле). Для этого используется объект connections
, внутри которого могут находиться объекты с произвольными именами, содержащие в себе параметры подключения к СУБД. Для их применения в конфигурации необходимо указать параметр connection
, значением которого является один из ключей connections
. Во избежание путаницы мы рекомендуем удалять из конфигурации подключения параметры, указанные в используемом объекте из connections
. Параметры из connection
являются приоритетными в сравнении с остальными параметрами конфигурации, указанными в объекте.
Описание принимаемых параметров конфигурации СУБД
Список возможных типов СУБД:
mysql
postgresql
clickhouse
elasticsearch
N.B.
В случае, если Вы желаете использовать MariaDB, в качестве типа СУБД укажите mysql
. Принимаемые параметры этой СУБД аналогичны параметрам MySQL.
Список принимаемых параметров для MySQL и MariaDB:
Параметр | Тип | Пример | Описание | Является обязательным |
---|---|---|---|---|
type |
String |
mysql |
Тип СУБД | Нет, так как любая СУБД по умолчанию имеет тип mysql |
host |
String |
127.0.0.1 |
Адрес сервера СУБД (IPv4 или доменное имя) | Да |
port |
Integer |
3306 |
Порт для подключения к СУБД | Нет, по умолчанию используется порт, соответствующий типу СУБД (параметр type ) |
user |
String |
webim_site |
Учётная запись СУБД, используемая для выполнения запросов к БД. Обязательно наличие всех привилегий | Да |
password |
String |
somepass |
Пароль для соответствующей учётной записи СУБД | Да |
database |
String |
webim_hosted_meta |
Название БД, к которой будет осуществляться подключение | Да |
slave |
Object |
Slave-узел для СУБД, используется при масштабировании (репликации). Внутри объекта содержатся аналогичные приведённым в таблице параметры. Репликация между различными СУБД не поддерживается. | Нет |
Список принимаемых параметров для PostgreSQL:
Параметр | Тип | Пример | Описание | Является обязательным |
---|---|---|---|---|
type |
String |
postgresql |
Тип СУБД | Да |
host |
String |
127.0.0.1 |
Адрес сервера СУБД (IPv4 или доменное имя) | Да |
port |
Integer |
5432 |
Порт для подключения к СУБД | Нет, по умолчанию используется порт, соответствующий типу СУБД (параметр type ) |
user |
String |
webim_site |
Учётная запись СУБД, используемая для выполнения запросов к БД. Обязательно наличие всех привилегий | Да |
password |
String |
somepass |
Пароль для соответствующей учётной записи СУБД | Да |
db |
String |
some_db |
Название БД, к которой будет осуществляться подключение | Да |
schema |
String |
webim_hosted_meta |
Название схемы, с которой будут выполняться действия | Да |
slave |
Object |
Slave-узел для СУБД, используется при масштабировании (репликации). Внутри объекта содержатся аналогичные приведённым в таблице параметры. Репликация между различными СУБД не поддерживается. | Нет |
Список принимаемых параметров для ClickHouse:
Параметр | Тип | Пример | Описание | Является обязательным |
---|---|---|---|---|
type |
String |
clickhouse |
Тип СУБД | Да |
host |
String |
127.0.0.1 |
Адрес сервера СУБД (IPv4 или доменное имя) | Да |
port |
Integer |
8443 |
Порт для подключения к СУБД | Нет, по умолчанию используется порт, соответствующий типу СУБД (параметр type ) |
user |
String |
webim_stats |
Учётная запись СУБД, используемая для выполнения запросов к БД. Обязательно наличие всех привилегий | Да |
password |
String |
somepass |
Пароль для соответствующей учётной записи СУБД | Да |
database |
String |
webim_stats |
Название БД, к которой будет осуществляться подключение | Да |
slave |
Object |
Slave-узел для СУБД, используется при масштабировании (репликации). Внутри объекта содержатся аналогичные приведённым в таблице параметры. | Нет |
Для подключения к ClickHouse также необходимо объявить пустой объект stats
.
Список принимаемых параметров для Elasticsearch:
Параметр | Тип | Пример | Описание | Является обязательным |
---|---|---|---|---|
type |
String |
elasticsearch |
Тип СУБД | Да |
host |
String |
127.0.0.1 |
Адрес сервера СУБД (IPv4 или доменное имя) | Да |
port |
Integer |
9200 |
Порт для подключения к СУБД | Нет, по умолчанию используется порт, соответствующий типу СУБД (параметр type ) |
user |
String |
elastic |
Учётная запись СУБД, используемая для выполнения запросов к БД. Обязательно наличие всех привилегий | Да |
password |
String |
somepass |
Пароль для соответствующей учётной записи СУБД | Да |
scheme |
String |
http |
Используемый протокол | Да |
index_name_template |
String |
{account}--{object} |
Шаблон, по которому будут формироваться индексы | Да |
Примеры конфигураций
Стандартная конфигурация: реляционная СУБД (MySQL)
{
"dbs": {
"meta": {
"type": "mysql",
"host": "database",
"user": "webim_site",
"password": "password",
"database": "webim_site"
},
"pro": {
"default": {
"connection": "db1"
}
}
},
"connections": {
"db1": {
"type": "mysql",
"host": "database",
"user": "webim_service",
"password": "password"
}
}
}
Рекомендуемая конфигурация: реляционная СУБД (MySQL), колоночная СУБД (ClickHouse)
{
"dbs": {
"meta": {
"type": "mysql",
"host": "database",
"user": "webim_site",
"password": "password",
"database": "webim_site"
},
"pro": {
"default": {
"connection": "db1"
}
},
"stats_root": {
"default": {
"connection": "ch1"
}
},
"stats": {}
},
"connections": {
"db1": {
"type": "mysql",
"host": "database",
"user": "webim_service",
"password": "password"
},
"ch1": {
"type": "clickhouse",
"host": "clickhouse",
"user": "default",
"password": "password"
}
}
}
Продвинутая конфигурация: реляционная СУБД (MySQL) с репликацией, колоночная СУБД (ClickHouse), поисковый движок (Elasticsearch)
{
"dbs": {
"meta": {
"type": "mysql",
"host": "database",
"user": "webim_site",
"password": "password",
"database": "webim_site"
},
"pro": {
"default": {
"connection": "db1",
"slave": {
"connection": "db2"
}
}
},
"stats_root": {
"default": {
"connection": "ch1"
}
},
"stats": {},
"elastic": {
"default": {
"type": "elastic",
"host": "elasticsearch",
"port": 9200,
"user": "elastic",
"password": "password",
"scheme": "http",
"index_name_template": "{account}-{object}"
}
}
},
"connections": {
"db1": {
"type": "mysql",
"host": "database",
"user": "webim_service",
"password": "password"
},
"db2": {
"type": "mysql",
"host": "database_replica",
"user": "webim_service",
"password": "webim_service"
},
"ch1": {
"type": "clickhouse",
"host": "clickhouse",
"user": "default",
"password": "password"
}
}
}