Содержание

Установка и настройка Listmonk: Современная система рассылок на личном VPS

В условиях, когда алгоритмы поисковых систем регулярно меняются, прямая связь со своей аудиторией становится ключевым активом. Listmonk — это легкая, сверхбыстрая и высокопроизводительная платформа с открытым исходным кодом для управления информационными рассылками и email-кампаниями.

Благодаря тому, что сервис работает в формате Self-hosted, вы полностью контролируете собственную базу подписчиков, приватность данных и не зависите от ежемесячных тарифов сторонних сервисов вроде Mailchimp или Brevo.

Что такое Listmonk и его ключевые возможности

Listmonk написан на языке Go и использует PostgreSQL в качестве базы данных. В отличие от тяжеловесных систем, он потребляет минимальное количество ресурсов сервера (от 50 МБ RAM) и способен обрабатывать отправку тысяч писем в минуту.

Основные возможности:

Кому подходит Listmonk?

Listmonk идеально подходит владельцам контентных проектов, веб-мастерам, DevOps-инженерам и разработчикам, которым нужна независимая, приватная и быстрая система для работы с аудиторией без переплат за сторонние SaaS-решения.

Пошаговая инструкция по установке через Docker Compose

Хотя приложения на Go часто запускаются бинарным файлом, использование Docker для Listmonk является наиболее рациональным выбором. Это связано с требованиями к конкретной конфигурации PostgreSQL и удобством обслуживания. Дело в том, что Listmonk использует PostgreSQL с расширением POSIX/ICU для правильной сортировки и работы со спецсимволами, а также внутреннюю схему миграций. Запуск через Docker избавляет от необходимости вручную компилировать или настраивать PostgreSQL в системе и позволяет обновить сервис одной командой.

Предварительная установка Docker и Docker Compose

Для работы Listmonk потребуется установить официальный Docker Engine и плагин Docker Compose, что подробно рассматривается в разделе Установка в Debian, Ubuntu. Ниже я предполагаю, что Docker уже установлен.

Шаг 1. Подготовка каталога

Создайте рабочую директорию для проекта на вашем VPS:

mkdir -p /opt/listmonk
cd /opt/listmonk

Шаг 2. Загрузка стандартного docker-compose.yml

Загрузите официальный `docker-compose.yml` из репозитория проекта:

curl -LO https://github.com/knadh/listmonk/raw/master/docker-compose.yml

Запустите сервисы в фоновом режиме:

docker compose up -d

Примечание: Команда автоматически скачает образы PostgreSQL и Listmonk, поднимет базу данных, выполнит миграции и запустит веб-интерфейс.

Шаг 3. Первый вход и проверка

Проверить статус запущенных контейнеров можно командой:

docker compose ps
 
NAME           IMAGE                      COMMAND                  SERVICE   CREATED              STATUS                        PORTS
listmonk_app   listmonk/listmonk:latest   "docker-entrypoint.s…"   app       About a minute ago   Up About a minute             0.0.0.0:9000->9000/tcp, [::]:9000->9000/tcp
listmonk_db    postgres:17-alpine         "docker-entrypoint.s…"   db        About a minute ago   Up About a minute (healthy)   127.0.0.1:5432->5432/tcp

После успешного старта веб-интерфейс Listmonk будет доступен по адресу:

http://YOUR_SERVER_IP:9000

При первом визите система автоматически перенаправит вас на страницу создания учетной записи суперадминистратора (`/admin/login`).

1. Заполните форму, указав желаемый **Username** и надежный **Password**.
2. Нажмите кнопку создания пользователя для завершения установки и входа в панель управления.

Настройка веб-сервера Nginx (Reverse Proxy), SSL и UFW

Для обеспечения безопасности данных, корректной работы трекинга писем и защиты от спам-фильтров панель управления и ссылки Listmonk должны работать строго по протоколу HTTPS через ваш домен (например, `newsletter.dieg.net`).

Шаг 1. Установка Nginx и Certbot

Установите веб-сервер Nginx и утилиту Certbot:

apt update && apt install -y nginx certbot python3-certbot-nginx

Шаг 2. Безопасность: Закрытие прямого доступа по IP к Listmonk: файрвол UFW, Docker, Nginx

Помните!

По умолчанию Docker внедряется напрямую в iptables (на уровень ядра Linux) и добавляет свои правила проброса портов ДО того, как до них доходят правила UFW.

По умолчанию порт 9000 открыт для всего интернета. Чтобы панель была доступна строго через Nginx с HTTPS, откройте docker-compose.yml и измените проброс портов:

    ports:
      - "127.0.0.1:9000:9000"

После этого примените изменения командой:

docker compose up -d

Примечание: Docker Compose автоматически пересоздаст только контейнер приложения за 1-2 секунды, не затрагивая базу данных.

Теперь Listmonk будет принимать соединения только от локального веб-сервера Nginx.

Разрешите подключения по SSH и стандартным веб-портам, после чего включите UFW:

ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable

Примечание: Порт 9000 открывать в UFW не нужно — доступ к нему будет производиться локально через Nginx.

Мы должны получить такую конфигурацию:

# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
 
To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)

Шаг 3. Конфигурация Nginx

Создайте конфигурационный файл для вашего поддомена:

nano /etc/nginx/sites-available/listmonk.conf

Добавьте следующее содержимое (замените `newsletter.dieg.net` на ваш поддомен):

server {
    listen 80;
    server_name newsletter.dieg.net;
 
    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Активируйте виртуальный хост и проверьте синтаксис:

ln -s /etc/nginx/sites-available/listmonk.conf /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

Шаг 4. Выпуск бесплатного SSL-сертификата

Запустите Certbot для автоматического выпуска и установки SSL-сертификата Let's Encrypt:

certbot --nginx -d newsletter.dieg.net

Утилита автоматически настроит редирект с HTTP на HTTPS. После этого ваша система полностью готова к безопасной работе по адресу `https://newsletter.dieg.net`.

Пост-установка и обслуживание

Теперь вы можете перейти по адресу `https://newsletter.dieg.net` и войти в панель управления с учетными данными, которые вы указали при старте.

Обновление Listmonk

Чтобы обновить Listmonk до последней версии, достаточно выполнить две команды в рабочей директории `/opt/listmonk`:

docker compose pull
docker compose up -d