Создание шаблона VPS с Drupal 9 на Centos 8

Мы продолжаем расширять наш маркетплейс. Недавно мы рассказывали, как сделали образ Gitlab, а на этой неделе в нашем маркетплейсе появился Drupal.

Рассказываем, почему выбрали именно его и как создавался образ.

cnkux4phcqfkkt8psbnxmc5bavk.png

Drupal — удобная и мощная платформа для создания любых типов сайтов: от микросайтов и блогов до крупных социальных проектов, используемая также как основа для веб-приложений, написанная на языке PHP и использующая в качестве хранилища данных реляционные базы данных.

Drupal 9 включает в себя все особенности реализованные в версии 8.9.
Ключевое отличие версии 9 от версии 8 состоит в том, что для платформы будут выпускаться обновления и исправления безопасности и после ноября 2021 года.
Так же в версии 9 упростили процесс обновления, делая процесс обновления с версии 8 еще проще.

Требования к серверу


Для использования Drupal рекомендуется использовать 2 Гб RAM и 2 ядра CPU.

Основные файлы Drupal занимают около 100 Мб, дополнительно вам понадобится место для хранения картинок, базы данных, тем, дополнительных модулей и резервных копий, которое будет зависить от размера вашего сайта.

Для Drupal 9 требуется PHP 7.4 или выше с минимальным ограничением (memory_limit) на память 64 Мб, в случае использования дополнительных модулей рекомендуется установить 128 Мб.

В качестве веб-сервера Drupal может использовать Apache или Nginx, а в качестве базы данных MySQL, PostgreSQL или SQLite.

Мы будем устанавливать Drupal с использованием Nginx и MySQL.

Установка


Обновленим установленные пакеты до последней версии:

sudo dnf update -y


Добавим постоянное разрешение для входящего трафика на http/80 и https/443 порты:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https


Применим новые правила файрвола:

sudo systemctl reload firewalld


Установим Nginx:

sudo dnf install nginx -y


Запустим и включим сервер Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx


Так как на данный момент в основном репозитории Centos используется версия PHP 7.2, добавим репозиторий REMI с PHP 7.4 (минимальная версия для Drupal 9).
Для этого добавим репозиторий EPEL (требуется репозиторием REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm


Добавим репозиторий REMI:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm


Включим модуль php: remi-7.4 для установки php 7.4:

sudo dnf module enable php:remi-7.4 -y


Установим php-fpm и php-cli:

sudo dnf install -y php-fpm php-cli


Установим PHP модули требуемые для работы Drupal:

sudo dnf install -y php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml


Так же установим рекомендуемые модули PHP mbstring opcache:

sudo dnf install -y php-mbstring php-opcache


Установим сервер MySQL:

sudo dnf install mysql-server -y


Включим и запустим сервер MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld


Так как мы делаем шаблон для VDS, а они могут быть медленными, добавим задержку старта mysqld 30 секунд, иначе могут быть проблемы со стартом сервера при первоначальной загрузке системы:

sudo sed -i '/Group=mysql/a \
ExecStartPre=/bin/sleep 30
' /usr/lib/systemd/system/mysqld.service


Изменим группу и пользователя из под которого будет работать nginx внеся изменения в /etc/php-fpm.d/www.conf:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf


Изменим владельца каталога сессий PHP так же соответственно на nginx:

sudo chown -R nginx. /var/lib/php/session


Удалим строки с коментариями из файла конфигурации /etc/nginx/nginx.conf (что бы не было двойных срабатываний для sed):

sudo sed -i -e '/^[ \t]*#/d'  /etc/nginx/nginx.conf


Добавим в /etc/nginx/nginx.conf настройки компрессии gzip

sudo sed -i '/types_hash_max_size 2048;/a \
\
    gzip on;\
    gzip_static on;\
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;\
    gzip_comp_level 9;\
    gzip_proxied any;\
    gzip_min_length 1000;\
    gzip_disable "msie6";\
    gzip_vary on; \
' /etc/nginx/nginx.conf


Добавим в /etc/nginx/nginx.conf настройки индексного файла index.php:

sudo sed -i '/        root         \/usr\/share\/nginx\/html;/a \
        index index.php index.html index.htm;\
' /etc/nginx/nginx.conf


Добавим настройки для дефолтного сервера обработку php через сокет php-fpm, отключим лог для статических файлов, увеличим время expire, отключим лог доступа и ошибок для favicon.ico и robots.txt и запретим доступ к файлам .ht для всех:

sudo sed -i '/        location \/ {/a \
		try_files $uri $uri/ /index.php?q=$uri&$args;\
        }\
    \
        location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {\
        access_log off;\
        expires max;\
        }\
    \
        location ~ \.php$ {\
        try_files  $uri =404;\
        fastcgi_pass   unix:/run/php-fpm/www.sock;\
        fastcgi_index index.php;\
        include fastcgi_params;\
        fastcgi_intercept_errors on;\
        fastcgi_ignore_client_abort off;\
        fastcgi_connect_timeout 60;\
        fastcgi_send_timeout 180;\
        fastcgi_read_timeout 180;\
        fastcgi_buffer_size 128k;\
        fastcgi_buffers 4 256k;\
        fastcgi_busy_buffers_size 256k;\
        fastcgi_temp_file_write_size 256k;\
        }\
    \
        location = /favicon.ico {\
        log_not_found off;\
        access_log off;\
        }\
    \
        location = /robots.txt {\
        allow all;\
        log_not_found off;\
        access_log off;\
        }\
    \
        location ~ /\.ht {\
        deny all;' /etc/nginx/nginx.conf


Установим wget требуемый для установки certbot:

sudo dnf install wget -y


Скачаем исполняемый файл certbot с оффсайта:

cd ~
wget https://dl.eff.org/certbot-auto


Переместим certbot в /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto


И назначим права и владельцем root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto


Установим зависимости certbot и на данном этапе прервем его работу (Ответы: Y, c):

certbot-auto


Скачаем с оффсайта архив с последней версией Drupal 9:

cd ~
wget https://www.drupal.org/download-latest/tar.gz


Установим tar для распаковки архива:

sudo dnf install tar -y


Удалим файлы по умолчанию в каталоге /usr/share/nginx/html/:

rm -rf /usr/share/nginx/html/*


Распакуем файлы в каталог веб-сервера:

tar xf tar.gz -C /usr/share/nginx/html/


Перенесем файлы из подкаталога в корневой каталог веб-сервера:

mv /usr/share/nginx/html/drupal-9.0.7/* /usr/share/nginx/html/


Удалим подкаталог:

rm -rf /usr/share/nginx/html/drupal-9.0.7


Удалим архив с установочными файлами:

rm -f ./tar.gz


Назначим владельцем файлов nginx:

chown -R nginx. /usr/share/nginx/html


На данном этапе мы выключим сервер и сделаем снапшот:

shutdown -h now


После запуска VDS из снапшота выполним первоначальную настройку MySQL сервера запустив скрипт:

mysql_secure_installation


Включим валидатор паролей:

Would you like to setup VALIDATE PASSWORD component?: y


Зададим пароль пользователя root MySQL:

New password:
Re-enter new password:


Удалим анонимных пользователей:

Remove anonymous users? (Press y|Y for Yes, any other key for No): y


Запретим подключаться root удаленно:

Disallow root login remotely? (Press y|Y for Yes, any other key for No): y


Удалим тестовую базу данных:

Remove test database and access to it? (Press y|Y for Yes, any other key for No): y


Перезагрузим таблицы привилегий:

Reload privilege tables now? (Press y|Y for Yes, any other key for No): y


После этого, для завершения установки, мы можем перейти по адресу vps_ip_address
По этому адресу мы увидим страницу с установкой Drupal.

Выберем используемый язык. Например: русский. Нажмем

«Сохранить и продолжить».

Выберем установочный профиль (демо используется исключительно для ознакомления с системой). В нашем случае пусть это будет «стандарт».

На следующей странице зададим имя базе данных, например «drupal».
Укажем имя пользователя БД root и пароль заданный ему, при запуске mysql_secure_installation.
Нажмем «Сохранить и продолжить».

Дождемся завершения установки и обновления переводов (процесс может занять несколько минут).

Укажем название сайта, зададим email сайта (от имени которого будут приходить уведомления сайта), логин, пароль и email учетной записи администратора Drupal.
Так же зададим страну и часовой пояс в региональных настройках.
И завершим установку нажав «Сохранить и продолжить».

После этого можно перейти в панель управления с созданным логином и паролем администратора Drupal.

НАСТРОЙКА HTTPS (ОПЦИОНАЛЬНО)

Для настройки HTTPS у VDS должно быть действующее DNS имя, укажите в /etc/nginx/nginx.conf
в разделе server имя сервера (например):
server_name domainname.ru;
Перезапустим nginx:

service nginx restart


Запустим certbot:

sudo /usr/local/bin/certbot-auto --nginx

Введем свой e-mail, cогласимся с условиями сервиса (A), Подписка на рассылку (опционально) (N), выберем доменные имена для которых нужно издать сертификат (Enter для всех).

В случае, если все прошло без ошибок, мы увидим сообщение об успешной выдаче сертификатов и настройке сервера:

Congratulations! You have successfully enabled …


После этого подключения на 80 порт будут перенаправляться на 443 (https).

Добавим в /etc/crontab для автоматического обновления сертификатов:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook «nginx -s reload»

НАСТРОЙКА TRUSTED HOST SECURITY (РЕКОМЕНДУЕТСЯ)


Данная настройка предназначена как решение проблемы связанной с динамическим определением base_url, и призвана предотвратить атаки HTTP HOST Header (когда ваш сайт думает, что он кто-то другой).
Для этого нужно указать доверенные доменные имена сайта в файле настроек.

В файле /usr/share/nginx/html/sites/default/settings.php расскоментируем или добавим настройку с паттернами актуальных имен сайта, например:

$settings['trusted_host_patterns'] = [
'^www\.mydomain\.ru$',
];

Установка PHP APCu (РЕКОМЕНДУЕТСЯ)


Drupal поддерживает APCu — Alternative PHP User Cache, версии 8 и 9 интенсивнее используют APCu как краткосрочный локальный кеш, чем предыдущие версии. Размер кеша по умолчанию (32 Мб) подойдет большинству сайтов, и не может превышать 512 Мб.

Для активации установим модуль PHP APCu:

dnf -y install php-pecl-apcu


Перезапустим nginx и php-fpm:

service nginx restart
service php-fpm restart


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

Хотим напомнить, что вы тоже можете сделать для нас образ


Есть три варианта, как поучаствовать.

Подготовьте образ сами и получите 3000 рублей на баланс


Если вы готовы сразу ринуться в бой и самому создать образ, которого вам не хватает, мы зачислим вам 3000 рублей на внутренний баланс — вы сможете потратить на серверы.

Как создать свой образ:

  1. Создайте аккаунт у нас на сайте
  2. Сообщите в поддержку, что вы собираетесь создавать и тестировать образы
  3. Мы зачислим вам 3000 рублей и включим возможность создавать снапшоты
  4. Закажите виртуальный сервер с чистой операционной системой
  5. Установите на эту VPS программное обеспечение и настройте его
  6. Составьте инструкцию или скрипт для развертывания ПО
  7. Создайте снапшот для настроенного сервера
  8. Закажите новый виртуальный сервер, выбрав в выпадающем списке «Шаблон сервера» созданный ранее снапшот
  9. В случае успешного создания сервера, передайте материалы полученные на этапе 6 технической поддержке
  10. В случае ошибки вы можете уточнить у поддержки причину и повторить настройку


Для владельцев бизнеса: предложите свой софт


Если вы — разработчик софта, который разворачивают и используют на VPS, то мы можем включить вас в маркетплейс. Так мы можем помочь вам привести новых клиентов, трафик и узнаваемость. Пишите нам

Расскажите в комментариях, какого образа вам не хватает?


И мы подготовим его сами

oug5kh6sjydt9llengsiebnp40w.png

3piw1j3wd_cgmzq9sefgferaumu.png

© Habrahabr.ru