Deploy Listmonk | (Just Updated) Mailchimp Alternative Nobody Else Can Claim Before You Do
Newsletter manager that seeds its own admin and fixes unsubscribe links
postgres
Just deployed
/var/lib/postgresql
listmonk
Just deployed
/listmonk/uploads
Deploy and Host Listmonk on Railway
Listmonk is a self-hosted newsletter and mailing-list manager — subscriber lists, segmentation with SQL queries, campaign templates, transactional mail, bounce processing, analytics and a full REST API — in a single Go binary backed by Postgres. It is the open-source alternative to Mailchimp, Sendinblue and Campaign Monitor, and it runs comfortably on a small Railway plan.
This template deploys Listmonk v6.2.0 with a super admin account already created, its public URL already configured, and a login rate limit in front of it.
About Hosting Listmonk
Listmonk stores everything except uploaded media in Postgres, so a working deployment is the app
plus a database plus a volume for /listmonk/uploads. Two things about it are easy to get wrong
on any platform and are wrong on most published Railway templates:
Nobody is logged in until somebody claims the instance. listmonk --install only creates an
administrator when LISTMONK_ADMIN_USER and LISTMONK_ADMIN_PASSWORD are set; without them it
prints no superadmin user created. Visit webpage to create user. and the login page turns into
a first-time-setup form. Any visitor who submits it becomes Super Admin. The older
app.admin_username / app.admin_password settings do not prevent this — since Listmonk v3
those values are cached as a legacy API credential, which cannot sign in to the dashboard at
all. This template seeds a real dashboard account from a generated password before the service
is reachable, and re-applies it on every boot, so a redeploy is a working password reset.
app.root_url is a database setting, not an environment variable. It defaults to
http://localhost:9000, and it is the address that every unsubscribe link, view-in-browser link,
tracking pixel, archive URL and password-reset mail is built from. A newsletter sent from a fresh
install carries dead links and an unsubscribe URL that resolves to nothing. This template writes
the deployment's own domain into that setting on boot, and leaves it alone once you point the
instance at a custom domain.
The template also runs nginx in front of Listmonk with a 10-per-minute login limit keyed on the
first address in X-Forwarded-For — Listmonk itself contains no login throttle of any kind, and
Railway's edge appends a hop that rotates between requests, so a limiter keyed on the whole
header never fires.
Why Deploy Listmonk on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Listmonk on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Listmonk is a small Go process and a Postgres database, so a mailing list of any realistic size costs very little to keep running, and Railway's volumes keep uploaded media across redeploys.
Common Use Cases
- Running a product newsletter or changelog without per-subscriber SaaS pricing.
- Sending transactional email from your own templates through your existing SMTP provider.
- Managing double opt-in subscriber lists with SQL-based segmentation.
- Driving campaigns from your application over Listmonk's REST API.
Dependencies for Listmonk
- PostgreSQL 17 (deployed by this template, on its own volume).
- An SMTP account of your own for actually sending mail — any provider works.
Deployment Dependencies
- Listmonk documentation
- Listmonk source
- Wrapper image source: bon5co/listmonk-railway
Implementation Details
After deploying, read LISTMONK_ADMIN_PASSWORD from the Listmonk service's variables and sign in
at /admin as admin. Change either variable and redeploy to rotate the credential.
Listmonk keeps SMTP configuration in the database, so this template disables the stock
smtp.yoursite.com placeholder rather than leaving your instance queueing mail at a host that
does not exist. Configure your provider in Settings → SMTP, or set these service variables and
redeploy to have them written in for you:
SMTP_HOST=smtp.yourprovider.com
SMTP_PORT=587
SMTP_USERNAME=...
SMTP_PASSWORD=...
SMTP_FROM_EMAIL=News
Optional: SMTP_AUTH_PROTOCOL (login, plain, cram, none) and SMTP_TLS_TYPE
(STARTTLS, TLS, none).
The uploads volume is mounted at /listmonk/uploads; media uploaded through the campaign editor
lives there and survives redeploys.
Template Content
postgres
postgres:17-alpineLISTMONK_db__port
LISTMONK_db__user
LISTMONK_ADMIN_USER
LISTMONK_db__database
LISTMONK_db__ssl_mode
