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 compose plugin
  • 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
Terminal showing docker compose up -d output
docker compose up -d pulling and starting the SubsiMail container

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.