---
title: "Deploy Listmonk | (Just Updated) Mailchimp Alternative Nobody Else Can Claim Before You Do"
description: "Newsletter manager that seeds its own admin and fixes unsubscribe links"
category: "Other"
url: https://railway.com/deploy/listmonk-or-just-updated-mailchimp-alter
---

# 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 on Railway](https://railway.com/template/listmonk-or-just-updated-mailchimp-alter)**

- **Creator:** SuperSlowSloth
- **Category:** Other

## Template content

### postgres

- **Image:** postgres:17-alpine

### listmonk

- **Image:** ghcr.io/bon5co/listmonk-railway:6.2.0
- **Health check:** /health
- **Public domain:** Yes

## Documentation

# 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](https://listmonk.app/docs/)
- [Listmonk source](https://github.com/knadh/listmonk)
- Wrapper image source: [bon5co/listmonk-railway](https://github.com/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.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — [Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/listmonk-or-just-updated-mailchimp-alter
