Установка Drupal с Nginx и Let's Encrypt на Ubuntu 20.04
Кому полезно
- Системным администраторам и разработчикам, которым нужно быстро развернуть сайт на Drupal.
- Владельцам сайтов, которые хотят HTTPS с автоматическим обновлением сертификата.
Требования и примечания
- Сервер с Ubuntu 20.04, доступ по root или пользователь с sudo.
- Домен, указывающий на IP сервера (A/AAAA запись).
- Установлен и настроен пароль root для MariaDB или доступ к пользователю с правами на создание БД.
- Примечание: в примерах сохранены команды из оригинала; перед запуском замените шаблонные пароли и имена на безопасные значения.
Предварительная проверка
- Убедитесь, что порты 80 и 443 открыты в сетевом экране и/или в облачной панели.
- Проверьте, что DNS указывает на ваш сервер и обновлён.
Установка LEMP (Nginx, MariaDB, PHP)
Установите Nginx, MariaDB и необходимые PHP-пакеты (в примере — PHP 7.4):
apt-get install nginx mariadb-server php7.4 php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip -yПосле установки откройте конфигурацию PHP-FPM:
nano /etc/php/7.4/fpm/php.iniИзмените или проверьте следующие параметры (оставлены примеры из оригинала):
short_open_tag = On
cgi.fix_pathinfo=0
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 300
date.timezone = America/ChicagoВажно: замените date.timezone на ваш часовой пояс (например, Europe/Moscow) для корректного отображения времени в логах и интерфейсе Drupal.
Сохраните файл и перезапустите PHP-FPM:
systemctl restart php7.4-fpmНастройка MariaDB (база данных для Drupal)
Защитите установку MariaDB и задайте root-пароль:
mysql_secure_installationДалее войдите в shell MariaDB и создайте базу и пользователя для Drupal. Замените ‘password’ на сильно сгенерированный пароль.
mysql -u root -p
MariaDB [(none)]> CREATE DATABASE drupaldb;
MariaDB [(none)]> CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL ON drupaldb.* TO 'drupal'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;Совет: используйте отдельного пользователя БД с минимально необходимыми привилегиями и храните пароль в защищённом менеджере паролей.
Скачивание Drupal
В примере используется версия 8.8.5, указанная в исходной статье. Рекомендую проверить на https://www.drupal.org последнюю стабильную версию и заменить ссылку при необходимости.
cd /var/www/html/
wget https://ftp.drupal.org/files/projects/drupal-8.8.5.tar.gzРаспакуйте и настройте права:
tar -xvzf drupal-8.8.5.tar.gz
mv drupal-8.8.5 drupal
chown -R www-data:www-data drupal
chmod -R 755 drupalВажно: каталоги sites/default/files и любые загружаемые пользователями файлы должны быть доступны для записи веб-серверу, но не должны иметь избыточных прав.
Настройка виртуального хоста Nginx для Drupal
Создайте файл конфигурации:
nano /etc/nginx/sites-available/drupalВставьте конфигурацию (содержимое сохранено из исходного руководства):
server {
listen 80;
listen [::]:80;
root /var/www/html/drupal;
index index.php index.html index.htm;
server_name drupal.linuxbuz.com;
client_max_body_size 100M;
autoindex off;
location ~ \\..*/.*\\.php$ {
return 403;
}
location ~ ^/sites/.*/private/ {
return 403;
}
# Block access to scripts in site files directory
location ~ ^/sites/[^/]+/files/.*\\.php$ {
deny all;
}
location ~ (^|/)\\. {
return 403;
}
location / {
try_files $uri /index.php?$query_string;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
# Don't allow direct access to PHP files in the vendor directory.
location ~ /vendor/.*\\.php$ {
deny all;
return 404;
}
location ~ '\\.php$|^/update.php' {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
try_files $uri @rewrite;
}
location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
try_files $uri /index.php?$query_string;
}
}Активируйте сайт и добавьте параметр server_names_hash_bucket_size, если требуется:
ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/
nano /etc/nginx/nginx.confДобавьте строку внутри блока http { :
server_names_hash_bucket_size 64;Проверьте синтаксис и перезапустите Nginx:
nginx -t
systemctl restart nginxЕсли получаете ошибки, просмотрите логи: /var/log/nginx/error.log и status служб.
Защита сайта с помощью Let’s Encrypt (Certbot)
В исходном руководстве был использован специфичный PPA. Современная рекомендуемая практика — использовать snap-пакет certbot или официальные пакеты из репозиториев Ubuntu. В примере показана установка через apt и запуск certbot для автоматической настройки Nginx:
add-apt-repository ppa:ahasenack/certbot-tlssni01-1875471
apt-get update -y
apt-get install certbot python3-certbot-nginx -y
certbot --nginx -d drupal.linuxbuz.comВо время установки потребуется указать email и согласиться с условиями. Затем вам предложат вариант перенаправлять ли HTTP на HTTPS — для новых сайтов рекомендуем выбрать перенаправление.
Важно: проверяйте актуальные рекомендации Certbot (https://certbot.eff.org) — для некоторых систем предпочтителен snap-пакет certbot.
Настроить автоматическое обновление сертификатов:
certbot renew --dry-runНа современных установках certbot обычно добавляет systemd‑таймер/cron задачу. Проверьте:
systemctl list-timers | grep certbotЕсли таймера нет, добавьте cron-задание обновления:
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Доступ к мастеру установки Drupal в браузере
Откройте https://drupal.linuxbuz.com — вы увидите страницу выбора языка, профиль установки, конфигурацию базы данных и настройку сайта.

Выберите язык и продолжите.

Заполните данные подключение к базе, созданные ранее.

Задайте имя сайта, учётку администратора и региональные настройки.


После успешной установки попадёте в административную панель Drupal.

Проверки и критерии приёмки
- Сайт доступен по HTTPS и сертификат действителен (проверьте в браузере и через certbot renew –dry-run).
- Nginx отрабатывает без ошибок: nginx -t возвращает OK.
- PHP-FPM запущен и отвечает: systemctl status php7.4-fpm.
- Доступ к административной панели Drupal реализован и вы можете войти с учётной записью admin.
- Права на файлы корректны: web-контент принадлежит www-data, каталог files доступен для записи только тому пользователю.
Безопасность и рекомендации по эксплуатации
Важно соблюдать базовые правила безопасности:
- Используйте сильные пароли для БД и учётных записей.
- Регулярно обновляйте систему и компоненты (apt update && apt upgrade).
- Ограничьте доступ к серверу по SSH (ключи, отключить парольную аутентификацию, сменить порт при необходимости).
- Настройте брандмауэр UFW (пример для Nginx):
ufw allow 'Nginx Full'
ufw enable- Ограничьте доступ к файлам конфигурации: не храните пароли в открытом виде; используйте переменные окружения или секретные хранилища для CI/CD.
- Регулярно делайте резервные копии базы и файлов сайта.
Типичные проблемы и как их диагностировать
- Ошибка 502 Bad Gateway: проверьте статус PHP-FPM и путь сокета fastcgi (fastcgi_pass unix:/run/php/php7.4-fpm.sock).
- Проблемы с правами файлов: убедитесь, что www-data владеет файлом/директорией.
- Certbot не смог получить challenge: проверьте, что DNS указывает на сервер и порты 80/443 открыты.
- Долгое выполнение скриптов: проверьте max_execution_time и memory_limit в php.ini.
Полезные команды для диагностики:
systemctl status nginx
systemctl status php7.4-fpm
tail -n 100 /var/log/nginx/error.log
tail -n 100 /var/log/php7.4-fpm.log
mysql -u root -p -e "SHOW DATABASES;"Роли и краткие чеклисты
Системный администратор:
- Настроить сервер и брандмауэр.
- Установить LEMP и Certbot.
- Настроить автоматическое обновление сертификатов и бэкапов.
Разработчик:
- Установить и настроить тему/модули через Composer/Drush.
- Настроить CI для деплоя и миграции базы.
Владелец сайта:
- Подготовить контент и учётные записи.
- Проверять логи и уведомления о сроке действия сертификата.
Короткая шпаргалка команд (Cheat sheet)
- Проверка Nginx: nginx -t
- Перезапуск Nginx: systemctl restart nginx
- Перезапуск PHP-FPM: systemctl restart php7.4-fpm
- Проверка certbot: certbot renew –dry-run
- Просмотр логов: tail -f /var/log/nginx/error.log
Заключение
Вы установили Drupal на Ubuntu 20.04 с Nginx и защитили сайт сертификатом Let’s Encrypt. Дальше можно выполнить финальную настройку модулей, тему, включить кеширование и CDN при необходимости.
Важно: периодически проверяйте обновления PHP, Drupal и модулей, а также тестируйте резервные копии и процедуру восстановления.
Примечания:
- Если вы планируете развертывать современную версию Drupal (9/10), рассмотрите использование Composer для управления зависимостями и Drush для административных задач.
- Для автоматизации сертификатов лучше использовать официальный snap‑пакет Certbot, если это поддерживается вашей системой.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента