Установка и настройка менеджера почтовой рассылки phplist на Ubuntu / Debian

Обновлено Обновлено: Опубликовано Опубликовано:

PHPlist — это веб-приложение, разработанное на PHP для управления почтовыми рассылками. Оно устанавливается на веб-сервер (как правило, NGINX или Apache). В данной статье рассмотрим пример развертывания phplist на nginx под управлением операционной системы Linux Ubuntu 18.04 / 20.04 / 22.04, а также Debian 11 и 12.

Настройка времени

Для планирования рассылки и получения корректных отчетов необходимо, чтобы на сервере было всегда правильное время.

1. Задаем временную зону:

timedatectl set-timezone Europe/Moscow

* в данном примере московское время. Полный список всех доступных зон можно посмотреть командой timedatectl list-timezones.

2. Устанавливаем утилиту для синхронизации времени:

apt install chrony

... и разрешаем ее автозапуск:

systemctl enable chrony

Установка и настройка веб-сервера

Как говорилось ранее, в качестве веб-сервера мы будем использовать связку NGINX + PHP + MariaDB.

NGINX

Если в системе не установлен NGINX, выполняем команду:

apt install nginx

Если используется брандмауэр, открываем порты для http и https:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -p tcp --dport 443 -j ACCEPT 

Сохраняем правила: 

apt install iptables-persistent

netfilter-persistent save

Разрешаем автостарт NGINX и запускаем его:

systemctl enable nginx

Открываем браузер на любом компьютере в локальной сети и вводим http://<IP-адрес сервера>. Мы должны увидеть, примерно, следующее:

Проверка работы NGINX — стартовая страница

PHP и PHP-FPM

Обратите внимание на требования к версии php. На момент обновления инструкции это была 8.1 и более новая. Посмотреть, какая версия будет устанавливаться можно командой:

apt search --names-only '^php[.0-9]{3}$'

Если версия устанавливаемой PHP не соответствует требованиям, необходимо выполнить установку с использованием сторонних репозиториев. Подробнее об этом в инструкциях Установка разных версий PHP на Linux Ubuntu и Установка разных версий PHP на Linux Debian.

Устанавливаем необходимые компоненты:

apt install php php-fpm php-curl php-date php-gd php-iconv php-imap php-json php-mbstring php-mysqli php-xml php-zip

Для дальнейшего удобства, посмотрим версию установленной PHP и зададим системную переменную:

php -v

export PHP_VER=8.1

* в моем примере версия 8.1.

Разрешаем автозапуск php-fpm:

systemctl enable php${PHP_VER}-fpm

Установка сервера баз данных

Устанавливаем СУБД MariaDB:

apt install mariadb-server

Разрешаем автозапуск службы:

systemctl enable mariadb

Задаем пароль для root-пользователя базы данных:

mysqladmin -u root password

Установка phplist

1. Скачиваем и распаковываем портал

Переходим на страницу sourceforge.net — скачиваем последнюю версию phplist или копируем ссылку для скачивания:

Копируем ссылку на последнюю версию phplist

... и вводим команду в командной строке Linux:

wget -O phplist.tgz https://sourceforge.net/projects/phplist/files/phplist/3.6.10/phplist-3.6.10.tgz/download

* где https://sourceforge.net/projects/phplist/files/phplist/3.6.10/phplist-3.6.10.tgz/download — скопированная ссылка на phplist версии 3.6.10. В данном примере мы скачиваем архив и сохраняем его под именем phplist.tgz.
* если мы скачали архив на компьютере с Windows, перенести его на Linux можно с помощью программы WinSCP.

Распаковываем архив:

tar -zxf phplist.tgz

Переходим в распакованный каталог:

cd phplist-*/

Создаем каталог для портала:

mkdir /var/www/phplist

и переносим в него файлы phplist:

mv public_html/lists/* public_html/lists/.htaccess /var/www/phplist

Меняем владельца для папки:

chown -R www-data:www-data /var/www/phplist

2. Создаем базу данных

Подключаемся к СУБД:

mysql -uroot -p

* нужно будет ввести пароль, который мы устанавливали на этапе установки MariaDB.

Создаем базу:

> CREATE DATABASE phplistdb CHARACTER SET utf8 COLLATE utf8_general_ci;

* где phplistdb — имя базы.

Добавляем пользователя:

> GRANT ALL PRIVILEGES on phplistdb.* to 'phplist'@'localhost' IDENTIFIED BY 'phplist123';

* где phplist — имя пользователя; phplist123 — пароль.

Выходим: 

> quit

3. Настраиваем phplist

Открываем конфигурационный файл phplist и редактируем следующее:

vi /var/www/phplist/config/config.php

$database_host = "localhost";
...
$database_name = "phplistdb";
...
$database_user = "phplist";
...
$database_password = 'phplist123';
...
define ("TEST",0);

* где опции database_host — имя сервера баз данных; database_name — имя базы данных; database_user — пользователь для подключения к базе данных; database_password — пароль для подключения к базе; define ("TEST",0) — отключение тестового режима (на первое время, можно оставить без изменения).

Добавляем следующие строки:

$language_module = "russian.inc";
$default_system_language = "ru";
$pageroot = '';

4. Настраиваем SSL в NGINX

Новые версии phplist по умолчанию корректно работают только по https. Поэтому необходимо создать виртуальный домен на порту 443 с редиректом.

Генерируем сертификат

Рассмотрим подробнее 2 варианта — самоподписанный и бесплатный от Let's Encrypt. Второй вариант потребует больше действий, но позволит сформировать корректный сертификат, который не будет вызывать ошибку в браузере.

а) Самоподписанный

Создаем каталог для хранения сертификата:

mkdir /etc/nginx/ssl

Создаем сами сертификаты:

openssl req -new -x509 -days 1461 -nodes -out /etc/nginx/ssl/cert.pem -keyout /etc/nginx/ssl/cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test"

* данной командой мы создадим открытый и закрытый ключи cert.pem и cert.key на 4 года; subj перечисляет параметры для сертификата (их можно оставить такими же или заменить своими).

б) Бесплатный от Let's Encrypt

В боевой среде желательно использовать корректный сертификат. Для этого его можно купить или сгенерировать в Let's Encrypt бесплатно. Рассмотрим процесс получения бесплатного.

Создадим конфигурационный файл в NGINX:

vi /etc/nginx/sites-enabled/phplist.conf

server {
    listen 80;
    server_name phplist.dmosk.local;

    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }
    if ($uri !~ /.well-known){
        return 301 https://$host$request_uri;
    }
}

* где phplist.dmosk.local — виртуальный домен нашего портала управления рассылками (его нужно заменить своим доменом); данной настройкой мы перенаправим все запросы, кроме /.well-known, на https. Сам https мы настроим позже.

Перезапускаем nginx:

nginx -t && nginx -s reload

Устанавливаем утилиту для запроса сертификата certbot:

apt install certbot

Получаем сертификат командой:

certbot certonly --webroot --agree-tos --email postmaster@dmosk.ru --webroot-path /usr/share/nginx/html/ -d phplist.dmosk.local

* данной командой мы запросим сертификат для узла phplist.dmosk.local.

Мы должны получить ответ:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
...

... который свидетельствует, что сертификаты получены.

Настройка виртуального домена в nginx

Открываем файл с конфигурацией для виртуального домена:

vi /etc/nginx/sites-enabled/phplist.conf

Добавляем: 

...

server {
    listen       443 ssl;
    server_name  phplist.dmosk.local;
    #ssl_certificate /etc/nginx/ssl/cert.pem;
    #ssl_certificate_key /etc/nginx/ssl/cert.key;
    ssl_certificate /etc/letsencrypt/live/phplist.dmosk.local/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/phplist.dmosk.local/privkey.pem;

    root /var/www/phplist;
    client_max_body_size 32m;

    location / {
        root   /var/www/phplist;
        index  index.php;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

* где:

  • phplist.dmosk.local — виртуальный домен нашего портала управления рассылками. Его нужно заменить своим доменом; 
  • ssl — включает шифрование для https; 
  • ssl_certificate — путь до открытого ключа шифрования; не забываем менять путь на свой.
  • ssl_certificate_key — закрытый ключ; не забываем менять путь на свой.
  • стоить обратить внимание на закомментированные строки сертификатов — это настройка для самоподписанных ключей. Если мы настраиваем сервер с ними, снимаем комментарии и наоборот — комментируем строки для сертификатов от Let's Encrypt.
  • /var/www/phplist — путь расположения файлов портала на сервере; 
  • /var/run/php/php-fpm.sock — путь до нашего сокетного файла php-fpm. На данный параметр обратите особое внимание. Если в вашей системе установлено несколько версий PHP, данный путь ведет на версию, которая используется по умолчанию. Возможно, вам нужно будет указать конкретный путь до конкретного файла;

Перезапускаем nginx:

nginx -t && nginx -s reload

5. Завершение установки phplist

Открываем в браузере страницу: https://phplist.dmosk.local/admin/

* так как в нашей конфигурации nginx мы настроили виртуальный домен, важно открыть ссылку по доменному имени. Оно должно быть добавлено в DNS или локальный файл hosts. В вашем случае домен должен быть отличный от phplist.dmosk.local.

На открывшейся странице кликаем по Initialise Database:

Инициализируем базу данных в phplist

Заполняем форму:

Заполняем первичные данные для окончания установки phplist

Дожидаемся окончания установки.

Снова переходим по адресу https://phplist.dmosk.local/admin/ и приступаем к работе с рассылками.

Работа с phplist

Переходим к настройке и использованию менеджера рассылки.

Подробнее, данный процесс описан в инструкции Настройка и использование phplist для рассылки писем.

Диагностика ошибок

По умолчанию, phplist подавляет ошибки веб-приложения. Если в процессе его установки и запуска мы столкнемся с проблеммами, для их решения сначала необходимо включить лог.

Для этого открываем файл admin/init.php, находящийся в каталоге портала. В моем примере:

vi /var/www/phplist/admin/init.php

Меняем значение для функции error_reporting на 1. Должно получиться:

error_reporting(1);

После можно уже запускать чтение логов:

tail -f /var/log/nginx/error.log

Читайте также

Дополнительная информация по работе с рассылками:

1. Настройка почтового сервера для массовой рассылки сообщений.

2, Как обновить phplist,

3, Установка и настройка phplist на CentOS 7,

# NGINX # Ubuntu # Почта # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет