


How to Create Your Own Newsletter with Listmonk - Make Tech Easier
Jul 30, 2025 am 12:12 AMListmonk is a simple, all-in-one self-hosted newsletter and mailing list solution for Linux systems. Unlike traditional mailing list programs, it is known for its lightweight, fast and efficient. This article will guide you on how to install Listmonk using Docker on Ubuntu and teach you how to start sending newsletters.
Table of contents
- Advantages of using Listmonk
- Install Listmonk
- Configure Nginx reverse proxy
- Install the SSL certificate
- Access and configure Listmonk
Advantages of using Listmonk
One of the biggest highlights of Listmonk is that it is compatible with almost any external mail delivery service. This means you can send newsletters through hosted mailbox services such as Gmail, or your own built mail system.
In addition, Listmonk supports creating programmable email templates, allowing you to dynamically adjust content according to the context of the user receiving emails, achieving highly personalized email push.
Finally, Listmonk has built-in intuitive analytics module to help you track the performance of each newsletter. It can not only count the number of clicks per email, but also analyze the browsing of the entire mailing list in a specific time period.
Install Listmonk
Install Docker and Docker Compose
Prerequisites : This article assumes that you are running Listmonk on an always-on VPS and you already have a domain name and the A record and PTR record are correctly pointed to your server IP.
First, get the repository keys for Docker and Docker Compose:
<code>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg<br>sudo chmod ar /etc/apt/keyrings/docker.gpg</code>
Create a new repository file for Docker and Docker Compose:
<code>sudo nano /etc/apt/sources.list.d/docker.list</code>
Add the following to the file:
<code>deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable</code>
Update and upgrade the system:
<code>sudo apt update && sudo apt upgrade</code>
Install the Docker engine, Docker Compose and its related components:
<code>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx git curl</code>
Ensure that the current user has permission to access Docker:
<code>sudo usermod -aG docker ramces</code>
Deploy Listmonk instances
Create a folder for storing Docker files in the user's home directory:
<code>mkdir ~/listmonk && cd ~/listmonk</code>
Create a Listmonk configuration file:
<code>nano ./config.toml</code>
Paste the following in:
<code>[app]<br>address = "0.0.0.0:9000"<br>admin_username = "listmonk"<br>admin_password = "listmonk"<br><br>[db]<br>host = "listmonk_db"<br>port = 5432<br>user = "listmonk"<br>password = "INSERT_RANDOM_PASSWORD_HERE"<br><br>database = "listmonk"<br><br>ssl_mode = "disable"<br>max_open = 25<br>max_idle = 25<br>max_lifetime = "300s"<br><br>params = ""</code>
Tip : Random passwords can be generated through commands: cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 32 | head -n 1
After saving, create the docker-compose.yml
file:
<code>nano ./docker-compose.yml</code>
Paste the following configuration (adjusted according to the time zone):
<code>---<br>version: "3.7"<br>x-app-defaults:<br> restart: unless-stopped<br> image: listmonk/listmonk:latest<br> ports:<br> - 9000:9000<br> networks:<br> - listmonk<br> environment:<br> - TZ=Asia/Manila<br>x-db-defaults:<br> image: postgres:13<br> ports:<br> - 9432:5432<br> networks:<br> - listmonk<br> environment:<br> - POSTGRES_PASSWORD=INSERT_RANDOM_PASSWORD_HERE<br> - POSTGRES_USER=listmonk<br> - POSTGRES_DB=listmonk<br> restart: unless-stopped<br> healthcheck:<br> test:<br> - CMD-SHELL<br> - pg_isready -U listmonk<br> interval: 10s<br> timeout: 5s<br> retries: 6<br>services:<br> db:<br> image: postgres:13<br> ports:<br> - 9432:5432<br> networks:<br> - listmonk<br> environment:<br> - POSTGRES_PASSWORD=INSERT_RANDOM_PASSWORD_HERE<br> - POSTGRES_USER=listmonk<br> - POSTGRES_DB=listmonk<br> restart: unless-stopped<br> healthcheck:<br> test:<br> - CMD-SHELL<br> - pg_isready -U listmonk<br> interval: 10s<br> timeout: 5s<br> retries: 6<br> container_name: listmonk_db<br> volumes:<br> - type: volume<br> source: listmonk-data<br> target: /var/lib/postgresql/data<br> app:<br> restart: unless-stopped<br> image: listmonk/listmonk:latest<br> ports:<br> - 9000:9000<br> networks:<br> - listmonk<br> environment:<br> - TZ=Asia/Manila<br> container_name: listmonk_app<br> depends_on:<br> - db<br> volumes:<br> - ./config.toml:/listmonk/config.toml<br> networks:<br> listmonk: null<br>volumes:<br> listmonk-data: null</code>
Start the Listmonk container
Run the database container first to initialize the database:
<code>docker compose up db</code>
Open another terminal and execute the installation command:
<code>docker compose run --rm app ./listmonk --install</code>
When prompted to clear existing data, enter "Y" and press Enter to ensure that the environment is clean.
Return to the database terminal, press Ctrl C to stop the database container.
Finally, start all services in the background mode:
<code>docker compose up -d app db</code>
Configure Nginx reverse proxy
Although Listmonk is running, it has not been made public yet. Nginx reverse proxy needs to be configured to make it accessible.
Create a site configuration file:
<code>sudo nano /etc/nginx/sites-available/listmonk</code>
Add the following:
<code>server {<br><br> server_name listmonk.myvpsserver.top;<br><br> location / {<br> proxy_pass http://127.0.0.1:9000;<br> proxy_http_version 1.1;<br> proxy_set_header Upgrade $http_upgrade;<br> proxy_set_header Connection "upgrade";<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br> proxy_set_header Host $host;<br> }<br>}</code>
Enable the site
The above is the detailed content of How to Create Your Own Newsletter with Listmonk - Make Tech Easier. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

This Google translate picture guide shows you how to translate text from an image. If you are looking for more computer tips and solutions, you can visit php.cn Software official website where you can also find some useful computer tools like php.cn

If your Windows 11/10 computer doesn’t automatically the latest versions of device drivers, you will need to manually install them. In this post, php.cn Software will show you 3 different methods to manually install drivers on your device.

This post delivered by php.cn official web page introduces three methods to improve microphone volume and boost its performance, in Control Panel, via Settings, and by Device Manager. Read the below content to view details.

This post includes answers for what is dxdiag, how to run dxdiag in Windows 10/11, DirectX Diagnostic Tool’s main functions, and how to update dxdiag.exe driver. php.cn Software also provides many other computer tips and solutions for users. You can

The operating system is the basic software for managing hardware resources, running programs, and providing user interaction interfaces. It coordinates the relationship between hardware and software and is responsible for memory allocation, device scheduling, file management and multitasking. Common systems include Windows (suitable for office and gaming), macOS (Apple devices, suitable for creative work), Linux (open source, suitable for developers), and Android/iOS (mobile device system). The choice of ordinary users depends on the usage scenario, such as software compatibility, security and customization requirements. How to view system information: Use winver command for Windows, click on the machine for macOS, use terminal commands for Linux, and find the phone in settings. The operating system is the underlying tool for daily use,

Have you ever wanted to adjust computer settings to fix some issues but suffered from Control Panel not opening? There is nothing more frustrating than this app not turning on, stopping you from viewing and changing system settings. In this post, mul

What is Dell Digital Locker? How to log into Dell Digital Locker? This post from php.cn provides answers. Besides, you can know how to use your Dell Digital Locker to find software products included with your Dell computer.

This essay summarized by php.cn Software mainly teaches you how to open Windows 11 Computer Management with Windows Search, Quick Link menu, Run dialog, command prompt, PowerShell, File Explorer, Control Panel, as well as a desktop shortcut.
