Установка и настройка Listmonk: Современная система рассылок на личном VPS
В условиях, когда алгоритмы поисковых систем регулярно меняются, прямая связь со своей аудиторией становится ключевым активом. Listmonk — это легкая, сверхбыстрая и высокопроизводительная платформа с открытым исходным кодом для управления информационными рассылками и email-кампаниями.
Благодаря тому, что сервис работает в формате Self-hosted, вы полностью контролируете собственную базу подписчиков, приватность данных и не зависите от ежемесячных тарифов сторонних сервисов вроде Mailchimp или Brevo.
Что такое Listmonk и его ключевые возможности
Listmonk написан на языке Go и использует PostgreSQL в качестве базы данных. В отличие от тяжеловесных систем, он потребляет минимальное количество ресурсов сервера (от 50 МБ RAM) и способен обрабатывать отправку тысяч писем в минуту.
Основные возможности:
- Управление подписчиками: Поддержка списков, произвольных атрибутов (JSONB), импорт и экспорт баз данных в CSV.
- Формы и подписки: Встроенные формы подписки, поддержка двойного подтверждения (Double Opt-in) и автоматическая обработка отписок.
- Шаблонизация: Гибкий редактор шаблонов на базе Go-templates с поддержкой HTML и plain-text писем.
- Кампании и аналитика: Управление рассылками, планирование отправки, отслеживание открытий (Open rate) и кликов по ссылкам (Click rate).
- Транзакционные письма: Наличие REST API позволяет использовать Listmonk для отправки системных уведомлений с вашего сайта или приложения.
- Многопоточность и производительность: Высокая скорость работы при минимальной нагрузке на CPU и оперативную память.
Кому подходит 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
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!