Гид по технологиям

Установка Drupal с Nginx и Let's Encrypt на Ubuntu 20.04

• 5 min read • DevOps • Обновлено 24 Nov 2025
Установка Drupal с Nginx и Let's Encrypt на Ubuntu 20.04
Установка 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

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

Выбор профиля установки Drupal

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

Конфигурация базы данных

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

Конфигурация сайта Drupal

Региональные настройки

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

Установка 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, если это поддерживается вашей системой.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро