|
На уровне системы существует реестр кластеров RestFS, с которыми может работать система.
По умолчанию в реестре кластеров RestFS есть кластер default, который отображается в URL: http://system.restfs.ecss:9990
Имя кластера RestFS может быть любым, кроме
Кластер RestFS с именем default не может быть удален. |
На уровне системы команды по управлению/мониторингу RestFS располагаются по пути /restfs.
На уровне виртуальной АТС — /domain/<DOMAIN>/restfs/.
Для запуска RestFS в режиме одной ноды достаточно поставить пакет ecss-restfs. В ходе установки буден задан ряд вопросов. Далее, нужно запустить и проверить состояние сервиса restfs.
sudo apt install ecss-restfs sudo systemctl start ecss-restfs.service sudo systemctl status ecss-restfs.service |
По умолчанию сервис ожидает HTTP-запросы на порту 9990 и работает с каталогом /var/lib/ecss/restfs.
Для того чтобы обеспечить репликацию данных между серверами кластера, необходимо настроить glusterfs-server. В качестве примера приведена система ECSS-10, работающая в кластере, со следующими настройками:
Запуск RestFS в режиме кластераДля запуска RestFS в режиме кластера достаточно, чтобы пакет ecss-restfs был установлен и запущен сразу на двух нодах. Команда для запуска сервиса ecss-restfs:
Запуск RestFS в случае недоступности других участников кластераВ применяемой концепции glusterfs все сервера равнозначны. Однако раздел volume не активируется при отсутствии кворума (кластер имеет кворум при наличии и активности достаточного количества голосующих элементов кластера с одинаковым согласованным представлением кластера). Это защитный механизм, который характерен для всех распределенных отказоустойчивых систем и призван защитить систему от split-brain — ситуация, когда каждая система считает, что другая нода вышла из строя. Если включение второго сервера невозможно либо затягивается на длительное время, то можно вручную перевести volume в рабочий режим, выполнив команду:
|
sudo gluster volume set ecss_volume cluster.favorite-child-policy size |
Сервис запускается в определенное время и конвертирует файлы с расширением "wav" в "mp3". Для конвертации используется приложение ffmpeg.
В случае кластерной конфигурации, для предотвращения одновременной обработки/конвертации/удаления одного файла (.pcm/.wav/.mp3) на разных серверах ecss1/ecss2 → сервис ecss-restfs-crawler должен быть запущен только на одном из серверов кластера. Для этого на сервере ecss2 выполнить следующие команды:
|
Управление сервисом осуществляется командой dpkg reconfigure ecss-restfs, где в ходе настройки пакета задаётся соответствующий вопрос о требовании включения конвертации записей.
Настройку через конфигурационные файлы следует использовать только в том случае, если вы точно знаете, что делаете. Для настройки сервиса необходимо выставить нужные опции в файле /etc/ecss/ecss-restfs/crawler.json:
"dirs": {
"workdir": "/var/lib/ecss/restfs",
"excluded": [
"system",
"domain/*/asr",
"domain/*/sounds"
]
}, |
Файл содержит параметры, передаваемые конвертору:
"files": {
"wav": {
"enabled": "true",
"opt": "-v 0 -y",
"convert": "-vn -ab 192 -ac 1",
"ext": "mp3"
},
"pcm": {
"opt": "-f s16le -ar 8k -ac 1 -v 0 -y",
"convert": "",
"ext": "wav"
} |
|
"transcribe": {
"enabled": "false",
"statistics": "false",
"ext": "vtt"
} |
/lib/systemd/system/ecss-restfs-crawler.timer |
По умолчанию конвертация запускается ежедневно в 00:00. Пример настроек:
sasha@ecss1:~$ sudo systemctl cat ecss-restfs-crawler.timer # /lib/systemd/system/ecss-restfs-crawler.timer [Timer] OnCalendar=00:00 [Unit] Description=Run conversion every day in 00:00 [Install] WantedBy=multi-user.target |
где:
Изменить настройки таймера можно с помощью команды:
sudo systemctl edit ecss-restfs-crawler.timer |
Синтаксис настройки таймера приведен в документации по команде man systemd.timer.
/lib/systemd/system/ecss-restfs-crawler.service |
Данный файл содержит следующие параметры:
TtS (Text-to-Speech) — сервис синтеза речи, работающий с Yandex-Speechkit , позволяющий озвучить любой текст на нескольких языках.
Для корректной работы tts (Text-to-Speech) через Yandex сервис требуются выполнить следующие шаги:
|
Для добавления дополнительного профиля Яндекс.Облако нужно отправить http-запрос:
curl localhost:9990/generate?OAuth=<OAuth_токен>&folderId=<folderId> |
Для немедленного обновления IAM-токена нужно отправить следующий http-запрос:
curl localhost:9990/generate?OAuth=<OAuth_токен>&folderId=<folderId>&update_key=True |
Eltex TTS — сервис синтеза речи, предоставляемый приложением ASR (документация), так же как и Yandex-Speechkit, позволяет озвучить любой текст, но только на русском языке с возможностью выбора одно из нескольких голосов.
Команда для установки ecss-restfs:
sudo apt install ecss-restfs |
Команда для реконфигурирования ecss-restfs:
sudo dpkg-reconfigure ecss-restfs |
Для работы сервиса Eltex TTS необходимо во время установки/реконфигурирования настроить следующие параметры:
1. Ответьте «Yes» на вопрос "Необходимо ли использование сервиса Text To Speech" (рисунок 1):

Рисунок 1 — Вопрос о необходимости использования сервиса Text To Speech
2. Выберите Eltex TTS сервис (рисунок 2):

Рисунок 2 — Выбор поддерживаемого сервиса Text To Speech
3. Укажите адрес и порт сервиса Eltex TTS (рисунок 3):

Рисунок 3 — Настройка адреса и порта сервиса Eltex TTS
4. Выберите желаемый голос для синтеза речи (рисунок 4):

Рисунок 4 — Выбор голоса сервиса Eltex TTS
После конфигурирования данных настроек, запросы на синтез речи будут отправляться на указанный сервис.
В системе ECSS-10 реализованы сервисы, которые в процессе своей работы формируют данные и сохраняют их на дисковое пространство. Такими сервисами являются:
Данные сервисы генерируют файлы и работают с дисковыми хранилищами.
Под распределенным хранилищем подразумевается возможность сохранять записанные файлы на разные хосты.

Рисунок 5 — Пример распределенного хранилища
Каждое хранилище состоит из следующих элементов:
Количество распределенных хранилищ не ограничено, возможно совмещение всех хранилищ на одном хосте. В базу данных сохраняется полный URI для записанного файла, поэтому, например, при прослушивании записи разговора из web-интерфейса, система обратится на сервер, идентифицируемый данным URI в базе данных.
Распределенная файловая система glusterfs автоматически синхронизирует файлы между нодами кластера. Таким образом, в кластерном варианте работы сервис при проблемах с одним из серверов автоматически будет делать попытку записи файла либо попытку его считывания с другого сервера.
Дисковое хранилище может работать в двух режимах:
Установите пакет restfs. Для этого необходимо выполнить следующую команду:
sudo apt install ecss-restfs |
Произведите изменения в конфигурационных файлах.
Необходимо проверить, и при необходимости настроить параметр MYSQL_IP в файле ecss-cocon-mysql:
/etc/dnsmasq.d/ecss-cocon-mysql: address=/cocon.mysql.ecss/<MYSQL_IP> |
и параметры ECSS_1_IP и ECSS_2_IP в файле ecss-broker:
/etc/dnsmasq.d/ecss-broker: address=/primary.broker.ecss/<ECSS_1_IP> address=/secondary.broker.ecss/<ECSS_2_IP> |
где:
Перезапустите сервисы dnsmasq и ecss-restfs.
Для этого выполните следующую команду:
sudo systemctl restart ecss-ds.service ecss-restfs.service |
Сконфигурируйте соотношение выделенных имен для хранилища на DNS-сервере (при использовании DNS-сервера) либо в локальных файлах /etc/hosts, находящихся на хостах медиа-сервера и web-конфигуратора (в случае, если DNS-сервер не используется).
Пример для варианта с /etc/hosts:
IP-REC1-STORAGE rec.media-storage.ecss IP-REC2-STORAGE rec.media-storage.ecss IP-FAX1-STORAGE fax.media-storage.ecss IP-FAX2-STORAGE fax.media-storage.ecss IP-VOICEMAIL1-STORAGE voicemail.media-storage.ecss IP-VOICEMAIL2-STORAGE voicemail.media-storage.ecss |
где:
Скорректируйте значение указателей ресурса URI для обращения к хранилищу.
По умолчанию для данных параметров установлено значение system. В этом случае сетевой адрес хранилища для всех трех сервисов одинаков. Его значение устанавливается командами /system/system-restfs-host и /system/system-restfs-port.
Для установки значения указателя ресурса URI для каждого из сервисов используется своя команда:
/domain/DOMAIN_NAME/properties/set call_record_server_peer <URI>
/domain/DOMAIN_NAME/properties/set fax_server_peer <URI>
/domain/DOMAIN_NAME/properties/set voicemail_server_peer <URI>
где:
Примеры команд для настройки сетевого хранилища на выделенном сервере с URI media-storage.ecss:
/domain/DOMAIN_NAME/properties/set call_record_server_peer rec.media-storage.ecss:9990 /domain/DOMAIN_NAME/properties/set fax_server_peer fax.media-storage.ecss:9990 /domain/DOMAIN_NAME/properties/set voicemail_server_peer voicemail.media-storage.ecss:9990 |
После выполнения настройки ресурса хоста все данные, формируемые сервисами, будут записываться на сервера, идентифицируемые теми URI, которые были указаны в командах настройки.
Для предотвращения ситуаций переполнения разделов хранилища нужно настроить пороги генерации предупреждений и аварийных сообщений о переполнении раздела (см. Пороги использования ресурсов). При достижении настроенного порога система автоматически сообщит об этом.
Для предотвращения переполнения разделов хранилища на уровне каждого кластера RestFS есть подсистема, которая позволяет автоматически удалять файлы по определенным правилам — autocleaner. Сервис autocleaner может быть сконфигурирован командами функции autocleaner , либо будут использованы дефолтные установки.
| Функция предотвращения переполнения разделов хранилища реализована, как глобально для кластера RestFS в целом, так и для каждого отдельного домена ECSS. В случае отсутствия файла "cleaner.json" в директории /var/lib/ecss/restfs/domain/<Имя_домена>/ , т.е. в данном домене не созданы правила удаления старых файлов, будет применятся глобальная конфигурация (указанная в файле /var/lib/ecss/restfs/cleaner.json, данный файл создается при установке RestFS). |
| { "rules": [ { "path": "records", "file-mask": "*.wav", "outdate": "180", "exclude": ["system"] }, { "path": "records", "file-mask": "*.pcm", "outdate": "180", "exclude": ["system"] }, { "path": "records", "file-mask": "*.meta", "outdate": "180", "exclude": ["system"] }, { "path": "records", "file-mask": "*.mp3", "outdate": "180", "exclude": ["system"] }, { "path": "fax", "file-mask": "*.pdf", "outdate": "180" }, { "global-path": "/tmp", "file-mask": "convert*.wav" }, { "global-path": "/tmp", "file-mask": "tts*.pcm" }, { "global-path": "/tmp", "file-mask": "dn_resolver*.json" } ] } |
параметр "path":"records" указывает путь поиска файлов относительно директории /var/lib/ecss/restfs/,
в данном примере /var/lib/ecss/restfs/domain/test_domain/records и /var/lib/ecss/restfs/domain/trueconf.ru/records :
|
параметр "file-mask": "*.wav"/ "*.mp3" указывает фильтр поиска файлов для проверки на старость :
|
параметр "outdate": "180" указывает как долго должны быть сохранены файлы с указанным критерием поиска (для примера *.mp3), в данном случае удалять все файлы старше 180 дней.
Для примера если сегодня 07 августа, то при значении outdate=180 будут удалятся файлы созданные до 08 февраля этого года.
Файлы "ai_you_test.wav" и "2025-08-06_12-02-27_o_42009-42007.mp3" созданы 24 апреля и 06 августа соответственно, поэтому не будут удалены.
параметр "exclude": ["system"] указывает директорию исключения.
|
В данном примере файлы activated.wav / ai_activated.wav / ai_added.wav / ai_agent_already_on.wav / ai_you_have.wav — находятся в директории "system" — директории исключения, поэтому они никогда не будут удалены. Файл ai_you_test.wav будет удален 21 октября.
Дополнительно для кластера RestFS в целом, есть возможность указать директорию, которая так же будет анализироваться сервисом autocleaner. По умолчанию добавлена директория "/tmp" , при этом указывается полный путь , от "/" файловой системы.
параметр "global-path": "/tmp" указывает глобальную директорию "/tmp" для сервиса autocleaner :
|
Для "global-path": можно указать только параметр "file-mask":
|
При необходимости настроить для определенного домена индивидуальные параметры, для примера увеличить время хранения файлов с 180 до 365 дней, можно использовать cleaner.json для домена. При использовании данного файла, параметры из глобального файла /var/lib/ecss/restfs/cleaner.json анализироваться не будут.
Файл cleaner.json должен находится — /var/lib/ecss/restfs/domain/<имя_домена>/cleaner.json.
|
Данный файл можно сконфигурировать через CoCon:
/domain/имя_домена/restfs/autocleaner/
действия:
add-rule — добавить новое правило;
change-rule— изменить правило;
info— посмотреть информацию , со списком всех правил;
remove-rule— удалить правило.
атрибуты:
rule position — позиция правила в списке правил;
mask — фильтр поиска файлов;
outdate — время хранения файлов до удаления в днях;
path — путь (относительно /var/lib/ecss/restfs/domain/имя_домена/) к директории поиска файлов.
| после выполнения команды : /domain/имя_домена/restfs/autocleaner/add-rule или /domain/имя_домена/restfs/autocleaner/change-rule в директории — /var/lib/ecss/restfs/domain/имя_домена будет создан файл cleaner.json. И для данного домена autocleaner будет использовать локальную конфигурацию вместо глобальной. |