Step 1 — Install Docker Engine (NOT Docker Desktop):
curl -sSL https://get.docker.com | sh
This pulls Docker CE plus the compose plugin (docker compose, no hyphen).
Step 2 — Clone Mailcow:
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
/opt/mailcow-dockerized is the documented home. Stick to it — every doc, support thread, and update script assumes this path.
Step 3 — Generate config:
./generate_config.sh
You'll be asked for MAILCOW_HOSTNAME — this MUST be a real DNS A record (e.g. mail.example.com) and MUST be a subdomain, not the bare domain.
Step 4 — Pull and start:
docker compose pull
docker compose up -d
First run takes 5–10 minutes while images download and DBs initialize. Tail logs with docker compose logs -f to spot issues early.
Sign in to keep track of what you have read.