Перейти к содержанию

Конфигурация СУБД

Все необходимые данные для подключения и работы сервера приложения с используемыми СУБД можно задать в файле /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"
        }
    }
}