PHPlist — это веб-приложение, разработанное на PHP для управления почтовыми рассылками. Оно устанавливается на веб-сервер (как правило, NGINX или Apache). В данной статье рассмотрим пример развертывания phplist на nginx под управлением операционной системы Linux Ubuntu 18.04.
Для планирования рассылки и получения корректных отчетов необходимо, чтобы на сервере было всегда правильное время.
1. Задаем временную зону:
\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере московское время. Полный список настроек для зон находится в каталоге /usr/share/zoneinfo.
2. Устанавливаем утилиту для синхронизации времени:
apt-get install chrony
… и разрешаем ее автозапуск:
systemctl enable chrony
Как говорилось ранее, в качестве веб-сервера мы будем использовать связку NGINX + PHP + MariaDB.
Если в системе не установлен NGINX, выполняем команду:
apt-get install nginx
Если используется брандмауэр, открываем порты для http и https:
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 443 -j ACCEPT
Сохраняем правила:
apt-get install iptables-persistent
netfilter-persistent save
Разрешаем автостарт NGINX и запускаем его:
systemctl enable nginx
Открываем браузер на любом компьютере в локальной сети и вводим http://<IP-адрес сервера>. Мы должны увидеть, примерно, следующее:
Устанавливаем необходимые компоненты:
apt-get install php php-fpm php-imap php-mysql php-mysqli
Разрешаем автозапуск php-fpm:
systemctl enable php7.2-fpm
* в данном примере установлена версия php7.2. Если версия будет другой, то и версия php7.2-fpm должна быть соответственным образом изменена.
Устанавливаем СУБД MariaDB:
apt-get install mariadb-server
Разрешаем автозапуск службы:
systemctl enable mariadb
Задаем пароль для root-пользователя базы данных:
mysqladmin -u root password
Переходим на страницу sourceforge.net — скачиваем последнюю версию phplist или копируем ссылку для скачивания:
… и вводим команду в командной строке Linux:
wget -O phplist.tgz https://sourceforge.net/projects/phplist/files/phplist-development/3.5.3-RC1/phplist-3.5.3-RC1.tgz/download
* где https://sourceforge.net/projects/phplist/files/phplist-development/3.5.3-RC1/phplist-3.5.3-RC1.tgz/download — скопированная ссылка на phplist версии 3.5.3. В данном примере мы скачиваем архив и сохраняем его под именем phplist.tgz.* если мы скачали архив на компьютере с Windows, перенести его на Linux можно с помощью программы WinSCP.
Распаковываем архив:
tar zxvf 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
Подключаемся к СУБД:
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 — пароль.
Выходим:
Открываем конфигурационный файл 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 = ”;
Новые версии 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.admins24.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.admins24.local;
location ~ /.well-known { root /usr/share/nginx/html; allow all; } if ($uri !~ /.well-known){ return 301 https://$host$request_uri; }}
* где phplist.admins24.local — виртуальный домен нашего портала управления рассылками (его нужно заменить своим доменом); данной настройкой мы перенаправим все запросы, кроме /.well-known, на https. Сам https мы настроим позже.
Перезапускаем nginx:
systemctl reload nginx
Устанавливаем утилиту для запроса сертификата certbot:
apt-get install certbot
Получаем сертификат командой:
certbot certonly –webroot –agree-tos –email [email protected] –webroot-path /usr/share/nginx/html/ -d phplist.admins24.local
* данной командой мы запросим сертификат для узла phplist.admins24.local.
Мы должны получить ответ:
IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at:…
… который свидетельствует, что сертификаты получены.
Открываем файл с конфигурацией для виртуального домена:
Добавляем:
…
server { listen 443; server_name phplist.admins24.local; ssl on; #ssl_certificate /etc/nginx/ssl/cert.pem; #ssl_certificate_key /etc/nginx/ssl/cert.key; ssl_certificate /etc/letsencrypt/live/phplist.admins24.local/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/phplist.admins24.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-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}
* где:
systemctl restart nginx
Открываем конфиг php-fpm:
vi /etc/php/7.2/fpm/pool.d/www.conf
Проверяем, чтобы настройка listen была такой:
listen = /var/run/php-fpm/php-fpm.sock
* если же настройка другая, но мы не можем ее менять, так как она используется другими конфигурационными файлами nginx, то меняем опцию fastcgi_pass в нашем конфигурационном файле для виртуального домена.
Перезапускаем php-fpm:
systemctl restart php-fpm
Открываем в браузере страницу: https://phplist.admins24.local/admin/
* так как в нашей конфигурации nginx мы настроили виртуальный домен, важно открыть ссылку по доменному имени. Оно должно быть добавлено в DNS или локальный файл hosts. В вашем случае домен должен быть отличный от phplist.admins24.local.
На открывшейся странице кликаем по Initialise Database:
Заполняем форму:
Дожидаемся окончания установки.
Снова переходим по адресу https://phplist.admins24.local/admin/ и приступаем к работе с рассылками.
Переходим к настройке и использованию менеджера рассылки.
Подробнее, данный процесс описан в инструкции Настройка и использование phplist для рассылки писем.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies