compose.yaml runs the web server, mail control service, MongoDB, Redis, WildDuck, Haraka, Rspamd, and ZoneMTA on the external agentteam-email-network Compose network. Only the web server port is published.
Complete the Self-Host Setup Guide before starting the stack.
Create the environment file
Copy the Compose example into a local.env file:
compose.yaml stack are:
- public hostname and web app secrets
- Cloudflare OAuth client ID
- service-level Cloudflare Worker values
- admin R2 archive bucket values
AT_EMAIL_ADMIN_CONTROL_TO_WEB_API_TOKEN- WildDuck admin and access-control secrets
- mail runtime secrets
compose.yaml defaults MongoDB, Redis, WildDuck, Haraka, ZoneMTA, and the internal control URLs to services on the Compose network.
The bundled MongoDB runs as a single-node replica set named rs0, matching the Helm chart runtime and supporting MongoDB transactions and oplog-based logical backups.
Start the stack
Create the external Compose network, or let your deployment platform provide it:atemail-web-server and atemail-mail-control-service to report healthy before signing in.
Published service
Compose publishes the web app onAT_EMAIL_ADMIN_FRONTEND_PORT, which defaults to 23100:
Container images
First-party images are published in GHCR:compose.build.yaml:
Persistent volumes
The default Compose stack creates named volumes for runtime data:
Back up these volumes before upgrades. Data remains across
docker compose down unless you pass --volumes.