Установка с Docker Compose
Производственный набор в deploy/compose/prod запускает MonoPbx вместе с Postgres, Valkey, ClickHouse и rtpengine. Установщик для ВМ оборачивает именно этот набор. Используйте набор напрямую, если вы уже управляете хостами Docker.
Требования: Docker Engine 24+ с плагином Compose v2.24+ на Linux (поддерживаемый хост — Ubuntu 24.04 LTS). Docker Desktop (macOS, Windows) предназначен только для разработки и пробного использования, а Windows никогда не является производственным хостом.
Среда разработки (make dev) — это другое. Она публикует базы данных на loopback и использует одноразовые секреты. Никогда не используйте её в производстве.
Установка
Первый запуск создаёт .env из шаблона и останавливается, чтобы вы могли его настроить. MPBX_IMAGE, MPBX_RTPENGINE_IMAGE и MPBX_MEDIA_IMAGE должны указывать на ваш релиз (закрепите их по digest), а MPBX_PUBLIC_URL — это адрес, который открывают пользователи. Затем запустите снова:
cd deploy/compose/prod
./start.sh # first run: creates .env and stops. Set the images and MPBX_PUBLIC_URL in .env, then:
./start.sh # second run: mpbx init (once), then start the stack
start.sh выполняет три шага, которые можно выполнить и вручную (этот блок также проверяется проверкой руководства):
set -eu
cd deploy/compose/prod
docker compose -f compose.init.yaml run --rm init # 1. mpbx init: secrets into .env, recovery key shown ONCE
docker compose -f compose.yaml -f compose.linux.yaml up -d --wait # 2. start (Docker Desktop: compose.desktop.yaml)
scripts/smoke.sh # 3. optional: health, isolation and login checks
Запишите ключ восстановления, когда mpbx init его покажет. Он не хранится на хосте. Без него утерянный .env означает потерю паролей транков, ключей API и зашифрованных записей. В терминале init показывает ключ до того, как что-либо записать, и просит перепечатать одну группу символов из него. Без терминала он один раз выводит ключ в stdout после сохранения секретов, поэтому не храните этот вывод. Повторный запуск init ничего не меняет.
Файл .env (режим 0600, игнорируется git) содержит ваши секреты. Сохраняйте его резервную копию вместе с томами.
Что запускается
| Сервис | Профиль | Публикуется |
|---|---|---|
postgres, valkey, clickhouse | по умолчанию | ничего (внутренняя сеть) |
mpbx (API и встроенный веб-клиент) | по умолчанию | MPBX_HTTP_BIND:MPBX_HTTP_PORT, по умолчанию 0.0.0.0:8080 |
rtpengine | по умолчанию | UDP RTPE_PORT_MIN-MAX (30000-40000) на хосте |
coturn | turn | 3478 и диапазон ретрансляции |
prometheus, grafana | observability | Grafana только на 127.0.0.1 |
mpbx-media | media | ничего; его образ пока является заглушкой, поэтому не включайте профиль |
mpbx-edge | edge | роль граничного узла SIP пока не существует |
Включайте профили командой COMPOSE_PROFILES=observability,turn в .env.
Замечания по сети
- Сеть
dataвнутренняя: у неё нет маршрута наружу, и ни один порт базы данных не публикуется. - rtpengine, coturn и граница SIP используют сетевой режим хоста в Linux. Управляющий порт rtpengine слушает только
127.0.0.1. Откройте в брандмауэре UDPRTPE_PORT_MIN-RTPE_PORT_MAX. За NAT задайтеRTPE_ADVERTISE=<public IP>.start.shопределяетRTPE_INTERFACEавтоматически. - Сам
mpbxостаётся в сетях моста, чтобы иметь доступ к базам данных.
Секреты и роли баз данных
- Секретов по умолчанию нет. Compose не запустится, пока
mpbx initих не запишет. - Приложение подключается к Postgres как не-суперпользователь без
BYPASSRLS, а безопасность на уровне строк принудительно включена для таблиц арендаторов. Суперпользователь Postgresmpbx_adminне имеет пароля и доступен только через локальный сокет контейнера:docker compose exec postgres psql -U mpbx_admin -d mpbx. - Каждый контейнер сбрасывает все capabilities и устанавливает
no-new-privileges.
Эксплуатация
./start.sh # idempotent; init is skipped once the secrets exist
./start.sh ps | logs -f mpbx # any docker compose command
./start.sh down # stop, keep data
docker compose -f compose.yaml -f compose.linux.yaml down -v # DELETES the databases
Чтобы запустить вторую копию рядом с этой, задайте COMPOSE_PROJECT_NAME. Команды обновления и отката пока не реализованы. HTTPS и ACME для набора Compose берутся из оверлея установщика (deploy/installer/compose.installer.yaml); см. Сертификаты и HTTPS.
О резервном копировании см. Резервное копирование и восстановление.