# Главные файлы настроек

Webim Server читает основные настройки из файлов `main.ini` и `main.json`, а также из дополнительных файлов в каталогах `main.ini.d` и `main.json.d`. Эти источники объединяются в итоговую конфигурацию при старте компонентов.

## Расположение файлов

По умолчанию главные файлы настроек расположены в каталоге `/etc/webim/`:

  * `/etc/webim/main.ini`

  * `/etc/webim/main.ini.d/*.ini`

  * `/etc/webim/main.json`

  * `/etc/webim/main.json.d/*`

Имена `main.ini`, `main.json`, а также каталогов `main.ini.d` и `main.json.d` **заданы в коде и не могут быть изменены настройками**.

  * В `main.ini.d` можно размещать один или несколько файлов с **любыми именами**, но с расширением `.ini`.

  * В `main.json.d` можно размещать `.json`-файлы, однако для совместимости всех компонентов рекомендуется использовать файл **`main.json.d/main.json`** (см. ниже).

## Форматы файлов

### main.ini

`main.ini` — ini-подобный файл с плоской структурой `ключ=значение`.

Пример:

```
service_user=service
service_password=secret
secure_internal_requests=true
nginx_upload_size=10
```

Массивы задаются через суффикс `[]` (каждое значение — отдельной строкой):

```
my_ips[]=192.168.10.10
my_ips[]=192.168.10.20
frontend_ips[]=192.168.10.10
```

Примечания:

  * Секции вида `[section]` в ini-стиле не используются (в части компонентов такие строки будут игнорироваться).

  * Комментарии в строках допускаются (обычно через `;`, `#`), но рекомендуется не смешивать комментарии и значения в одной строке.

### main.json

`main.json` — JSON-файл, который поддерживает древовидную (вложенную) структуру настроек.

Пример:

```
{
  "email_method_by_email_type": {
    "default": "smtp",
    "php": "smtp",
    "default_notification": "mailgun"
  },
  "password_hashers": [
    {"id": "md5-legacy", "algo": "md5", "salt": "legacy-salt"},
    {"id": "sha256", "algo": "sha256", "salt": "new-salt"}
  ],
  "encryption": [
    {"id": "fernet-default", "algo": "fernet-pbkdf2", "password": "dev-password", "salt": "dev-salt"}
  ],
  "partner_settings": {
    "default": {"domain": "webim.ru"},
    "partner1": {"domain": "example.com"}
  }
}
```

## Как собираются настройки из main.ini/main.json и каталогов *.d

### Какие файлы читаются

Компоненты Webim Server читают настройки из следующих путей:

  * `main.ini`:

    * `/etc/webim/main.ini`

    * все файлы `*.ini` в `/etc/webim/main.ini.d/`

  * `main.json`:

    * `/etc/webim/main.json`

    * файлы в `/etc/webim/main.json.d/` (см. совместимость ниже)

Если какой-либо из файлов отсутствует, он просто пропускается. Наличие **каждого отдельного** файла (например, только `main.ini` или только `main.json`) само по себе не является обязательным, но итоговая конфигурация должна содержать параметры, необходимые используемым компонентам и включённым функциям.

### Правила объединения (merge)

При объединении настроек используются следующие правила:

  * **Скалярные значения** (строки/числа/булевы значения) при совпадении ключа **переопределяются** значением из более позднего источника.

  * **Словари/объекты** (map/dict) при совпадении ключа **объединяются рекурсивно** по ключам.

  * **Списки/массивы** при совпадении ключа **конкатенируются** (элементы добавляются в конец).

Важно:

  * Порядок чтения файлов **внутри каталогов** `main.ini.d` и `main.json.d` **не следует считать гарантированным**. Не рекомендуется полагаться на «перезапись» одного и того же ключа в разных файлах внутри одного каталога. Если требуется предсказуемое поведение — храните конкретный ключ в одном месте.

### Совместимость main.json.d между компонентами

Часть компонентов (в частности, некоторые Python-утилиты) исторически читает **только** файл:

  * `/etc/webim/main.json.d/main.json`

Другие компоненты (например, Admin Backend и PHP-часть) могут читать **все** `*.json` в каталоге `main.json.d`.

Рекомендация: чтобы настройки из `main.json.d` гарантированно подхватывались всеми компонентами, используйте файл:

  * `/etc/webim/main.json.d/main.json`

А дополнительные `.json`-файлы в `main.json.d` применяйте только если вы точно понимаете, какие компоненты их читают в вашей инсталляции.

## Конфигурация Redis (`/etc/webim/redis.json`)

Для **Admin Backend** подключение к Redis берётся из файла:

  * `/etc/webim/redis.json`

Имя подключения передаётся параметром запуска `--redis-connection`.

Минимальный пример `redis.json`:

```json
{
  "connections": {
    "my_local_redis": {
      "url": "redis://127.0.0.1:6379/0"
    }
  }
}
```

Далее в параметре запуска компонента указывается имя подключения:

```text
--redis-connection=my_local_redis
```

!!! Warning "Важно"
    * для выбранного подключения должен быть задан `url`;
    * если указанного имени нет в `connections`, компонент также завершит работу с ошибкой;
    * для **Admin Backend** в многонодовом режиме одного параметра `--redis-connection` недостаточно: вместе с ним должен быть задан и `--cluster-name`.

## Обязательные параметры

Наличие конкретных «обязательных» параметров зависит от режима работы (hosted/облако), подключённых компонентов и включённых интеграций.

При этом Webim Server в типовой инсталляции ожидает, что в суммарной конфигурации (из всех источников) будут присутствовать ключевые параметры:

  * параметры сервисной авторизации для внутренних запросов (например, `service_user`, `service_password`, `service_password_salt`);

  * сетевые параметры (например, `my_ips[]`, `frontend_ips[]`) — если они используются вашей схемой развёртывания;

  * пути к рабочим директориям (например, `ready_images_dir`, `web_cache_dir`, а также пути к данным аккаунтов).

Если включены дополнительные компоненты/интеграции, становятся обязательными и соответствующие параметры (например, параметры Mailgun/SMTP для почты и т. п.).

## Параметры

Ниже перечислены наиболее используемые параметры, которые могут встречаться в главных файлах настроек. Для `main.json` параметры задаются соответствующими ключами/объектами JSON.

| Параметр                                                   | Где задаётся | Обязательность | Тип                    | Пример                               | Значение                                                                                                                                                      |
|------------------------------------------------------------|--------------|----------------|------------------------|--------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `service_user`                                             | `main.ini`   | Да             | строка                 | `service`                            | Логин сервисного пользователя для внутренних запросов (Basic Auth).                                                                                           |
| `service_password`                                         | `main.ini`   | Да             | строка                 | `secret`                             | Пароль сервисного пользователя для внутренних запросов (Basic Auth).                                                                                          |
| `service_password_salt`                                    | `main.ini`   | Да             | строка                 | `some_salt`                          | Соль, используемая в механизмах сервисной авторизации (в т.ч. при проверке пароля сервисного доступа).                                                        |
| `accounts-base-local-dir`                                  | `main.ini`   | Да             | строка (путь)          | `/var/pro/client-data/cd`            | Локальный путь к директории, где хранятся данные и конфигурационные файлы учётных записей.                                                                                     |
| `my_ips[]`                                                 | `main.ini`   | Зависит        | список строк (IP/CIDR) | `192.168.10.10`                      | IP-адреса/подсети, на которых работает Webim Server.                                                                                                          |
| `frontend_ips[]`                                           | `main.ini`   | Зависит        | список строк (IP/CIDR) | `192.168.10.10`                      | IP-адреса, на которых расположен фронтэнд Webim Server.                                                                                                       |
| `online_dir`                                               | `main.ini`   | Зависит        | строка (путь)          | `/var/cache/webim`                   | Директория для хранения онлайн-ресурсов и файлов.                                                                                                             |
| `web_cache_dir`                                            | `main.ini`   | Зависит        | строка (путь)          | `/var/cache/webim`                   | Директория для кэша Webim Server.                                                                                                                             |
| `ready_images_dir`                                         | `main.ini`   | Да             | строка (путь)          | `/var/cache/webim`                   | Директория для сохранения обработанных изображений.                                                                                                           |
| `logged_operators_dir`                                     | `main.ini`   | Зависит        | строка (путь)          | `/var/log/webim/operators`           | Директория для служебных файлов, связанных с логированием активности операторов (если используется).                                                          |
| `secure_internal_requests`                                 | `main.ini`   | Нет            | bool                   | `true`                               | Требование защищённых внутренних запросов (`true` — HTTPS, `false` — HTTP).                                                                                   |
| `nginx_upload_size`                                        | `main.ini`   | Нет            | int                    | `10`                                 | Максимальный размер загружаемого файла (МБ).                                                                                                                  |
| `blocked_notify_email`                                     | `main.ini`   | Нет            | строка (email)         | `somemail@example.com`               | Адрес для отправки уведомлений о блокировках.                                                                                                                 |
| `server_monitoring_email`                                  | `main.ini`   | Нет            | строка (email)         | `somemail@example.com`               | Адрес для уведомлений, связанных с мониторингом сервера.                                                                                                      |
| `service_notifications_emails`                             | `main.ini`   | Зависит        | строка (email)         | `somemail@example.com`               | Адрес(а) для отправки сервисных уведомлений (используется отдельными сервисами, например биллингом).                                                          |
| `webim_support_email`                                      | `main.ini`   | Нет            | строка (email)         | `support@example.com`                | Адрес службы поддержки.                                                                                                                                       |
| `mailgun_key`                                              | `main.ini`   | Зависит        | строка                 | `key-ExamPle3xAMPle`                 | API-ключ Mailgun (исторический параметр).                                                                                                                     |
| `channels_email_mailgun_api_key_v2`                        | `main.ini`   | Зависит        | строка                 | `3f9a1d...`                          | Новый API-ключ Mailgun для исходящих запросов. Указывать без префикса `key-`.                                                                                 |
| `channels_email_mailgun_webhook_signing_key`               | `main.ini`   | Зависит        | строка                 | `6c72bb...`                          | Ключ проверки подписи вебхуков Mailgun (timestamp/token/signature).                                                                                           |
| `mailgun_dev_domain`                                       | `main.ini`   | Зависит        | строка (домен)         | `sandbox1234.mailgun.org`            | Домен Mailgun для dev-режима.                                                                                                                                 |
| `hostedmode`                                               | `main.ini`   | Зависит        | bool                   | `true`                               | Режим работы: `true` — hosted, `false` — облако.                                                                                                              |
| `hostedmode_smtp_server`                                   | `main.ini`   | Зависит        | строка                 | `smtp.mailgun.org`                   | SMTP-сервер для hosted-режима (legacy-настройки).                                                                                                             |
| `hostedmode_smtp_port`                                     | `main.ini`   | Зависит        | int                    | `4242`                               | Порт SMTP-сервера (legacy-настройки).                                                                                                                         |
| `hostedmode_smtp_username`                                 | `main.ini`   | Зависит        | строка                 | `user`                               | Логин SMTP (legacy-настройки).                                                                                                                                |
| `hostedmode_smtp_password`                                 | `main.ini`   | Зависит        | строка                 | `pass`                               | Пароль SMTP (legacy-настройки).                                                                                                                               |
| `hostedmode_smtp_encryption`                               | `main.ini`   | Зависит        | enum                   | `tls`                                | Шифрование SMTP: `none`, `ssl`, `tls` (legacy-настройки).                                                                                                     |
| `hostedmode_smtp_auth_mode`                                | `main.ini`   | Зависит        | enum                   | `login`                              | Аутентификация SMTP: `login`, `plain`, `cram-md5`, либо пустое значение (legacy-настройки).                                                                   |
| `hostedmode_smtp_timeout`                                  | `main.ini`   | Зависит        | int                    | `30`                                 | Таймаут SMTP (секунды, legacy-настройки).                                                                                                                     |
| `hostedmode_smtp_skip_ssl_check`                           | `main.ini`   | Нет            | bool                   | `true`                               | Игнорирование проверки SSL/TLS сертификатов (legacy-настройки).                                                                                               |
| `https_domains[]`                                          | `main.ini`   | Нет            | список строк (домен)   | `example.com`                        | Список доменов, для которых включается логика HTTPS (если используется).                                                                                      |
| `channels_proxy_base_url`                                  | `main.ini`   | Зависит        | строка (URL)           | `https://api.proxyserver.com`        | Базовый URL сервиса прокси каналов.                                                                                                                           |
| `channels_proxy_api_url`                                   | `main.ini`   | Зависит        | строка (URL)           | `https://proxyserver.com`            | URL proxy API (создание/удаление канала для hosted и т. п.).                                                                                                  |
| `channels_proxy_api_secret_key`                            | `main.ini`   | Зависит        | строка                 | `s3cr3t`                             | Секретный ключ для операций с кастомными каналами через proxy API.                                                                                            |
| `channels_apple_chat_encrypted_data_length_check_disabled` | `main.ini`   | Нет            | bool                   | `false`                              | Включение/отключение проверки длины зашифрованных сообщений Apple Messages for Business.                                                                      |
| `docker_sub_net`                                           | `main.ini`   | Нет            | строка (CIDR)          | `172.195.0.0/28`                     | Подсеть для Docker (если используется).                                                                                                                       |
| `browscap-path`                                            | `main.ini`   | Нет            | строка (путь)          | `/var/pro/browscap/browscap.ini`     | Путь к browscap.ini для определения возможностей браузера.                                                                                                    |
| `browscap-csv-path`                                        | `main.ini`   | Нет            | строка (путь)          | `/var/pro/browscap/browscap.csv`     | Путь к browscap в формате CSV.                                                                                                                                |
| `nginx_geosearch`                                          | `main.ini`   | Нет            | bool                   | `false`                              | Включение геопоиска на стороне NGINX (если используется).                                                                                                     |
| `python_geosearch`                                         | `main.ini`   | Нет            | bool                   | `true`                               | Включение геопоиска на стороне Python (если используется).                                                                                                    |
| `registration_mail_jira`                                   | `main.ini`   | Нет            | строка (email)         | `somemail@example.com`               | Адрес для уведомлений о регистрации (если используется).                                                                                                      |
| `email_method_by_email_type`                               | `main.json`  | Нет            | объект (map)           | `{"default":"smtp","php":"mailgun"}` | Выбор метода отправки почты по типу письма. Ключи — тип письма или `default`, значения — `smtp` или `mailgun`.                                                |
| `password_hashers`                                         | `main.json`  | Зависит        | список объектов        | см. пример выше                      | Список поддерживаемых алгоритмов хеширования паролей операторов. Элемент: `{id, algo, salt}`. Если параметр не задан, используется legacy-логика.             |
| `encryption`                                               | `main.json`  | Нет            | список объектов        | см. пример выше                      | Настройки расшифровки значений формата `encrypted:<id>:<cipher>`. Поддерживается `algo=fernet-pbkdf2` (PBKDF2-SHA256). Элемент: `{id, algo, password, salt}`. |
| `partner_settings`                                         | `main.json`  | Зависит        | объект (map)           | см. пример выше                      | Настройки партнёров (например, домены). Обычно содержит ключ `default` и опциональные ключи партнёров.                                                        |

---

Источник: https://webim.ru/kb/devops/main-ini-configuration.html
