Instalar con Docker Compose
El paquete de producción en deploy/compose/prod ejecuta MonoPbx con Postgres, Valkey, ClickHouse y rtpengine. El instalador de VM envuelve exactamente este paquete. Use el paquete directamente si ya administra hosts de Docker.
Requisitos: Docker Engine 24 o superior con el plugin de Compose v2.24 o superior, en Linux (Ubuntu 24.04 LTS es el host compatible). Docker Desktop (macOS, Windows) es solo para desarrollo y pruebas, y Windows nunca es un host de producción.
El entorno de desarrollo (make dev) es otra cosa: publica las bases de datos en loopback y usa secretos desechables. Nunca lo use en producción.
Instalación
La primera ejecución crea .env a partir de la plantilla y se detiene, para que pueda configurarlo. MPBX_IMAGE, MPBX_RTPENGINE_IMAGE y MPBX_MEDIA_IMAGE deben nombrar su versión (fíjelas por digest), y MPBX_PUBLIC_URL es la dirección que abren los usuarios. Después, ejecútelo de nuevo:
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 ejecuta tres pasos, que también puede ejecutar usted mismo (el bloque es también lo que verifica la guía):
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
Anote la clave de recuperación cuando mpbx init la muestre. No se guarda en el host. Sin ella, si se pierde .env, se pierden las contraseñas de las troncales, las claves de API y las grabaciones cifradas. En una terminal, init muestra la clave antes de escribir nada y le pide que vuelva a escribir un grupo de ella. Sin terminal, imprime la clave una sola vez en la salida estándar después de guardar los secretos, así que no conserve esa salida. Volver a ejecutar init no cambia nada.
.env (modo 0600, ignorado por git) contiene sus secretos. Haga respaldo junto con los volúmenes.
Qué se ejecuta
| Servicio | Perfil | Publicado |
|---|---|---|
postgres, valkey, clickhouse | predeterminado | nada (red interna) |
mpbx (API y cliente web integrado) | predeterminado | MPBX_HTTP_BIND:MPBX_HTTP_PORT, predeterminado 0.0.0.0:8080 |
rtpengine | predeterminado | UDP RTPE_PORT_MIN-MAX (30000-40000) en el host |
coturn | turn | 3478 y el rango de relevo |
prometheus, grafana | observability | Grafana solo en 127.0.0.1 |
mpbx-media | media | nada; su imagen todavía es un esqueleto, así que deje el perfil desactivado |
mpbx-edge | edge | el rol de borde SIP todavía no existe |
Active los perfiles con COMPOSE_PROFILES=observability,turn en .env.
Notas de red
- La red
dataes interna: no tiene salida, y ningún puerto de base de datos está publicado. - rtpengine, coturn y el borde SIP usan red del host en Linux. El puerto de control de rtpengine escucha solo en
127.0.0.1. Abra UDPRTPE_PORT_MIN-RTPE_PORT_MAXen su firewall. Detrás de NAT, configureRTPE_ADVERTISE=<IP pública>.start.shdetectaRTPE_INTERFACE. mpbxen sí se mantiene en las redes de puente para poder llegar a las bases de datos.
Secretos y roles de base de datos
- No hay secretos predeterminados. Compose se niega a iniciar hasta que
mpbx initlos haya escrito. - La aplicación se conecta a Postgres como un usuario que no es superusuario y sin
BYPASSRLS, y la seguridad a nivel de fila está forzada en las tablas de inquilinos. El superusuario de Postgresmpbx_adminno tiene contraseña y solo es accesible por el socket local del contenedor:docker compose exec postgres psql -U mpbx_admin -d mpbx. - Cada contenedor elimina todas las capacidades y activa
no-new-privileges.
Operación
./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
Configure COMPOSE_PROJECT_NAME para ejecutar una segunda copia junto a esta. Los comandos de actualización y reversión todavía no están implementados. HTTPS y ACME para el paquete de Compose vienen del overlay del instalador (deploy/installer/compose.installer.yaml); vea Certificados y HTTPS.
Para los respaldos, vea Respaldo y restauración.