Настройка VPS для высоконагруженного WordPress: LEMP + FastCgi Cache и Redis

Обзор скрипта и мануал по развертыванию на VPS\VDS Ubuntu 18.04 заточенного под высоконагруженный WordPress за 10 минут.

Настройка VPS для высоконагруженного WordPress: LEMP + FastCgi Cache и Redis

Была задача установить Wordpress под highload проект вместе с кучей плагинов, сделать из него-то, для чего он не прездназначен. Как обычно по накатанной сделал все в уже давно настроенном и проверенном Vestacp, но что-то пошло не так. То память переполнялась, то ошибка 500, вел себя крайне не стабильно, что для продакшн решения вообще не вариант.

Ночь изысканий варианта решения задачи попроще и испытаний порядка 3 разных решений, которые чаще всего не обновлялись несколько лет я нашел прекрасный инструмент автоматизирующий рутину.

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

Скрипт назвается Webinoly

https://webinoly.com/en/
https://github.com/QROkes/webinoly

Что делает:

Разворачивает LEMP на Ubuntu 18.04 или 16.04 + Nginx + MariaDB (MySQL) + PHP одна из самых надежных конфигураций за 10 минут + автоматически развернет Wordpress (при желании и мультисайтовость с поддоменами умеет) с уже преднастроенным конфигом под БД, что бы не тратить время.

Использует лучшие практики по настройке для вашего сайта:

  • Установит SSL сертификат от Let’s Encrypt.
  • HTTP/2 - настроит и повысит скорость отдачи контента
  • PHP v7.3 поставит, а если надо, то и старые версии (7.2 и 7.1).
  • FastCgi Cache и Redis Object Cache поставит сам. (плагины в wordpress добавит и после установки в консоли выдаст инструкции как их настроить)
  • A+ выдает результат на Qualys (SSL Labs).
  • Тюнит все параметры, для максимально качественного использования ресурсов

Управление сервером:

  • Команды для создания, удаления, отключения сайтов.
  • Поддерживает любые типы контента HTML, PHP, WordPress или любые другие, которые смогут работать на LEMP.
  • Логи в реальном времени выводить умеет
  • Позволяет модифицировать конфиги через скрипт в любое время.
  • Опционально можно включить www-data ограниченого пользователя для загрузки или обновления контента по SFTP.
  • Предустановленный скрипт для создания резервных копий в облаках таких как  Amazon S3 и других.
  • Дополнительная защита безопасности для инструментов доступа, таких как PhpMyAdmin его тоже ставит.

WordPress в один клик

  • Команда для создания и настройки сайтов WordPress, даже «Multisite» в поддомене или подкаталоге.
  • Автоматическая настройка wp-config.php и базы данных
  • Продвинутая технология кэширования  WordPress с FastCgi и Redis. Забудьте об использовании плагинов, таких как W3 Total Cache или SuperCache, тут все сделанно на уровне сервера.
  • Активируйте дополнительный уровень защиты на странице входа в WordPress с HTTP-аутентификацией.
  • Поддержка автоматической настройки внешних баз данных, таких как Amazon RDS.
  • Postfix будет установлен для отправки писем с вашего сайта.

Установка

wget -qO weby qrok.es/wy && sudo bash weby 0

Потом немного потюним настройки:

Сделаем размер файлов для загрузки в 200мб и выставим часовой пояс:

sudo webinoly -conf-value_max-mb-uploads=200
sudo webinoly -timezone=Europe/Moscow

И собственно запустим установку

sudo stack -lemp

На выходе выдаст вам доступы к БД, сохраните. На этом установка завершена, пришло время установить Wordpress

Ставим wordpress и подключаем кэш к нему:

sudo site mymainsite.com -wp -cache=on

А теперь повесим сертификат на него:

sudo site mymainsite.com -ssl=on

Доп.защиту подключим в виде защиты админки под пароль basic:

sudo httpauth -add

Собственно все, если вам нужен сайт один не мульти это действительно все. Заходим на сайт выполняем настройки модулей.

PhpMyAdmin положил в http://IP:22222 что на мой взгляд странно, доработаем добавим ssl от основного домена и будем по нему заходить на служебный порт:

nano /etc/nginx/sites-enabled/22222

В конфиге замените mydomain.ru на адрес своего созданного домена, и захоидить будете не по айпи, а по адресу https://домена:22222

  server {
        # Добавлено ssl 
        listen 22222 ssl default_server deferred;
        listen [::]:22222 ssl default_server;
        
        access_log   /var/log/nginx/22222.access.log we_log;
        error_log    /var/log/nginx/22222.error.log;

        root /var/www/22222/htdocs;
        index index.php index.htm index.html;

        # WebinolySSLstart - ДОБАВЛЕНО ДЛЯ SSL
        ssl_certificate /etc/letsencrypt/live/mydomain.ru/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mydomain.ru/privkey.pem;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/letsencrypt/live/mydomain.ru/chain.pem;


        # Turn on directory listing
        autoindex on;

        # HTTP Authentication on port 22222
        include common/auth.conf;
        include common/acl.conf;

        # PHP Support
        include common/php.conf;
        include common/locations.conf;

        # Status pages
        location = /nginx_status {
                stub_status on;
                access_log off;
        }
        location ~ ^/(status|ping)$ {
                include fastcgi_params;
                fastcgi_pass php;
        }

        # Display menu at location /fpm/status/
        location =  /fpm/status/ {}

        location ~ /fpm/status/(.*) {
                try_files $uri =404;
                include fastcgi_params;
                fastcgi_param  SCRIPT_NAME  /status;
                fastcgi_pass $1;
        }

        # phpMyAdmin protection
        location ~ ^/pma/(libraries|templates) {
                autoindex off;
                deny all;
                access_log off;
                log_not_found off;
        }
}

Перезапускаем nginx и идем проверять:

/etc/init.d/nginx restart

У меня была проблема, что плагин Nginx Helper не сохранял настройки, я заменил его на: Nginx Cache
Добавил в настройки путь к кешу на сервере:

/var/run/nginx-cache

И установил флажок "Automatically flush the cache when content changes"

Доп. плагины, которые я ставлю с 0.

EWWW Image Optimizer - оптимизация и сжатие изображений
Disable All WordPress Updates - отключает все обновления, полезно, когда лазили сильно в код и не хотите, что бы изменения были затерты обновлением плагина или движка.

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

upd. Нашел еще одно решение, интересное.
https://github.com/littlebizzy/slickstack
На досуге установлю протестирую.

0 Комментарии
Загрузка...