docker-compose.split.yml example runs Postgres, one control plane, the webapp proxy, and two gateways on one Docker host.
AIRMUX_IMAGE, so pin that variable to one published digest for
coordinated deployments. The split stack follows the same database and catalog startup sequence
as the default stack. Both gateways start after the control plane becomes healthy. The webapp proxy distributes /inf/
requests between them.
Install the airmux CLI on the machine you use to manage the instance.
Volume ownership
Every additional gateway needs a new persistent state volume. Sharing one SQLite outbox or cloning a running gateway identity is invalid.
Multi-host requirements
The checked-in split file demonstrates service boundaries, not a multi-host production topology. Across hosts, provide:- Reachable Postgres for the control plane
- One secret store accessible to both planes, with the control plane able to write and data planes able to read
- A private authenticated control-plane URL for bundle polling, event ingestion, and heartbeat
- One persistent cache and outbox directory per gateway
- A streaming-capable load balancer with response buffering disabled
AIRMUX_DATAPLANE_CONTROL_PLANE_URL to the private control-plane address. Protect this path and its data-plane management key.
Keep one control-plane replica. Multiple control-plane replicas remain unsupported until initialization, asynchronous
bundle publication, and replica behavior are proven.
Do not use docker compose --scale for gateways. Each gateway needs an explicit service and its own identity, bundle
cache, and usage outbox volume.
Move from airmux to split
The default and split Compose files use different named volumes. Migration requires a database dump plus a stopped copy
of /state/runtime, /state/secrets, and one gateway’s /state/data-plane. Restore each into the corresponding split
volume before the first split startup.