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

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

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

Подготовка сервера

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-адрес сервера>. Мы должны увидеть, примерно, следующее:

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

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 или копируем ссылку для скачивания:

Копируем ссылку для загрузки 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.dmosk.local;
    return 301 https://$host$request_uri;
}

server {
    listen       443;
    server_name  phplist.dmosk.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.dmosk.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.dmosk.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.dmosk.local/admin/

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

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

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

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

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

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

Снова переходим по адресу https://phplist.dmosk.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 для рассылки писем.

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

Да            Нет