Monday, 09 October 2017 21:59

Скоростная Joomla на nginx+php 7.2 (php-fpm) + memcached с selinux enable в CentOS 7

Written by 
Rate this item
(0 votes)

Краткая инструкция по разворачиванию окружения для Joomla с сохранением защиты SELinux. Получаем сверхскорость использованием PHP 7.2 с opcache и memcached.

Шаг 1 - Установка репозитория remi

$ sudo rpm -Uvh  http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Для настройки SELinux установим дополнительный пакет

 

$ sudo yum install policycoreutils

Шаг 2 - Установка и настройка memcached

Устанавливаем memcached

$ sudo yum install memcached

Разрешаем обращение к memcached в фаерволе :

$ sudo firewall-cmd --permanent --zone=public --add-service=memcached

Разрешаем memcached ходить по сети в SElinux:

$ sudo setsebool -P httpd_can_network_memcache 1

Добавляем memcached в автозагрузку:

$ sudo systemctl enable  memcached

Запускаем memcached:

$ sudo systemctl start  memcached

Шаг 3 - Установка PHP 7.2 в режиме FastCGI


Мы будем использовать PHP в режиме FastCGI сервиса (fpm), то есть nginx будет обращаться к PHP как к отдельному процессу:

$ sudo yum install php72-php-fpm php72-php-common php72-php-pecl-memcache php72-php-opcache php72-php-gd php72-php-mbstring php72-php-mysqlnd php72-php-pdo php72-php-pecl-igbinary php72-php-pecl-msgpack

Настройки по умолчанию подходят для большинства серверов. Для тюнинга настроек, обращайтесь к официальной документации PHP FPM site.

Каталог хранения конфигурационных файлов для нашей версии пхп /etc/opt/remi/php72/

Мы внесём следующие изменения в конфигурационный файл

$ sudo vi /etc/opt/remi/php72/php-fpm.d/www.conf


Изменим группу процесса с apache на nginx:

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

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

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php72-fpm-www.sock

Раскомментируем путь к файлам опкэша, зададим явно путь к логам и ограничение памяти для пхп:

php_value[opcache.file_cache]  = /var/opt/remi/php72/lib/php/opcache
php_admin_value[error_log] = /var/log/php-fpm/72-www-error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M

Шаг 4 - Установка и настройка Nginx


Устанавливаем nginx:

$ sudo yum install nginx

Разрешаем обращение к nginx в фаерволе :

$ sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https

Разрешаем nginx ходить по сети в SElinux к пхп и базе:

$ sudo setsebool -P httpd_can_network_connect 1
$ sudo setsebool -P httpd_can_network_connect_db 1

Файлы конфигурации nginx хранятся в:
•    /etc/nginx/conf.d/ настройки виртуальных хостов и сопутствующие
•    /etc/nginx/nginx.conf основной файл конфигурации
Это пример типового файла конфигурации nginx, joomla.conf, который можно использовать для любых сайтов на Joomla.

server {
        listen 80;
        server_name YOUR_DOMAIN;
        server_name_in_redirect off;

        access_log /var/log/nginx/localhost.access_log;
        error_log /var/log/nginx/localhost.error_log info;

        root PATH_ON_SERVER;
        index index.php index.html index.htm default.html default.htm;
        # Support Clean (aka Search Engine Friendly) URLs
        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        # deny running scripts inside writable directories
        location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
                return 403;
                error_page 403 /403_error.html;
        }
        location ~ \.php$ {
            fastcgi_pass  unix:/var/run/php-fpm/php72-fpm-www.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi.conf;
        }

        # caching of files
        location ~* \.(ico|pdf|flv)$ {
                expires 1y;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
                expires 14d;
        }
}

Обратите особое внимание на 2 момента:
1.    Параметр fastcgi_pass установлен на юникс-сокет unix:/var/run/php-fpm/php72-fpm-www.sock, который мы указали в настройках php-fpm. Если вы хотите запускать процессы PHP на других серверах необходимо перенастроить на TCP соединения.
2.    Вспомните заменить YOUR_DOMAIN и PATH_ON_SERVER в файле на ваш домен  и путь к папке Joomla на сервере.

Шаг 4.1 - Включение поддержки GZip

Настоятельно рекомендуем включить поддержку GZip compression support, добавив следующий код внутрь секции http в основном конфигурационном файле nginx:

        gzip on;
        gzip_http_version 1.1;
        gzip_comp_level 6;
        gzip_min_length 1100;
        gzip_buffers 4 8k;
        gzip_types text/plain application/xhtml+xml text/css application/xml application/xml+rss text/javascript application/javascript application/x-javascript
        gzip_proxied     any;
        gzip_disable     "MSIE [1-6]\.";

Шаг 5 — установка MariaDB


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

$ sudo yum install mariadb-server

После установки, добавляем демон в автозагрузку:

$ sudo systemctl enable mariadb

Запускаем сервер базы данных:

$ sudo systemctl start mariadb

systemctl не отображает весь вывод команд, результат можно проверить выполнив:

$ sudo systemctl status mariadb

Если MariaDB успешно запустилась, мы получим сообщение "Active: active (running)` с последней линией похожей на:

   Oct 10 19:06:20 centos-joomla systemd[1]: Started MariaDB database server.

Шаг 6 — безопасность MariaDB Server


MariaDB включает в свою поставку специальный скрипт, который поволяет сменить некоторые настройки по умолчанию, такие как удалённый вход пользователей и пароли по умолчанию. Для этого выполняем:

$ sudo mysql_secure_installation

Скрипт содержит подробное описание действий для каждого шага. Сначала спрашивается смена пароля root.
Дальнейшие предложения можно принимать нажимая Y и потом ENTER для большинства строк, это удалит доступ неавторизованных пользователей по сети, отключит сетевой вход для root, удалит тестовую базу данных, и перезагрузит таблицы с привилегиями .

Шаг 7 — создание базы и отдельного пользователя для Joomla.

Входим на сервер MariaDB под рутом:


$ mysql -u root –pМОЙПАРОЛЬБЕЗРОБЕЛА


Создаём базу данных myjoomla(смените на своё название):

CREATE DATABASE myjoomla;

Создаём польователя joomuser для базы myjoomla и паролем ‘password’. Эта команда также даст полные права пользователю на эту базу:

GRANT ALL ON myjoomla.* TO joomuser@localhost IDENTIFIED BY 'password';

Выйти из mysql, войти в веб-интерфейс установщика joomla, указать в настройках базы данных созданную базу, пользователя и пароль. Провести штатную установку.

На этом установка быстрого и безопасного окружения для Joomla завершена. В настройках кэширования можно указать сервер memcache для хранения кэша и сессий.

Про настройку Joomla c SSL можно прочитать в нашем руководстве.

Read 5028 times Last modified on Monday, 09 October 2017 22:43