Install with Docker
This is the recommended install path — one command, one persistent volume, works the same on any Linux VPS.
Requirements
- Docker Engine + the
docker composeplugin - A small VPS (1 vCPU / 1 GB RAM is enough to start)
- A domain pointed at the server, if you want automatic HTTPS (optional for local/internal use)
Run it
Clone or download the repo, then start the stack:
docker compose up -d
The bundled docker-compose.yml maps ports 3000 (app) and 443 (HTTPS, if enabled) and creates a named volume, subsimail-data, mounted at /app/data for the SQLite database.
Once it's up, open http://your-server:3000 — you'll land on the license activation screen. Continue with first-run setup.
Automatic HTTPS (optional)
SubsiMail can provision its own TLS certificate via Let's Encrypt (rustls-acme) if you set these environment variables in docker-compose.yml before starting:
ACME_DOMAIN: mail.yourdomain.com
ACME_EMAIL: you@yourdomain.com
ACME_PRODUCTION: "true"
Leave these unset to run on plain HTTP — the default, and the right choice if you're putting SubsiMail behind your own reverse proxy (nginx, Caddy, Traefik) that already terminates TLS.
Your license is bound to the domain you activate it against (see License & domain binding). Whatever domain you plan to use long-term, set it up before or during first-run setup — changing it later means re-issuing the license from your account.
Where your data lives
Everything — contacts, campaigns, connected-account tokens, users — lives in the SQLite file inside the subsimail-data volume. Back that volume up like you would any database. Updating the container image (see Updating safely) never touches this volume.