unsubbed.co

Deploy Listmonk with Docker in 5 Minutes

beginner · 5-10 minutes · listmonk

Published: March 1, 2026 Updated: March 9, 2026

Prerequisites

  • A VPS with at least 1GB RAM (DigitalOcean, Hetzner, or Linode — $5/mo)
  • Docker and Docker Compose installed
  • A domain name (optional, but recommended)

Step 1: Create Project Directory

mkdir listmonk && cd listmonk

Step 2: Create Docker Compose File

Create docker-compose.yml:

version: "3.7"
services:
  listmonk:
    image: listmonk/listmonk:latest
    restart: unless-stopped
    ports:
      - "9000:9000"
    environment:
      - TZ=UTC
    volumes:
      - ./config.toml:/listmonk/config.toml
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=listmonk
      - POSTGRES_USER=listmonk
      - POSTGRES_DB=listmonk
    volumes:
      - listmonk-data:/var/lib/postgresql/data

volumes:
  listmonk-data:

Step 3: Create Configuration File

Create config.toml:

[app]
address = "0.0.0.0:9000"
admin_username = "admin"
admin_password = "your-secure-password-here"

[db]
host = "db"
port = 5432
user = "listmonk"
password = "listmonk"
database = "listmonk"
ssl_mode = "disable"
max_open = 25
max_idle = 25
max_lifetime = "300s"

Step 4: Initialize the Database

docker compose run --rm listmonk ./listmonk --install

Step 5: Start Listmonk

docker compose up -d

Listmonk is now running at http://your-server-ip:9000. Log in with the admin credentials from your config.

Step 6: Configure SMTP

Navigate to Settings → SMTP and add your email provider:

Amazon SES example:

  • Host: email-smtp.us-east-1.amazonaws.com
  • Port: 587
  • Auth: login
  • Username: Your SES SMTP username
  • Password: Your SES SMTP password
  • TLS: STARTTLS

Production Configuration

For production use, add these:

Reverse Proxy (Caddy)

listmonk.yourdomain.com {
    reverse_proxy localhost:9000
}

Backups

# Add to crontab
0 3 * * * docker exec listmonk-db-1 pg_dump -U listmonk listmonk | gzip > /backups/listmonk-$(date +%Y%m%d).sql.gz

Common Pitfalls

  1. Emails going to spam — Set up SPF, DKIM, and DMARC records for your sending domain
  2. Bounce handling — Configure bounce processing in Settings → Bounces
  3. Rate limiting — Start slow with new domains. SES limits new accounts to 200 emails/day initially
  4. Memory usage — Listmonk is very efficient. 512MB RAM is sufficient for most installations

Next Steps

  • Import your existing subscribers via CSV (Settings → Import)
  • Create your first email template
  • Set up a subscription form on your website using the API
  • Configure tracking domain for click/open tracking

Need help with deployment? upready.dev offers turnkey Listmonk setup starting at $200, including domain configuration, SMTP setup, and subscriber migration.