Найти тему

Drupal 9 — установка на Nginx в Ubuntu 22

Оглавление

Сегодня мы с вами установим Drupal 9 на веб-сервер Nginx на сервере с операционной системой Ubuntu Server 22.04. Drupal 10 устанавливается аналогично, но сегодня мне нужна именно девятая версия. Погнали.

Drupal — система управления контентом (CMS) с открытым исходным кодом под лицензией GPL. Написана на PHP. На Drupal работает больше миллиона сайтов: персональные блоги, корпоративные порталы, политические и правительственные сайты.

Подготовка к установке

Если у вас вообще ничего нет, если вы собираетесь поставить всё с нуля, то нужно начать с установки операционной системы. Поставим Ubuntu Server 22.04.

Установка Ubuntu Server 22.04 LTS на виртуальную машину VMware ESXi 6.7

Итак, операционная система установлена.

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

  • e-mail для drupal

Нужно делегировать домен и направить трафик на соответствующие NS сервера. Я для примера сделаю сайт:

  • drupal.internet-lab.ru

Дополнительно понадобится почтовый сервер, должен же Drupal как-то слать письма. Будем считать, что вы с этим моментом сами справитесь. Отправку писем можно и потом прикрутить.

MariaDB

Дальше нам нужна база данных. MariaDB подойдёт.

Установим MariaDB 10. Процесс установки вынес в отдельную статью:

Установка MariaDB 10 на Ubuntu 22.04

Создадим директорию /opt/mysql и перенесём туда каталог данных MySQL:

Перемещение базы данных MariaDB 10 в Ubuntu 22.04

Нужно создать базу данных (схему), создать пользователя для этой базы, дать ему полные права на базу.

mysql -u root

CREATE DATABASE drupal;
GRANT ALL ON drupal.* TO 'drupal'@'localhost' IDENTIFIED BY 'ExamplePasswordX4k1';
FLUSH PRIVILEGES;
\q
-2

Записать на бумажку или в файл:

  • Имя БД
  • Имя пользователя от БД
  • Пароль пользователя от БД
  • Адрес БД
  • Порт БД

У меня веб-сервер и БД на одном сервере, порт стандартный, поэтому адрес БД у меня localhost, порт стандартный 3306.

Nginx и PHP

Теперь поднимем web-сервер Nginx.

apt install nginx

Drupal у нас будет работать на PHP 8.1. Устанавливаем дополнительные пакеты:

apt install php8.1-fpm php-mysql php-xml php-gd php-curl php-mbstring
-3

В дальнейшем для управления сайтом нам пригодится composer, поставим (необязательно сейчас).

cd /tmp
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer -V
-4

Установка Drupal

Мне нужно установить определённую версию, буду ставить Drupal 9.5.11.

cd /var/www/html/
wget https://ftp.drupal.org/files/projects/drupal-9.5.11.tar.gz
tar -xvzf drupal-9.5.11.tar.gz
mv drupal-9*/ drupal/
chown -R www-data:www-data /var/www/html/drupal
rm drupal-9.5.11.tar.gz
-5

Конфигурация Nginx для Drupal 9

Создадим конфигурационный файл для Drupal.

vim /etc/nginx/sites-available/drupal

Конфигурацию честно содрал с сайта Nginx.

server {
listen 80;
server_name drupal.internet-lab.ru;
root /var/www/html/drupal;

client_max_body_size 100M;
autoindex off;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location ~ \..*/.*\.php$ {
return 403;
}

location ~ ^/sites/.*/private/ {
return 403;
}

# Block access to scripts in site files directory location ~ ^/sites/[^/]+/files/.*\.php$ {
deny all;
}

# Allow "Well-Known URIs" as per RFC 5785 location ~* ^/.well-known/ {
allow all;
}

# Block access to "hidden" files and directories whose names begin with a # period. This includes directories used by version control systems such # as Subversion or Git to store control files. location ~ (^|/)\. {
return 403;
}

location / {
try_files $uri /index.php?$query_string;
}

location @rewrite {
rewrite ^ /index.php;
}

# Don't allow direct access to PHP files in the vendor directory. location ~ /vendor/.*\.php$ {
deny all;
return 404;
}

# Protect files and directories from prying eyes. location ~* \.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$ { deny all;
return 404;
}

# In Drupal, we must also match new paths where the '.php' appears in # the middle, such as update.php/selection. The rule we use is strict, # and only allows this pattern with the update.php front controller. # This allows legacy path aliases in the form of # blog/index.php/legacy-path to continue to route to Drupal nodes. If # you do not have any paths like that, then you might prefer to use a # laxer rule, such as: # location ~ \.php(/|$) { # The laxer rule will continue to work if Drupal uses this new URL # pattern with front controllers other than update.php in a future # release. location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
# Ensure the php file exists. Mitigates CVE-2019-11043 try_files $fastcgi_script_name =404;
# Security note: If you're running a version of PHP older than the # latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini. # See http://serverfault.com/q/627903/94922 for details. include fastcgi_params;
# Block httpoxy attacks. See https://httpoxy.org/. fastcgi_param HTTP_PROXY "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
try_files $uri @rewrite;
expires max;
log_not_found off;
}

# Fighting with Styles? This little gem is amazing. location ~ ^/sites/.*/files/styles/ {
try_files $uri @rewrite;
}

# Handle private files through Drupal. Private file's path can come # with a language prefix. location ~ ^(/[a-z\-]+)?/system/files/ {
try_files $uri /index.php?$query_string;
}

# Enforce clean URLs # Removes index.php from urls like www.example.com/index.php/my-page --> www.example.com/my-page # Could be done with 301 for permanent or other redirect codes. if ($request_uri ~* "^(.*/)index\.php/(.*)") {
return 307 $1$2;
}
}
-6

Пока делаем на 80 порту, потом будем сертификат прикручивать. Включаем конфигурацию.

ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/

Настраиваем SSL сертификат

Установим и настроим certbot для получения и обновления SSL сертификатов Let's Encrypt.

Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года, предоставляющий бесплатные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован. https://letsencrypt.org/

Let's Encrypt — настройка certbot в Ubuntu 22

Certbot установили, запускаем:

certbot run --nginx

Указываем e-mail администратора сертификатов Let's Encrypt. Принимаем лицензионное соглашение и отвечаем на вопросы.

Скрипт выводит список доменов, которые он нашёл в Nginx. Указываем номер домена, для которого требуется сертификат. В данном случае пишем "1". Enter.

-7

И ничего не работает. Всё просто, домен, который я создал, ещё не разошёлся по DNS серверам в Интернет.

-8
Но тут наступило утро, и Шахерезада прекратила дозволенные речи.

Делаю паузу до следующего утра.

-9

Домен доступен.

certbot run --nginx

Скрипт выводит список доменов, которые он нашёл в Nginx. Указываем номер домена, для которого требуется сертификат. В данном случае пишем "1". Enter.

-10

На этот раз скрипт отработал, сгенерировал сертификаты (сроком на 3 месяца) и изменил конфигурационный файл сайта в nginx.

Пробуем зайти на сайт.

-11

Продолжение установки Drupal

Мы находимся в разделе "Choose language". Нужно выбрать язык. Выбираю русский.

-12

Мы в разделе "Выбор профиля". Есть три варианта установки:

  • Стандарт
  • Минимальный
  • Демо

Я выбираю Демо. "Сохранить и продолжить".

-13

Попадаем в раздел "Установка базы данных". Вот здесь нам и понадобится название базы и юзер с паролем, вводим эти данные.

-14

В дополнительных настройках можно указать сервер и порт базы данных. "Сохранить и продолжить".

-15

Попадаем в раздел "Установка сайта". Начинается установка сайта.

-16

Загружаются переводы.

-17

Попадаем в раздел "Настройка сайта".

-18

Указываем:

  • Название сайта
  • E-mail адрес сайта
  • Логин админа
  • Пароль админа
  • E-mail адрес админа
  • Страну
  • Часовой пояс
  • И галки:
    Проверять обновления автоматически
    Получать уведомления по электронной почте
-19

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

-20

Попадаем в раздел "Завершение переводов". Ждём.

-21

Открывается главная страница сайта.

-22

Drupal успешно установлен, поздравляем!

Источник:

Drupal 9 — установка на Nginx в Ubuntu 22 | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.