listmonk

listmonk is a self-hosted newsletter and mailing list manager.


Note

For this guide you should be familiar with the basic concepts of

License

listmonk is released under the AGPL v3 license.

Installation

Create the target directory:

[isabell@stardust ~]$ mkdir -p ~/opt/listmonk/
[isabell@stardust ~]$

Jump into the new directory:

[isabell@stardust ~]$ cd ~/opt/listmonk/
[isabell@stardust ~]$

Note

Please check the Github project page for the latest release and copy the archive download link named with listmonk_<version>_linux_amd64.

Download the archive file:

[isabell@stardust ~]$ wget https://github.com/knadh/listmonk/releases/download/v2.0.0/listmonk_2.0.0_linux_amd64.tar.gz
[isabell@stardust ~]$

Untar the archive file:

[isabell@stardust ~]$ tar -xzf listmonk_2.0.0_linux_amd64.tar.gz
[isabell@stardust ~]$

Delete the archive file:

[isabell@stardust ~]$ rm listmonk_2.0.0_linux_amd64.tar.gz
[isabell@stardust ~]$

Database Setup

Warning

Your PostgreSQL database environment has to be setup as described in the Lab-Guide before you follow the next steps.

Create a new database user (in this example listmonk):

[isabell@stardust ~]$ createuser listmonk -P
[isabell@stardust ~]$

Create a new database (in this example listmonk):

[isabell@stardust ~]$ createdb --encoding=UTF8 --owner=listmonk --template=template0 listmonk
[isabell@stardust ~]$

Tip

Please write down your database info with: user, password and database.

Configuration

listmonk configuration

Jump into the listmonk directory:

[isabell@stardust ~]$ cd ~/opt/listmonk/
[isabell@stardust ~]$

Generate the config file:

[isabell@stardust ~]$ ./listmonk --new-config
[isabell@stardust ~]$

Edit the config file ~/opt/listmonk/config.toml and change the predefined values of the admin user and database settings:

[app]
# Interface and port where the app will run its webserver.  The default value
# of localhost will only listen to connections from the current machine. To
# listen on all interfaces use '0.0.0.0'. To listen on the default web address
# port, use port 80 (this will require running with elevated permissions).
address = "0.0.0.0:9000"

# BasicAuth authentication for the admin dashboard. This will eventually
# be replaced with a better multi-user, role-based authentication system.
# IMPORTANT: Leave both values empty to disable authentication on admin
# only where an external authentication is already setup.
admin_username = "listmonk"
admin_password = "password"

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

Create the database structure:

[isabell@stardust ~]$ ./listmonk --install
[isabell@stardust ~]$

Daemon setup

Create ~/etc/services.d/listmonk.ini with the following content:

[program:listmonk]
command=%(ENV_HOME)s/opt/listmonk/listmonk --config %(ENV_HOME)s/opt/listmonk/config.toml
autostart=yes
autorestart=yes

After creating the configuration, tell supervisord to refresh its configuration and start the service:

[isabell@stardust ~]$ supervisorctl reread
SERVICE: available
[isabell@stardust ~]$ supervisorctl update
SERVICE: added process group
[isabell@stardust ~]$ supervisorctl status
SERVICE                            RUNNING   pid 26020, uptime 0:03:14
[isabell@stardust ~]$

If it’s not in state RUNNING, check your configuration.

Webserver setup

Note

listmonk is running on port 9000.

To make the application accessible from the outside, configure a web backend:

[isabell@stardust ~]$ uberspace web backend set / --http --port <port>
Set backend for / to port <port>; please make sure something is listening!
You can always check the status of your backend using "uberspace web backend list".
[isabell@stardust ~]$

Updates

Check the project page on Github for new releases. The update approach is similar to the standard installation.

Stop the daemon:

[isabell@stardust ~]$ supervisorctl stop listmonk
[isabell@stardust ~]$

Jump into the listmonk directory:

[isabell@stardust ~]$ cd ~/opt/listmonk/
[isabell@stardust ~]$

Download the new archive file:

[isabell@stardust ~]$ wget https://github.com/knadh/listmonk/releases/download/<version>/listmonk_<version>_linux_amd64.tar.gz
[isabell@stardust ~]$

Rename your existing file-version:

[isabell@stardust ~]$ mv listmonk listmonk-old
[isabell@stardust ~]$

Untar the archive file:

[isabell@stardust ~]$ tar -xzf listmonk_<version>_linux_amd64.tar.gz
[isabell@stardust ~]$

Delete the archive file:

[isabell@stardust ~]$ rm listmonk_<version>_linux_amd64.tar.gz
[isabell@stardust ~]$

And make the binary file executable:

[isabell@stardust ~]$ chmod +x listmonk
[isabell@stardust ~]$

Start the update process:

[isabell@stardust ~]$ ./listmonk --upgrade
[isabell@stardust ~]$

And start the daemon:

[isabell@stardust ~]$ supervisorctl start listmonk
[isabell@stardust ~]$

In case of no problems you can delete your old version:

[isabell@stardust ~]$ rm listmonk-old
[isabell@stardust ~]$

Tested with listmonk 2.0.0 on Uberspace 7.11.5 with PostgreSQL 13

Written by: FM <git.fm@mmw9.de>