Railway

Deploy Listmonk | (Just Updated) Mailchimp Alternative Nobody Else Can Claim Before You Do

Newsletter manager that seeds its own admin and fixes unsubscribe links

Deploy Listmonk | (Just Updated) Mailchimp Alternative Nobody Else Can Claim Before You Do

Just deployed

/var/lib/postgresql

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

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

More templates in this category

View Template
Rocky Linux
[Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
42
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51