Правообладатель: Общество с ограниченной ответственностью "Современные системы автоматизации" (ООО "ССА").
Редакция документа: 10.09.2026.
Область применения: руководство подготовлено для установщика версии 0.64.1 и контейнерной поставки с профилями ui и strategies. До установки получите у правообладателя доступный тег выпуска и подтвердите применимость руководства к нему и выбранной ОС.
1. Назначение руководства
Руководство описывает установку одной инсталляции OmniFlow, первичную настройку и основные действия администратора и оператора. Команды выполняются на выделенном сервере Linux в оболочке Bash пользователем, которому предоставлено право управления Docker.
Развёртывание на действующем сервере, обновление и восстановление выполняются в согласованное окно обслуживания. Остановка компонентов может прервать вызовы и обработку сообщений.
2. Требования
2.1. Сервер и рабочее место
| Параметр | Требование для описываемой установки |
|---|---|
| Архитектура | x86_64 / amd64. |
| ОС сервера | Linux; конкретный дистрибутив и версия согласуются для поставки. |
| Процессор | От 4 ядер; рекомендуемый ориентир установщика 8 ядер. |
| Оперативная память | От 8 ГБ; рекомендуемый ориентир 16 ГБ. |
| Накопитель | От 60 ГБ SSD; ориентир с запасом 200 ГБ SSD. Объём увеличивается с учётом записей, файлов и резервных копий. |
| Контейнерная среда | Docker Engine 24+ и Docker Compose 2.20.3+ с поддержкой используемого поставкой include. Совместимость конкретной версии проверяется до запуска. |
| Адресация | Статический публичный IP и доменное имя с корректной DNS-записью для описанного внешнего подключения. |
| Рабочее место | Браузер с JavaScript и WebSocket; для браузерной телефонии также WebRTC, микрофон и гарнитура. |
Указанные ресурсы являются базовым ориентиром, а не гарантией конкретного числа одновременных вызовов. Конфигурация подбирается с учётом нагрузки, состава сервисов и сроков хранения данных. Перед вводом в эксплуатацию проверьте работу выбранной поставки на используемых ОС и браузерах.
Сведения о поддержке include приведены в документации Docker.
2.2. Сеть
| Порт по умолчанию | Назначение |
|---|---|
| 5060/UDP, TCP | SIP-подключение телефонов и софтфонов. |
| 5080/UDP, TCP | Подключение SIP-транков. |
| 5061/TCP | SIP с TLS. |
| 8443/TCP | SIP через WebSocket для браузерной телефонии. |
| 30000-30500/UDP | Передача голосового трафика. |
| 80/TCP, 443/TCP | Веб-интерфейс и HTTPS-подключения. |
Открывать только используемые подключения; доступ транков по возможности ограничить адресами оператора связи. Проверить правила как на сервере, так и у облачного провайдера. Не публиковать наружу служебные порты БД, шины сообщений и хранилищ.
Нужен исходящий доступ к реестру образов, DNS и тем внешним сервисам, которые действительно подключены. Docker-подсеть штатной конфигурации 172.28.0.0/16 не должна конфликтовать с сетью сервера или VPN. При конфликте согласовать сетевую конфигурацию до установки.
3. Подготовка
- Получить у правообладателя тег поставки и учётную запись чтения реестра.
- Подготовить отдельный сервер, домен и сетевые правила.
- Установить Docker и Compose способом, подходящим выбранной ОС. Команды установки пакетов Ubuntu не применять к другому дистрибутиву без адаптации.
- Проверить контейнерную среду:
docker version
docker compose version
Далее все команды Docker выполнять от одного пользователя. Авторизация без sudo не передаёт автоматически учётные данные командам sudo docker. Доступ к Docker предоставляет широкие полномочия на сервере; выдавать его только администраторам.
Войти в реестр и проверить возможность загрузки:
docker login registry.omniflow.ru
docker pull registry.omniflow.ru/omniflow/alpine:3.20
Успешный вход не заменяет проверку загрузки. При ошибке доступа запросить проверку прав учётной записи, не использовать административные реквизиты реестра в качестве обходного решения.
4. Установка
Команды ниже предназначены для новой инсталляции. Для существующей использовать раздел обновления.
sudo mkdir -p /app/omniflow
sudo chown "$USER":"$(id -gn)" /app/omniflow
cd /app/omniflow
read -r -p 'Тег поставки, полученный от правообладателя: ' RELEASE
docker run --rm -it --pull always \
-v "$PWD:/install" -e CTL_HOST_DIR="$PWD" \
"registry.omniflow.ru/omniflow/ctl:${RELEASE:?Не задан тег поставки}" install
Установщик показывает структуру каталогов, запрашивает параметры, создаёт конфигурацию и секреты. Для описанного сценария выбрать профили ui и strategies. Профиль fail2ban является дополнительным.
Проверить .env локальным редактором, не отправляя его содержимое в общедоступные каналы:
| Параметр | Что проверить |
|---|---|
EXTERNAL_IP |
Фактический внешний IP сервера. |
PUBLIC_DOMAIN |
Домен веб-интерфейса. |
SIP_DOMAIN |
Домен SIP; обычно совпадает с публичным доменом. |
OMNIFLOW_VERSION |
Согласованный тег поставки, не latest. |
COMPOSE_PROFILES |
Для этого руководства ui,strategies, при необходимости дополненные fail2ban. |
TLS_MODE |
Выбранный режим сертификата. |
IMAGE_* |
Источники сторонних образов. Для загрузки из собственного зеркала указать соответствующие ссылки на registry.omniflow.ru; один OMNIFLOW_IMAGE_PREFIX не перенаправляет все сторонние образы. |
Для эксплуатационного HTTPS подготовить сертификат, доверенный рабочими местами. При TLS_MODE=custom разместить цепочку сертификатов и закрытый ключ в apps/shared-tls/custom/fullchain.pem и apps/shared-tls/custom/privkey.pem. Ограничить доступ к ключу, сохранив возможность чтения сервисами. Самоподписанный режим не подтверждает готовность HTTPS/WebRTC к эксплуатации; не обходить предупреждения браузера как штатный способ подключения.
В поставку входят omniflow-ctl, корневой compose-файл, включаемые compose-файлы, .env.example, INSTALL.md, каталоги конфигурации и данных. Не переносить один корневой compose-файл без связанных материалов.
Проверить описание стека, загрузить образы и запустить:
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps -a
./omniflow-ctl doctor
При ошибке любого шага устранить её до следующего шага. Все образы выбранных профилей должны быть доступны. Одноразовый сервис migrator должен завершиться успешно; постоянно работающие сервисы не должны находиться в цикле перезапуска. Отсутствие ошибок Docker ещё не означает успешную проверку телефонии.
5. Первый вход и внутренний вызов
- Открыть
https://<домен установки>/. Использовать логинadminи пароль, выданный установщиком; сохранить пароль в защищённом хранилище. - Открыть "Телефония / Подключение и система". Проверить SIP-адреса, порты, TLS и внешний IP. Отметка "снаружи" означает, что доступность нужно проверить с другого узла сети.
- В "Телефония / SIP-пользователи" создать две тестовые точки. Указать SBC-контур, уникальные логины, номера и отдельные пароли. Данные веб-пользователя и SIP-точки являются разными учётными данными.
- Настроить два телефона или софтфона: адрес, порт и транспорт взять со страницы подключения; логины и пароли из созданных точек. Проверить регистрацию обеих точек.
- Выполнить внутренний вызов между точками, ответить, проверить звук в обе стороны и завершить разговор.
- Под администратором или супервизором открыть "История звонков", найти вызов и проверить участников и время. Если запись включена и сформирована, проверить её воспроизведение.
Не подключать внешние платные направления для первого внутреннего теста. Если в конфигурации уже есть правила маршрутизации, убедиться, что тестовый номер не направляется во внешний транк.
6. Настройка работы
6.1. Пользователи
В "Настройки / Пользователи" нажать "Добавить", задать логин, имя, пароль и роли. Для оператора выбрать роль operator, затем в редактировании пользователя связать его с SIP-пользователем и сохранить.
| Роль | Основное назначение |
|---|---|
| Администратор | Настройка пользователей, телефонии, очередей и подключений в пределах своей организации. |
| Супервизор | Наблюдение и доступ к предусмотренным интерфейсом журналам и обращениям. |
| Оператор | Обработка обращений на рабочем месте и работа с доступными диалогами. |
Управление организациями и общесистемным состоянием доступно администратору организации system. Не использовать его учётную запись для обычной работы оператора.
6.2. Транк и маршрутизация
- Получить у оператора связи параметры подключения и разрешённые направления вызовов.
- Открыть "Телефония / Транки", создать транк, выбрать SBC-контур, указать код и название.
- Выбрать тип подключения. Для регистрации указать сервер, SIP-домен, логин и пароль; для подключения по IP указать адреса провайдера и параметры исходящего направления согласно выданным условиям.
- Сохранить транк и проверить его состояние. Входящую доступность и регистрацию оценивать раздельно.
- В "Телефония / Маршрутизация" создать правило: направление, контур, условия по транку/номерам, вес, действие и цель. Активировать только согласованные правила.
- Проверить сопоставление номера встроенным тестером маршрутов, затем выполнить разрешённые входящий и исходящий тестовые вызовы.
Тестер правил проверяет выбор маршрута, но не доступность провайдера и не прохождение аудио. Не использовать реальные номера клиентов для испытаний без согласования.
6.3. Очереди и стратегии
- Создать активных пользователей с ролью оператора и привязать их SIP-точки.
- В "Настройки / Очереди" создать очередь, указать код, название и операторов; настроить расписание и действия его периодов.
- Убедиться, что используемая стратегия поставлена и работает. Проверить "Стратегии / Микросервисы"; при необходимости настроить "ENV стратегий" и загрузить звуковые файлы в "Файлы стратегий".
- Направить нужное правило маршрутизации в эту очередь.
- Проверить вызов при доступном операторе, отсутствии ответа и вне рабочего времени. Результат должен соответствовать выбранной стратегии и расписанию.
Для стандартного распределения оператор должен быть активен, иметь доступную SIP-точку и подходящий бизнес-статус. Недоступность операторов не должна приводить к бесконтрольной отправке тестовых вызовов во внешнюю сеть.
7. Работа оператора
- Войти под собственной учётной записью и открыть "Рабочее место".
- Для браузерной телефонии разрешить доступ к микрофону, проверить гарнитуру и состояние подключения. Установить статус готовности к приёму обращений.
- Выбрать обращение в списке либо принять входящий вызов средствами телефонной панели.
- Просмотреть карточку клиента и контекст обращения, выполнить разговор или переписку. При необходимости добавить заметку.
- Указать результат обработки с помощью доступных действий панели. Завершение телефонного соединения и завершение обработки обращения могут быть отдельными действиями.
- При перерыве изменить бизнес-статус, чтобы не оставаться доступным для распределения.
Для просмотра завершённых вызовов администратор или супервизор использует "История звонков". Для текущих соединений предусмотрен раздел "Активные звонки". Доступность отдельных действий зависит от ролей и контекста обращения.
8. Дополнительные подключения
8.1. Чаты
Подключать только провайдеров, включённых в согласованную поставку и проверенных для выбранного сценария.
- Администратору открыть "Чаты / Провайдеры чатов", выбрать "Добавить аккаунт" и провайдера.
- Ввести параметры и секреты, полученные у провайдера. Создать или подключить канал по его мастеру настройки; при необходимости настроить webhook с доступным HTTPS-адресом.
- Проверить, что аккаунт и канал включены, канал связан с нужной очередью, а стратегия обработки доступна.
- Отправить сообщение с согласованного тестового аккаунта. Проверить появление обращения и ответ оператора через "Рабочее место" или "Чаты / Диалоги".
- Проверить результат отправки в "Чаты / Сообщения" под администратором или супервизором. Не считать отправку успешной только потому, что текст появился в поле ввода.
Возможности вложений, статусов доставки и ответов различаются между провайдерами. Изменение условий или доступности внешнего API может влиять на соответствующий канал.
8.2. Речь и интеграции
Речевые провайдеры настраиваются в "Телефония / Речь (SpeechGate)"; транскрибация доступна в отдельном разделе. До включения проверить реквизиты, разрешения, сетевой доступ и расходы внешнего сервиса.
Встраивание коммуникационной панели и разработка собственных стратегий выполняются по документации интегратора для соответствующей версии. Для обычного внутреннего звонка эти подключения не требуются.
9. Текущая эксплуатация
Из каталога установки:
cd /app/omniflow
docker compose ps -a
./omniflow-ctl doctor
Контролировать свободное место, состояние сервисов, срок действия сертификата, регистрацию транков и создание резервных копий. Сообщения о расхождении конфигурации разбирать до изменения других параметров. doctor может синхронизировать файлы поставки с выбранной версией; это не исключительно просмотр состояния.
Для конкретного сервиса использовать docker compose logs --tail=100 ИМЯ_СЕРВИСА, подставив имя из списка сервисов. Перед передачей журналов удалить токены, пароли, номера и другие данные, не требующиеся для диагностики.
Пароль администратора менять через "Настройки / Пользователи". При утрате доступа выполнить:
./omniflow-ctl reset-admin-password
Сохранить выданный пароль и проверить вход. Редактирование пароля в .env после первого запуска не меняет пароль в БД. Не указывать новый секрет аргументом команды, чтобы не сохранять его в истории оболочки.
10. Резервирование и восстановление
Резервная копия должна включать согласованное состояние БД, конфигурацию и файловые данные. Один дамп PostgreSQL не содержит аудиозаписи и прочие объекты MinIO.
| Что сохранять | Состав |
|---|---|
| Параметры и версия | .env, compose-файлы, .omniflow-ctl.json, изменённые конфигурации, тег и идентификаторы образов. |
| Секреты | Ключи, сертификаты, конфигурация авторизации; хранить защищённо, отдельно от публичной документации. |
| База данных | Проверяемый дамп PostgreSQL и сведения, необходимые для восстановления ролей и прав. |
| Файлы | Объектное хранилище, звуковые файлы, записи до выгрузки, файлы стратегий. |
| Дополнительное состояние | Сохраняемые данные NATS, Valkey и стратегий согласно принятой схеме восстановления. |
Пример создания отдельного логического дампа БД, не полной копии инсталляции:
umask 077
BACKUP="backup-$(date +%Y%m%d-%H%M%S).dump"
if docker compose exec -T postgres pg_dump -U postgres -Fc omniflow > "$BACKUP"; then
docker compose exec -T postgres pg_restore --list < "$BACKUP"
else
printf '%s\n' 'Дамп не создан корректно. Не использовать файл для восстановления.' >&2
fi
Ненулевой код завершения любой проверки означает необходимость разбирательства. Чтение оглавления дампа не заменяет пробное восстановление. Копию переносить в защищённое хранилище вне этого сервера.
При подготовке согласованной полной копии остановить поступление новых обращений и записи в хранилища либо использовать предварительно проверенную схему согласованных снимков. Не считать обычное копирование файлов работающей БД надёжным резервированием.
Порядок восстановления:
- Выделить изолированный сервер без доступа к реальным транкам, webhook и клиентам, чтобы не запустить повторную обработку сообщений и вызовов.
- Развернуть ту версию платформы и инфраструктурных компонентов, для которой создана копия. Восстановить конфигурацию и права на каталоги.
- Подготовить PostgreSQL и требуемые роли; до импорта не запускать прикладные компоненты, записывающие данные. Восстановить дамп с владельцами и правами согласно проверенной процедуре для этой поставки.
- Восстановить файловые хранилища из согласованной копии. Состояние очередей и незавершённых заданий восстанавливать с учётом риска повторного исполнения.
- Запустить компоненты, выполнить диагностику и внутренний тестовый звонок, проверить историю и доступность сохранённых файлов.
- Возвращать реальные подключения только после проверки и решения администратора. Возобновление активного телефонного соединения из резервной копии не предполагается.
Точные команды полного восстановления должны быть проверены на выбранной поставке до ввода в эксплуатацию. Автоматическое резервирование не считается включённым только по факту установки OmniFlow.
11. Обновление
До обновления согласовать окно обслуживания, завершить активные обращения и создать проверенную полную копию. Получить целевой тег от правообладателя; не выбирать непроверенный релиз автоматически.
cd /app/omniflow
read -r -p 'Согласованный тег обновления: ' NEXT_RELEASE
./omniflow-ctl upgrade "${NEXT_RELEASE:?Не задан тег обновления}"
./omniflow-ctl doctor
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps -a
./omniflow-ctl doctor
После каждого шага проверять результат. При появлении файлов *.dist сопоставить эталоны с локальными правками и перенести необходимые изменения до запуска. Проверить успешное завершение мигратора, вход, внутренний звонок и подключённые сценарии.
Возврат старого тега не отменяет миграции схемы БД. Откат выполнять из согласованной копии, учитывая потерю изменений после момента её создания. Сохраняйте сведения о версии, составе образов и применяемой документации для каждой установки.
12. Типовые неисправности
| Признак | Проверка и действие |
|---|---|
unauthorized, denied при загрузке |
Проверить пользователя Docker, авторизацию и права чтения конкретного образа. |
manifest unknown |
Уточнить публикацию всех образов выбранного тега, включая стратегии. |
| Ошибка compose до запуска | Проверить версию Compose, наличие включаемых файлов, настройки и сетевые конфликты. |
| Сервис перезапускается | Посмотреть журнал, обязательные параметры и ресурсы; не удалять данные ради повторного запуска. |
| Не открывается интерфейс | Проверить профиль ui, домен, TLS, 80/443 и состояние веб-компонента. |
| Телефон не регистрируется | Проверить SBC-контур, SIP-домен, логин, пароль, транспорт и сетевые правила. |
| Звонок есть, звука нет | Проверить внешний IP, RTP-диапазон, NAT и прохождение трафика в обе стороны. |
| Очередь не соединяет | Проверить маршрут, расписание, стратегию, назначение и статусы операторов. |
| Нет новых сообщений чата | Проверить аккаунт/канал, секреты, webhook или опрос, провайдера, очередь и стратегию. |
| Ошибка после обновления | Проверить журнал migrator, согласованность файлов поставки и схемы БД. Не откатывать только образ. |
Техническая поддержка: support@omniflow.ru, будние дни с 09:00 до 18:00 по московскому времени.
При обращении в поддержку передать версию, время сбоя, ожидаемое и фактическое поведение, шаги воспроизведения и обезличенные диагностические сведения. Реквизиты подключения передавать только по согласованному защищённому каналу.