Установка Drupal

Исходные данные:
OS
cat /etc/os-release
NAME=”openSUSE Leap”
VERSION=”15.2″
ID=”opensuse-leap”
ID_LIKE=”suse opensuse”
VERSION_ID=”15.2″
PRETTY_NAME=”openSUSE Leap 15.2″
ANSI_COLOR=”0;32″
CPE_NAME=”cpe:/o:opensuse:leap:15.2″
BUG_REPORT_URL=”https://bugs.opensuse.org”
HOME_URL=”https://www.opensuse.org/”

Web-сервер
apache2ctl -v
Server version: Apache/2.4.43 (Linux/SUSE)
Server built: 2021-01-27 09:11:10.000000000 +0000

Важно!
В глобальных настройках необхдимо указать FQDNS бозового сервера. В противном случае по умолчанию сервер будет использовать имя localhost. Как следствие возможны сбои в работе сайтов.

Примечание:
Установка Drupal возможно на других типах Web-серверов. Список поддерживаемых на сайте вендора.
В данном случае в качестве примера изпользован именно Apache/2.4.43 потому что он уже был установлен.

Модули Web-сервера
apache2ctl -M
[Mon Jun 07 17:45:25.123322 2021] [so:warn] [pid 12906] AH01574: module setenvif_module is already loaded, skipping
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_prefork_module (static)
unixd_module (static)
systemd_module (static)
actions_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_core_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
dir_module (shared)
env_module (shared)
expires_module (shared)
include_module (shared)
log_config_module (shared)
mime_module (shared)
negotiation_module (shared)
setenvif_module (shared)
ssl_module (shared)
socache_shmcb_module (shared)
userdir_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
access_compat_module (shared)
php7_module (shared)

Примечание:
Не все подключенные модули используются для Drupal. Часть модулей используется в других целях.

Сервер DB
mysql -p -v
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 279
Server version: 10.5.10-MariaDB MariaDB Server

ВАЖНО!
Сервера DB версией ниже 10.5.10 содержат баги. Поэтому пришлось вручную добавлять репозиторий, удалять более старую версию полностью и устанавливать сервер баз данных MariaDB из добавленного репозитория.

Вычисляем прямую ссылку загрузки Drupal.
В браузере переходим по URL
https://www.drupal.org/download
Нажимаем
Download Drupal zip
Дожидаемся начала загрузки.
Отменяем загрузку.
Переходим в раздел браузера “Загрузки”.
Копируем прямую ссылку загрузки файла архива Drupal.

Подключаемся к узлу, на котором будет установлен Drupal посредством протокола SSH
ssh root@172.21.25.2

Создаём папку для загрузки и копирования файлов, необходимых в процессе проведения работ.

mkdir /1

Примечание:
Для удобства и скорости имя папки 1 и она в корне сервера.

Устанавливаем необходимые пакеты.
zypper install nano mc wget

Примечание:
По умолчанию данные пакеты не установленны. особой нужды в них нет, но они облегчают взаимодействие.

Переходим в созданную ранее папку /1
cd /1

Скачиваем архив Drupal

wget https://ftp.drupal.org/files/projects/drupal-9.1.10.zip

Копируем архив Drupal из папки /1 в папку /srw/www/
cp drupal-9.1.10.zip /srv/www/

Примечание:
папки и файлы сайтов Web-сервера находятся в папке
/srv/www/

Переходим в эту папку

cd /srv/www/

Производим распаковку архивногоо файла

unzip drupal-9.1.10.zip

Примечание:
Архив рапаковывается в папку drupal-9.1.10 содаваемую автоматически при распаковке архива

Переименовываем папку полученую в следствии рапаковки архивного файла

mv drupal-9.1.10/ drupal

Удаляем уже не нужный архивный файл drupal-9.1.10.zip

rm drupal-9.1.10.zip

определяем нового владельца папки и файлов. В качестве владельца указываем web-сервис
chown -R wwwrun:www /srv/www/drupal/

Примечание:
Ключ -R необходим. Этот ключ указывает на то, что необходимо сменить владельца всех папок и файлов нутри папки /srv/www/drupal/

Необходимые дополнительные действия:

1) Так как тестовый сайт будет развёрнут на том же сервере, что и другой сайт, у которого есть A-запись, делаем соответствующую CNAME-запись, указывающую на A-запись.
2) Для того, чтобы сам сервер, где будет установлен сайт под именем drupal.corsobi.com правильно определял (резолвил) имя необходимо сделать соответствующую запись в файле etc/hosts
ВАЖНО!!!
Запись должна указывать на приватный адрес сервера. Приватный адрес у каждого сервера свой.
3) Необходимо изменить значение
AllowOverride None
на
AllowOverride All
в файле /etc/apache2/httpd.conf
Для этого редактируем файл
nano /etc/apache2/httpd.conf
находим параметр AllowOverride
Меняем значение None на All
Примечание:
Если не изменить данное значение в установленном сайте на базе Drupal будет работать исключительно корневая страница сайта. На все остальные страницы будет 404 ошибка.
4) Создаём конфигурационные файлы виртуального web-сервера для хоста drupal.corsobi.com

Переходим в папку где лежат конфигурационные файла виртуальных серверов.
cd /etc/apache2/vhosts.d/

Копируем файл существующего сервера в файл нового сервера конфигурации.
Пример:
cp cmdb.corsobi.com.conf drupal.corsobi.com.conf

Изменяем конфигурационный файл под новый web-сервер.
nano drupal.corsobi.com.conf  

Пример содержимого файла
<VirtualHost *>
DocumentRoot /srv/www/drupal
ServerName drupal.corsobi.com
<Directory “/srv/www/drupal”>
Options +FollowSymlinks
allow from all
Options None
Require all granted
</Directory>
</VirtualHost>

5) Для настройки работы виртуального Web-сервера посрдством SSL (HTTPS), необходимо выполнить следующие действия:
В операционной системе установить программное обеспечение cerbot
zypper install certbot-systemd-timer python3-certbot

Копируем файл существующего сервера в файл нового сервера конфигурации.
Пример:
cp cmdb.corsobi.com-ssl.conf drupal.corsobi.com-ssl.conf

Изменяем конфигурационный файл под новый web-сервер.
nano drupal.corsobi.com-ssl.conf 

<IfDefine SSL>
<IfDefine !NOSSL>
## SSL Virtual Host Context
<VirtualHost drupal.corsobi.com:443>
# General setup for the virtual host
DocumentRoot “/srv/www/drupal”
ServerName drupal.corsobi.com:443
ServerAdmin drupal@corsobi.com
<IfModule deflate_module>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
Options None
ErrorLog /var/log/apache2/error_log
TransferLog /var/log/apache2/access_log
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# OCSP Stapling:
# Enable/Disable OCSP for this virtual host.
SSLUseStapling on
SSLProtocol all -SSLv2
SSLUseStapling on
# You can use per vhost certificates if SNI is supported.
SSLCertificateFile /etc/letsencrypt/live/drupal.corsobi.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/drupal.corsobi.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/drupal.corsobi.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/drupal.corsobi.com/chain.pem
# Per-Server Logging:
# The home of a custom SSL log file. Use this when you want a
# compact non-error SSL logfile on a virtual host basis.
CustomLog /var/log/apache2/ssl_request_log ssl_combined
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA>
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache “shmcb:logs/ssl_stapling(32768)”
</IfDefine>
</IfDefine>
<VirtualHost *:443>
DocumentRoot /srv/www/drupal
ServerName drupal.corsobi.com
<Directory “/srv/www/drupal”>
allow from all
Options +FollowSymlinks
Options None
Require all granted
</Directory>
SSLCertificateFile /etc/letsencrypt/live/drupal.corsobi.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/drupal.corsobi.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/drupal.corsobi.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/drupal.corsobi.com/chain.pem
</VirtualHost>


6) Получаем бесплатный валидный SSL сертификат для сайта
Для этого пишем исполняемый скрипт.
Даём имя файлк скрипта, чтобы было понятно.
В качестве примера используем имя cert_drupal.sh
Примечание:
Лучше хранить все подобные файлы скриптов не в папках сайтов, а на уровень выше, в папке /srw/www

nano /srv/www/cert_drupal.sh

Содержимое файла:

#!/bin/bash
certbot certonly –webroot -w /srv/www/drupal/ -d drupalnano /srv/www/cert_drupal.sh .corsobi.com
systemctl restart apache2.service

Примечание: Необходимо данному файлу дать права на выполнение

chmod ugo+x nano /srv/www/cert_drupal.sh

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

./srv/www/cert_drupal.sh

В ходе выполнения скрипта необходимо ответить на вопросы.
После окончания выполнения скрипта должна появиться папка с файлами по пути

/etc/letsencrypt/live/drupal.corsobi.com/

Примечание:
Так как данный сертификат бесплатный срок действия данного сертификата составляет три месяца. По истечению срока необходимо продлить данный сертификат. Для этого достаточно настроить crontab, чтобы раз в три месяца он запускал скрипт ./srv/www/cert_drupal.sh

ВАЖНО!
Для того, чтобы Web-сервер работал по протоколу https необходио чтобы в файле /etc/apache2/listen.conf было содержимое

Listen *:80
Listen *:443

            Listen 443

    </IfModule>
    </IfDefine>

7) ВАЖНО!
Необходимо включить rewrite mode для web-сервера
sudo a2enmod rewrite
Рестартуем web-сервис, для того, чтобы подхватился новый сервер.
systemctl restart apache2
8) Необходимо создать пользователя MariaDB
Желательно, чтобы данный пользователь был отдельный от других пользователей MariaDB
В последних версиях MariaDB создание пользователя и определение прав пользовательской учётной записи возможно исключительно из командной строки.
В кчестве примера будем использовать пользователя drupal с паролем GtjV7sK.Sd
Переходим в оснастку MariaDB
mysql -p
CREATE USER ‘drupal’@’localhost’ IDENTIFIED BY ‘GtjV7sK.Sd’;
GRANT ALL PRIVILEGES ON . TO ‘drupal’@’localhost’;
SHOW GRANTS FOR ‘drupal’@’localhost’;
flush privileges;
quit

Примечание:
Подключение и работа пользователя drupal возможна исключительно локально (параметр localhost)

Начинаем устанавливать Drupal
Примечние:
Для этого редактируем файл hosts на локальной машине, откуда будет производиться установка Drupal, чтобы не ждать пока все dns серверы обновят записи dns зоны.
Потом эту запись можно будет либо закомментировать, либо удалить.

В браузере переходим по URL нового сайта на Drupal.
Проходим по шагам весь wizard.
Примечание:
Именно в такой конфигурации в качестве узла сервера баз данных MariaDB необходимо указывать значение не localhost, а в явном виде ip address lookback интерфейса 127.0.0.1

По окончанию работы wizard можно будет войти в панель администратора созданного сайта и начать редактировать сайт.