База знаний

Как создать отказоустойчивый сайт на WordPress, используя возможности CLO

В этой статье мы рассмотрим пример построения отказоустойчивого сайта на WordPress, использующего возможности балансировщика нагрузки и серверов проекта CLO с предустановленной ОС.

Технические требования

Для развёртывания сайта в соответствии с указанным примером вам потребуются:

В данной статье в качестве примера используются следующие имена:

  • сервер — wp-node-1
  • домен — example.ru

Вы можете заменить эти имена на актуальные названия вашего сервера и домена.

Установка программного обеспечения

Установите набор необходимых пакетов:

apt install -y gnupg nginx php-fpm php-mysqli php-gd certbot python3-certbot-nginx ocfs2-tools

Используя certbot, выпустите сертификат lets encrypt для вашего домена:

certbot certonly  -d example.ru

Удалите стандартную конфигурацию nginx:

rm -f /etc/nginx/sites-enabled/default

Создайте новый файл конфигурации nginx (/etc/nginx/sites-enabled/example.ru) со следующим содержимым:

server {
        listen 80 default_server;
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
        root /var/www/example.ru;
        index index.php;

        server_name _;

        location / {
                try_files $uri $uri/ index.php$args;
        }

        location ~ \.php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        }       
}

Загрузите и распакуйте WordPress:

wget https://ru.wordpress.org/latest-ru_RU.tar.gz

tar -zxf latest-ru_RU.tar.gz

rm -rf /var/www/html

mv wordpress /var/www/example.ru

chown -R www-data:www-data /var/www/example.ru

Перезагрузите nginx, чтобы новая конфигурация вступила в силу:

nginx -s reload

Откройте в браузере сайт https://example.ru/ и выполните установку WordPress, используя интерфейс установщика. На втором шаге установки используйте параметры доступа к кластеру MySQL, заданные при создании этого кластера.

Перенос существующего сайта на новый сервер

Если у вас уже есть готовый сайт, вам необходимо выполнить следующие действия:

  • перенести данные из старой СУБД в новую
  • перенести статические файлы сайта на новый сервер
  • отредактировать файл wp-config.php для корректного подключения WordPress к новой СУБД

Копирование сервера и настройка балансировщика

Отключите сервер и сделайте снапшот.

Используя снапшот, создайте копию сервера без внешнего IP-адреса. В нашем примере копия будет называться wp-node-2.

После создания копии сервера снапшот можно удалить.

Для обеспечения отказоустойчивости сайта нужно использовать балансировщик нагрузки, на который будет указывать домен. Перенесите внешний IP-адрес сервера wp-node-1 на балансировщик, выполнив следующие действия:

  • отключите внешний IP от сервера wp-node-1
  • создайте балансировщик в Личном кабинете, используя ранее отключенный IP-адрес
  • в качестве бэкенд-серверов укажите wp-node-1 и wp-node-2 с портами 80:80 и 443:443
  • запустите серверы wp-node-1 и wp-node-2

После запуска серверов сайт example.ru будет доступен, пока работает хотя бы один сервер. Балансировщик нагрузки будет работать, используя локальные IP-адреса этих серверов. При этом сертификат SSL уже размещен на серверах.

Обновление отказоустойчивого сайта

Приведённая выше схема работы сайта требует от администратора сайта более внимательного подхода к процессам установки обновлений и любым иным действиям связанным с изменением кода сайта.

Для установки обновлений необходимо придерживаться следующей схемы действий:

  • отключить от балансировщика все серверы, кроме одного
  • выполнить процесс обновления для не отключенного сервера
  • сделать снапшот обновлённого сервера
  • создавать новые серверы в необходимом количестве, используя снапшот
  • подключить заново созданные серверы к балансировщику нагрузки

Существуют и другие способы решения этой задачи. Например, можно копировать каталог /var/www/example.ru с обновлённого сервера на не обновлённые для синхронизации содержимого.

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