compose.yml
Minimum viable setup — port 3000, one named volume, one env var:
services:
maillayer:
image: ghcr.io/mddanishyusuf/maillayer-pro:1
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- maillayer-data:/app/data
environment:
AUTH_SECRET: ${AUTH_SECRET}
APP_URL: ${APP_URL:-}
volumes:
maillayer-data:Generate AUTH_SECRET once:
echo "AUTH_SECRET=$(openssl rand -base64 48)" > .envThen start it:
docker compose up -dAUTH_SECRET is optional
If you skip setting it, the container generates one at first boot and writes it to
/app/data/.auth_secret in the volume. Subsequent restarts pick it up automatically. Just don't lose the volume.Coolify
New Application → Docker Image → enter ghcr.io/mddanishyusuf/maillayer-pro:1. In the volumes tab map/app/data to a Coolify-managed volume. Set AUTH_SECRET in the environment variables tab.
CapRover / Dokploy
Both accept a docker-compose.yml directly. Paste the snippet above into their compose UI, set the env vars, deploy.
Tag pinning
:1— pinned to major version 1 (recommended). Pulls patches and minors; never breaking changes.:1.0.0— exact version. Maximum stability, manual updates.:latest— always the most recent release. Risky if breaking changes ship.
Reverse proxy / TLS
The container speaks plain HTTP on port 3000. Front it with Caddy, Traefik, or Coolify's built-in proxy. After HTTPS is up, set APP_URL in env vars so tracking links use the right scheme.