listmonk/README.md

5.7 KiB

listmonk

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL database as its data store.

listmonk-dashboard Visit listmonk.app

Installation

Docker

The latest image is available on DockerHub at listmonk/listmonk:latest. Use the sample docker-compose.yml to run listmonk and Postgres DB with docker-compose as follows:

Demo

mkdir listmonk-demo
sh -c "$(curl -sSL https://raw.githubusercontent.com/knadh/listmonk/master/install-demo.sh)"

The demo does not persist Postgres after the containers are removed. DO NOT use this demo setup in production.

Production

  • docker-compose up db to run the Postgres DB.
  • docker-compose run --rm app ./listmonk --install to setup the DB (or --upgrade to upgrade an existing DB)
  • Run docker-compose up app and visit http://localhost:9000.

More information on docs.


Binary

prerequisites Debian: system user and PostgreSQL

  • install sudo
  • install PostgreSQL apt install postgresql
  • --create system user with config.toml data for the database: adduser listmonkuser--
  • create the postgreSQL database, the user and grant permissions: su - postgres and then acces de PostgreSQL console psql
    postgres=# CREATE DATABASE listmonkdatabase;
    postgres=# CREATE USER listmonkuser WITH PASSWORD 'listmonkpassword';
    postgres=# GRANT ALL PRIVILEGES ON DATABASE listmonkdatabase TO listmonkuser;
    

download an prepare config file

  • cd /var/www/ and make the directory mkdir listmonk
  • cd listmonk
  • Download the latest release and extract the listmonk binary.
    wget https://github.com/knadh/listmonk/releases/download/v1.0.0/listmonk_1.0.0_linux_amd64.tar.gz
    wget https://github.com/knadh/listmonk/releases/download/v1.0.0/listmonk_1.0.0_checksums.txt
    sha256sum listmonk_1.0.0_linux_amd64.tar.gz
    cat listmonk_1.0.0_checksums.txt |grep linux
    
  • change ownership of files chown -R www-data:www-data /var/www/listmonk
  • generate config file sudo -u www-data ./listmonk --new-config
  • edit the config file with the data we created previously and more options vim /var/www/listmonk/confif.toml

reverse proxy

  • create the apache config to work behind a reverse proxy /etc/apache2/sites-available/listmonk.doamain.tdl.conf
<VirtualHost *:80>
    ServerName listmonk.domain.tdl

    ServerSignature Off


    ErrorLog /var/log/apache2/listmonk.domain.tdl_error.log
    TransferLog /var/log/apache2/listmonk.domain.tdl_access.log
    LogLevel warn

    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:9000/"
    ProxyPassReverse "/" "http://127.0.0.1:9000/"
</VirtualHost>
  • enable the proxy module a2enmod proxy_http enable the site a2ensite listmonk.domain.tdl and restart apache systemctl reload apache2

proceed to install

  • sudo -u www-data ./listmonk --install to setup the Postgres DB (or --upgrade to upgrade an existing DB. Upgrades are idempotent and running them multiple times have no side effects).
  • Run sudo -u www-data ./listmonk and visit http://listmonk.domain.tdl

after install, fine tunning

oncen checked it works, stop the process.

  • move the files to where you like most, usually /opt/listmonk/ or inside /var/www/html/
  • change ownership of the files to www-data or whatever user you have assigned the webserver chown -R www-data:www-data listmonk
  • run listmonk as a service, create /etc/systemd/system/listmonk.service with:
    [Unit]
    Description=Listmonk domain.tdl server
    After=syslog.target network.target postgressql.target
    
    [Service]
    Type=simple
    # the user and group executing the service
    User=www-data
    Group=www-data
    # the directory where you have listmonk
    WorkingDirectory=/var/www/html/listmonk
    # the file to execute
    ExecStart=/var/www/html/listmonk/listmonk
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  • enable the service systemct enable listmonk.service and restart the daemon systemctl daemon-restart or you can start just the service systemctl start listmonk.service

fixing small dependencies

  • uploads fail: mkdir /var/www/html/listmonk/uploads and chown -R www-data:www-data /var/www/html/listmonk

Heroku

Using the Nginx buildpack can be used to deploy listmonk on Heroku and use Nginx as a proxy to setup basicauth. This one-click Heroku deploy button provides an automated default deployment.

Deploy

Please note that configuration options must be set using environment configuration variables.

Developers

listmonk is a free and open source software licensed under AGPLv3. If you are interested in contributing, refer to the developer setup. The backend is written in Go and the frontend is Vue with Buefy for UI.

License

listmonk is licensed under the AGPL v3 license.