Перейти к основному содержимому

Установка в изолированной среде и ограниченный режим

Установка в изолированной среде не имеет маршрута в интернет. Она работает с телефонами, звонками, голосовой почтой, веб-клиентом и историей звонков в вашей сети. Некоторые функции зависят от интернет-сервисов и в такой среде не работают.

Что продолжает работать​

  • Звонки между телефонами, софтфонами и транками, до которых вы добираетесь через собственную сеть.
  • Голосовая почта, история звонков, отчёты, веб-клиент, консоль администратора и резервные копии.
  • Софтфоны в той же сети, что и АТС.
  • Сертификаты, которые вы предоставляете сами. Автоматические сертификаты публичного центра сертификации требуют доступа в интернет.

Что перестаёт работать​

ФункцияПричинаЧто делать
Push-уведомления для софтфонов на мобильных устройствахНужен ретранслятор в интернетеДержите приложение открытым в локальной сети; примите, что входящие звонки не разбудят закрытое приложение
WhatsApp, Messenger, TelegramПровайдеры обращаются к АТС из интернетаНедоступны
Виджет живого чатаБраузеры на других сайтах обращаются к АТС по публичному HTTPSИспользуйте виджет только там, где сайт может обратиться к АТС
Функции ИИБазовые адреса должны быть публичным HTTPS; модель в локальной сети отклоняетсяНедоступны
Автоматические сертификатыЦентр сертификации находится в интернетеУстановите собственный сертификат
SMS-провайдеры по HTTPSПубличные провайдерыПосле проверки используйте SMS-центр в вашей сети по SMPP

Установка​

Эта процедура выполнена на изолированном лабораторном сервере (Ubuntu 24.04, сеть без маршрута, без DNS и без интернета). Нужна одна машина с доступом в интернет, на которой установлен Docker и которая имеет ту же архитектуру процессора, что и сервер (uname -m: amd64 или arm64), а также способ переноса файлов (USB-диск, односторонний файловый шлюз).

1. На машине с доступом в интернет загрузите релиз. Получите install.sh, mpbx-bundle.tar.gz и SHA256SUMS из канала релизов, который вы используете. Прочитайте ссылки на образы, которые указаны в комплекте:

tar -xzOf mpbx-bundle.tar.gz mpbx-bundle/images.env

2. Экспортируйте образы. Образы релиза именуются по дайджесту (name@sha256:...). Имя с дайджестом не сохраняется при docker save и docker load, поэтому сначала присвойте каждому образу тег и устанавливайте по тегу. Загрузите образы для архитектуры сервера:

docker pull --platform linux/amd64 <MPBX_IMAGE from images.env> # repeat for MPBX_RTPENGINE_IMAGE and MPBX_MEDIA_IMAGE
docker tag <MPBX_IMAGE> mpbx:1.0.0 && docker tag <MPBX_RTPENGINE_IMAGE> mpbx-rtpengine:1.0.0 && docker tag <MPBX_MEDIA_IMAGE> mpbx-media:1.0.0
docker pull --platform linux/amd64 postgres:17-alpine valkey/valkey:8-alpine clickhouse/clickhouse-server:25.8-alpine
docker save -o mpbx-images.tar mpbx:1.0.0 mpbx-rtpengine:1.0.0 mpbx-media:1.0.0
docker save -o third-party-images.tar postgres:17-alpine valkey/valkey:8-alpine clickhouse/clickhouse-server:25.8-alpine

Добавьте coturn/coturn:4.12.0, если будете использовать --turn, а также prom/prometheus, prom/alertmanager, quay.io/prometheus/node-exporter, grafana/grafana (теги в deploy/compose/prod/compose.yaml) для --observability. Плагин ClickHouse для Grafana описан в deploy/compose/prod/compose.grafana-offline.yaml.

3. Подготовьте Docker для сервера. install.sh --air-gapped никогда не загружает Docker. На машине с доступом в интернет под Ubuntu 24.04 той же архитектуры соберите пакеты вместе с зависимостями (требуются Docker Engine 24+ и Compose 2.24+):

mkdir debs && sudo apt-get update && sudo apt-get -o Dir::Cache::archives="$PWD/debs" install --download-only -y docker.io docker-compose-v2 iptables

4. Перенесите файлы и проверьте их. Поместите всё в один каталог вместе со списком контрольных сумм и проверьте на сервере:

sha256sum install.sh mpbx-bundle.tar.gz mpbx-images.tar third-party-images.tar debs/*.deb > TRANSFER.sha256 # connected machine
sha256sum -c TRANSFER.sha256 # server

Также сверьте mpbx-bundle.tar.gz со строкой в SHA256SUMS релиза.

5. На сервере установите Docker и загрузите образы.

sudo dpkg -i debs/*.deb && sudo systemctl enable --now docker
sudo docker load -i mpbx-images.tar && sudo docker load -i third-party-images.tar

6. Запустите установщик из локальных файлов. Укажите файл комплекта и его контрольную сумму, задайте адрес, по которому к АТС будут обращаться телефоны, и выберите обычный веб-порт или TLS-прокси, который вы запускаете сами (автоматические сертификаты требуют интернета):

sudo MPBX_BUNDLE_FILE=$PWD/mpbx-bundle.tar.gz MPBX_BUNDLE_SHA256=<sha256 of the bundle> \
MPBX_IMAGE=mpbx:1.0.0 MPBX_RTPENGINE_IMAGE=mpbx-rtpengine:1.0.0 MPBX_MEDIA_IMAGE=mpbx-media:1.0.0 \
bash install.sh --air-gapped --public-ip <server LAN address> --no-tls

--air-gapped использует загруженные теги Postgres, Valkey и ClickHouse (файл compose.airgap.yaml), поэтому Docker никогда не пытается обратиться к реестру. --public-ip пропускает определение адреса. Сервер без шлюза по умолчанию допускается: установщик берёт его первый глобальный адрес. Установщик один раз выводит ключ восстановления и одноразовую ссылку настройки; сохраните и то, и другое, как указано в руководстве по установке.

7. Проверка. Все службы должны быть в состоянии healthy:

sudo mpbx-ctl ps
sudo mpbx-ctl selftest # service, containers, web, database and isolation checks
sudo docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx doctor # the `mpbx` command lives in the container

Затем откройте ссылку настройки с машины в той же сети. Сохраните файлы установки: позже mpbx-ctl upgrade принимает файл комплекта так же (mpbx-ctl upgrade ./mpbx-bundle.tar.gz) после того, как вы выполните docker load для новых образов.

Контрольный список для ограниченного режима​

  1. Выполните docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx ports и откройте только нужные входящие строки. Внутренние строки остаются закрытыми для других сетей.
  2. Убедитесь, что телефоны регистрируются (docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx doctor и страница «Устройства»).
  3. Убедитесь, что голосовая почта и история звонков работают.
  4. Сообщите пользователям, какие функции отключены, чтобы они не ждали их.

Руководство оператора: docs/runbooks/air-gapped-degraded-mode.md в репозитории.