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

Установка с 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) на хосте
coturnturn3478 и диапазон ретрансляции
prometheus, grafanaobservabilityGrafana только на 127.0.0.1
mpbx-mediamediaничего; его образ пока является заглушкой, поэтому не включайте профиль
mpbx-edgeedgeроль граничного узла SIP пока не существует

Включайте профили командой COMPOSE_PROFILES=observability,turn в .env.

Замечания по сети​

  • Сеть data внутренняя: у неё нет маршрута наружу, и ни один порт базы данных не публикуется.
  • rtpengine, coturn и граница SIP используют сетевой режим хоста в Linux. Управляющий порт rtpengine слушает только 127.0.0.1. Откройте в брандмауэре UDP RTPE_PORT_MIN-RTPE_PORT_MAX. За NAT задайте RTPE_ADVERTISE=<public IP>. start.sh определяет RTPE_INTERFACE автоматически.
  • Сам mpbx остаётся в сетях моста, чтобы иметь доступ к базам данных.

Секреты и роли баз данных​

  • Секретов по умолчанию нет. Compose не запустится, пока mpbx init их не запишет.
  • Приложение подключается к Postgres как не-суперпользователь без BYPASSRLS, а безопасность на уровне строк принудительно включена для таблиц арендаторов. Суперпользователь Postgres mpbx_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.

О резервном копировании см. Резервное копирование и восстановление.