PHPlist — это веб-приложение, разработанное на PHP для управления почтовыми рассылками. Оно устанавливается на веб-сервер (как правило, NGINX или Apache). В данной статье рассмотрим пример развертывания phplist на nginx под управлением операционной системы Linux CentOS 7.
Подготовка сервера
Отключение SELinux
Настройка времени
Установка и настройка веб-сервера
Установка PHP и необходимых компонентов
Установка СУБД
Установка phplist
Загрузка и распаковка пакета
Подготовка базы в СУБД
Настройка phplist
Настройка NGINX (создание виртуального домена)
Настройка PHP-FPM
Веб-установка phplist
Увеличение времении сессии
Работа с phplist
Подготовка сервера
1. Отключаем Selinux
Для этого вводим две команды:
setenforce 0
sed -i «s/SELINUX=enforcing/SELINUX=disabled/» /etc/selinux/config
* первая команда отключает систему безопасности разово для текущей загрузки, вторая — навсегда. Подробнее про отключение Selinux или его правильную настройку .
2. Настраиваем время
Задаем временную зону:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере московское время.
Устанавливаем утилиту для синхронизации времени:
yum install chrony
Запускаем сервис и разрешаем его автозапуск:
systemctl enable chronyd —now
Установка и настройка веб-сервера
NGINX
Если в системе не установлен NGINX, выполняем команду:
yum install epel-release
yum install nginx
Открываем порты в брандмауэре для http и https:
firewall-cmd —permanent —add-port={80,443}/tcp
firewall-cmd —reload
Разрешаем автостарт NGINX и запускаем его:
systemctl enable nginx
systemctl start nginx
Открываем браузер на любом компьютере в сети и вводим http://<IP-адрес сервера> . Мы должны увидеть, примерно, следующее:
PHP и PHP-FPM
Устанавливаем необходимые компоненты:
yum install php php-fpm php-mysql php-mysqli
Разрешаем автозапуск php-fpm и запускаем его:
systemctl enable php-fpm
systemctl start php-fpm
Установка сервера баз данных
Устанавливаем СУБД MariaDB:
yum install mariadb mariadb-server
Разрешаем автозапуск и стартуем службу:
systemctl enable mariadb
systemctl start mariadb
Задаем пароль для root-пользователя базы данных:
mysqladmin -u root password
Установка phplist
1. Скачиваем и распаковываем портал
Переходим на страницу sourceforge.net — скачиваем последнюю версию phplist или копируем ссылку для скачивания:
… и вводим команду в CentOS:
wget https://sourceforge.net/projects/phplist/files/phplist/3.5.1/phplist-3.5.1.zip/download -O phplist.zip
* где https://sourceforge.net/projects/phplist/files/phplist/3.5.1/phplist-3.5.1.zip/download — скопированная ссылка на phplist версии 3.5.1.
* если мы скачали архив на компьютере с Windows, перенести его на Linux можно с помощью программы WinSCP .
Распаковываем архив:
unzip phplist.zip
* если система выдаст ошибку, устанавливаем unzip командой yum install unzip .
Переходим в распакованный каталог:
cd phplist-*
Создаем каталог для портала:
mkdir /var/www/phplist
и переносим в него файлы phplist:
mv public_html/lists/* public_html/lists/.htaccess /var/www/phplist
Меняем владельца для папки:
chown -R nginx:nginx /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 — пароль.
Выходим:
> q
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. Настраиваем NGINX
Новые версии phplist по умолчанию корректно работают только по https. Поэтому необходимо создать виртуальный домен на порту 443 с редиректом.
Создаем новый файл с конфигурацией для виртуального домена:
vi /etc/nginx/conf.d/phplist.conf
server {
listen 80;
server_name domain.ru phplist.remontka.local;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name phplist.remontka.local;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
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;
}
}
* ssl — включает шифрование для https; ssl_certificate — путь до открытого ключа шифрования; ssl_certificate_key — закрытый ключ; phplist.remontka.local — виртуальный домен нашего портала управления рассылками; /var/www/phplist — путь расположения файлов портала на сервере; /var/run/php-fpm/php-fpm.sock — путь до нашего сокетного файла php-fpm;
Создаем каталог для хранения сертификата:
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.remontka.local/CN=test»
* данной командой мы создадим открытый и закрытый ключи cert.pem и cert.key на 4 года; subj перечисляет параметры для сертификата (их можно оставить такиеми же или заменить своими).
В боевой среде желательно использовать корректный сертификат. Для этого его можно купить или сгенерировать в Let’s Encrypt бесплатно.
Перезапускаем nginx:
systemctl restart nginx
5. Настраиваем PHP-FPM
Открываем конфиг php-fpm:
vi /etc/php-fpm.d/www.conf
Меняем:
listen = 127.0.0.1:9000
На:
listen = /var/run/php-fpm/php-fpm.sock
Перезапускаем php-fpm:
systemctl restart php-fpm
6. Завершение установки phplist
Открываем в браузере страницу: https://phplist.remontka.local/admin/
* так как в нашей конфигурации nginx мы настроили виртуальный домен, важно открыть ссылку по доменному имени. Оно должно быть добавлено в DNS или локальный файл hosts. В вашем случае домен должен быть отличный от phplist.remontka.local .
На открывшейся странице кликаем по Initialise Database :
Заполняем форму:
Дожидаемся окончания установки.
Снова переходим по адресу https://phplist.remontka.local/admin/ и приступаем к работе с рассылками.
Увеличение времени сессии
По умолчанию время активной сессии будет составлять 1800 секунд или 30 минут. Этого, как правило, оказывается недостаточно.
Открываем файл php.ini:
vi /etc/php.ini
И редактируем следующий параметр:
session.gc_maxlifetime = 86400
* где параметр gc_maxlifetime указывает на временя в секундах, после прошествии которого данные могут быть удалены. В данном примере указан период 24 часа.
Перезапускаем php-fpm:
systemctl restart php-fpm
Проверим, что параметр применился:
php -i | grep session.gc_maxlifetime
Мы должны увидеть:
session.gc_maxlifetime => 86400 => 86400
На всякий случай, также настроим phplist:
vi /var/www/phplist/admin/init.php
if (!defined(‘SESSION_TIMEOUT’)) {
define(‘SESSION_TIMEOUT’, 86400);
}
* мы заменили значение по умолчанию 1800 на 86400 .
Если мы используем Интернет провайдера, который часто меняет IP-адреса, мы будем получать сообщение «Ваш IP изменился. В целях безопасности войдите снова» и сессия будет удаляться. Для отключения проверки IP-адреса открываем конфигурационный файл:
vi /var/www/phplist/config/config.php
Добавляем строку:
define(«CHECK_SESSIONIP»,0);
Работа с phplist
Переходим к настройке и использованию менеджера рассылки.
Подробнее, данный процесс описан в инструкции Настройка и использование phplist для рассылки писем .