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

Установка Drupal 9 на Debian 10 (Buster) с LEMP и Let's Encrypt

• 7 min read • DevOps • Обновлено 24 Nov 2025
Drupal 9 на Debian 10 с LEMP и Let's Encrypt
Drupal 9 на Debian 10 с LEMP и Let's Encrypt

Требования

  • Сервер с Debian Buster 10 (тесты проводились на 2 ГБ ОЗУ, 50 ГБ свободного места, 2 CPU). Эти значения — минимальные рекомендации для небольшого тестового сайта.
  • root-права или пользователь с sudo для установки пакетов и изменения системных конфигураций.
  • Доменное имя, указывающее на IP сервера (для получения сертификата Let’s Encrypt).
  • Базовые навыки работы в терминале и понимание веб-серверов и баз данных.

Важно: если у вас другой релиз Debian или более новая версия PHP, используйте соответствующие пакеты и пути к сокету PHP-FPM.

Что мы сделаем

  • Установим Nginx
  • Установим и настроим PHP-FPM (в руководстве — PHP 7.3)
  • Установим и настроим MariaDB
  • Получим SSL через Let’s Encrypt (certbot)
  • Настроим виртуальный хост Nginx для Drupal 9
  • Скачиваем исходники Drupal и настраиваем права
  • Завершаем установку через веб-интерфейс

Шаг 1 — Установка Nginx

Обновите списки пакетов и обновите систему:

sudo apt update  
sudo apt upgrade

Установите Nginx:

sudo apt install nginx -y

Запустите и включите сервис при загрузке:

systemctl start nginx  
systemctl enable nginx

Проверка статуса:

systemctl status nginx

Сервис Nginx запущен и активен

Если Nginx запущен без ошибок, можно переходить к установке PHP.

Шаг 2 — Установка и настройка PHP-FPM

В этом руководстве используется PHP-FPM 7.3. Установите PHP и необходимые расширения:

sudo apt install php php-fpm php-gd php-common php-mysql php-apcu php-gmp php-curl php-intl php-mbstring php-xmlrpc php-gd php-xml php-cli php-zip -y

Отредактируйте php.ini для PHP-FPM (путь в примере — /etc/php/7.3/fpm/php.ini):

cd /etc/php/7.3/fpm/  
vim php.ini

Найдите и измените/раскомментируйте параметры:

date.timezone = Asia/Singapore  
memory_limit = 256M  
upload_max_filesize = 64M  
max_execution_time = 600  
cgi.fix_pathinfo = 0

Сохраните файл и перезапустите сервис, а также включите его при загрузке:

systemctl restart php7.3-fpm  
systemctl enable php7.3-fpm

PHP-FPM по умолчанию слушает unix-сокет:

PHP-FPM сокет и сервис

Проверьте сокеты и статус сервиса:

ss -plnt | grep php  
systemctl status php7.3-fpm

Проверка PHP-FPM и сокета

Совет: если используете более новую версию PHP, замените в конфигурации и путях php7.3 на актуальную версию (php7.4, php8.0 и т.д.).

Шаг 3 — Установка и настройка MariaDB

Установите MariaDB сервер и клиент:

sudo apt install mariadb-server mariadb-client

Запустите сервис и включите автозапуск:

systemctl start mysql  
systemctl enable mysql

Настройка пароля root для MySQL/MariaDB

Запустите скрипт безопасной настройки:

mysql_secure_installation

В ответах обычно рекомендуется выбрать «Y» для всех опций: установка пароля root, удаление анонимных пользователей, запрет удалённого входа root, удаление тестовой базы и перезагрузка таблиц привилегий.

Создайте базу данных и пользователя для Drupal:

mysql -u root -p

create database drupaldb;  
create user drupaluser@localhost identified by 'drupaluser@';  
grant all privileges on drupaldb.* to drupaluser@localhost identified by 'drupaluser@';  
flush privileges;  
exit

Создание базы данных для Drupal

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

Шаг 4 — Получение SSL от Let’s Encrypt (Certbot)

Убедитесь, что ваш домен указывает на IP сервера. Установите certbot:

sudo apt install certbot -y

Остановите Nginx на время генерации сертификата (используется standalone режим):

systemctl stop nginx

Запустите certbot для генерации сертификата (замените e-mail и -d на ваш домен):

certbot certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email [email protected] -d drupal.hakase-labs.io

После успешного выполнения сертификаты будут в каталоге /etc/letsencrypt/live/yourdomain.com

Совет: если вы хотите автоматизировать продление, добавьте задачу в cron или используйте systemd timer для certbot renew.

Шаг 5 — Настройка виртуального хоста Nginx для Drupal 9

Создайте файл виртуального хоста в /etc/nginx/sites-available/drupal9 и вставьте конфигурацию (замените домен и пути к сертификатам):

server {  
    server_name drupal.hakase-labs.io;  
    root /var/www/drupal9; ## <-- Your only path reference.  

    listen 80;  
    listen [::]:80;  
    listen 443 default ssl;  

    ssl_certificate      /etc/letsencrypt/live/drupal.hakase-labs.io/fullchain.pem;  
    ssl_certificate_key  /etc/letsencrypt/live/drupal.hakase-labs.io/privkey.pem;  

    # Redirect HTTP to HTTPS  
    if ($scheme = http) {  
        return 301 https://$server_name$request_uri;  
    }  

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

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

    # Very rarely should these ever be accessed outside of your lan  
    location ~* \.(txt|log)$ {  
        allow 192.168.0.0/16;  
        deny all;  
    }  

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

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

    # 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 @rewrite; # For Drupal <= 6  
        try_files $uri /index.php?$query_string; # For Drupal >= 7  
    }  

    location @rewrite {  
        rewrite ^/(.*)$ /index.php?q=$1;  
    }  

    # In Drupal 8, 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)(|/.*)$;  
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini  
        include fastcgi_params;  
        include snippets/fastcgi-php.conf;  
        fastcgi_param SCRIPT_FILENAME $request_filename;  
        fastcgi_intercept_errors on;  
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;  
    }  

    # Fighting with Styles? This little gem is amazing.  
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6  
    location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7  
        try_files $uri @rewrite;  
    }  

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

Активируйте виртуальный хост и проверьте конфигурацию Nginx:

ln -s /etc/nginx/sites-available/drupal9 /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

Если nginx -t возвращает ошибки — исправьте их прежде чем рестартовать сервис.

Настройка виртуального хоста Nginx для Drupal

Шаг 6 — Скачивание и подготовка исходников Drupal

Перейдите в /var/www и скачайте архив с последней версией Drupal 9:

cd /var/www/  
wget -q https://www.drupal.org/download-latest/tar.gz -O drupal-latest.tar.gz

Распакуйте и переименуйте папку в drupal9:

tar -xf drupal-latest.tar.gz  
mv drupal-9*/ drupal9/

Дайте права владельца каталогу веб-сервера (www-data):

chown -R www-data:www-data /var/www/drupal9

Скачивание исходников Drupal 9

Совет: если на сервере используется другой пользователь веба (например nginx), используйте его вместо www-data.

Шаг 7 — Завершение установки через веб-интерфейс

Откройте браузер и перейдите по адресу вашего сайта, например:

https://drupal.hakase-labs.io/

Вы попадёте на страницу установки по HTTPS. Выберите язык установки (по умолчанию — English) и нажмите «Save and continue».

Выбор языка установки Drupal

Выберите профиль установки — обычно “Standard” для первого запуска.

Тип установки Drupal

На шаге настройки базы данных укажите название БД, пользователя и пароль, которые создавали ранее.

Настройка базы данных для Drupal

Установка начнёт процесс и покажет прогресс.

Процесс установки Drupal

После завершения задайте имя сайта, учётную запись администратора (логин, пароль, e-mail) и нажмите “Save and continue”.

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

После перехода на главную страницу вы увидите стандартный интерфейс Drupal.

Главная страница Drupal

Панель администратора доступна в меню “Configuration”.

Панель администратора Drupal

Поздравляем — установка Drupal 9 завершена.

Критерии приёмки

  • Сайт доступен по HTTPS и показывает страницу установки/главную страницу Drupal.
  • PHP-FPM запущен и прослушивает сокет, указанный в конфигурации Nginx.
  • MariaDB работает, создана БД и пользователь с нужными привилегиями.
  • Nginx конфигурация проходит проверку nginx -t без ошибок.
  • Сертификат Let’s Encrypt успешно установлен и не просрочен.

Рекомендации по безопасности

  • Всегда держите систему и пакеты обновлёнными (apt update && apt upgrade).
  • Установите и настройте брандмауэр (ufw или iptables). Разрешайте только нужные порты (80, 443, SSH).
  • Отключите возможность доступа по root через SSH; используйте ключи вместо паролей.
  • Ограничьте доступ к файлам /sites/*/private и к файлам конфигурации.
  • Регулярно выполняйте резервные копии базы данных и файлов сайта.
  • Включите автообновление certbot renew или настройте cron.
  • Настройте HTTP заголовки безопасности: Content-Security-Policy, X-Frame-Options, X-Content-Type-Options.

Тесты и приёмка (минимальные тест-кейсы)

  • Доступность главной страницы по HTTPS (код 200).
  • Авторизация в /user/login работает, создание пользователя работает.
  • Импорт/загрузка изображений в библиотеку медиа работает (проверить права на /sites/default/files).
  • Выполнение SQL-запроса к drupaldb от имени drupaluser не вызывает ошибок прав доступа.
  • Обновление страницы кэша и очистка кэша в админке проходят без ошибок.

Устранение неполадок — распространённые ошибки и решения

  • Nginx не запускается после изменений: выполните nginx -t и исправьте синтаксические ошибки.
  • Ошибка 502 Bad Gateway: проверьте, запущен ли php-fpm и совпадает ли путь к unix-сокету в fastcgi_pass.
  • Проблемы с правами файлов: убедитесь, что web-процесс имеет права на /var/www/drupal9 и на /sites/default/files.
  • Certbot не может получить сертификат: проверьте, что домен указывает на текущий сервер и Nginx остановлен в режиме standalone или используйте webroot метод.

Чек-лист задач по ролям

  • Системный администратор:

    • Настроить сервер (обновления, брандмауэр, SSH).
    • Установить Nginx, PHP-FPM, MariaDB, certbot.
    • Настроить резервное копирование.
  • Деплой-инженер / DevOps:

    • Настроить виртуальный хост, автоматическое восстановление и мониторинг.
    • Настроить CI/CD для деплоя кода и миграций.
  • Разработчик:

    • Настроить окружение разработки (drupal local settings, composer, drush).
    • Проверить совместимость модулей с PHP и Drupal 9.
  • Контент-менеджер:

    • Проверить доступ к админке, загрузку медиа, шаблонов.

Mini-методология развёртывания (быстрое руководство)

  1. Подготовить сервер (обновление, брандмауэр, SSH).
  2. Установить стек (Nginx, PHP-FPM, MariaDB).
  3. Создать БД и пользователя.
  4. Получить SSL сертификат.
  5. Настроить виртуальный хост Nginx.
  6. Скопировать/распаковать Drupal в /var/www и установить права.
  7. Пройти установку через веб-интерфейс.
  8. Настроить резервное копирование и мониторинг.

Модель зрелости установки (уровни готовности)

  • Уровень 1 (dev): локальная установка, самоподписанные сертификаты, нет резервного копирования.
  • Уровень 2 (staging): публичный домен, Let’s Encrypt, базовая безопасность, периодические бэкапы.
  • Уровень 3 (prod): мониторинг, автоматические бэкапы, WAF, аварийные планы, SLA и тесты приёмки.

Быстрая справка по самым важным командам

  • Обновление системы: sudo apt update && sudo apt upgrade
  • Проверка Nginx: nginx -t
  • Перезапуск сервиса: systemctl restart nginx / php7.3-fpm / mysql
  • Проверка статуса: systemctl status nginx
  • Проверка сокета php-fpm: ss -plnt | grep php
  • Получение сертификата: certbot certonly –standalone -d yourdomain

Факты — ключевые числа

  • Минимальные ресурсы для тестовой установки: 2 ГБ RAM, 2 CPU, 50 ГБ диска.
  • Типичная память PHP-FPM в конфиге: memory_limit = 256M.
  • Рекомендуемый upload_max_filesize для медиа: 64M.

Глоссарий (одна строка)

  • LEMP: стек Linux + Nginx (Engine-X) + MariaDB/MySQL + PHP-FPM.
  • PHP-FPM: реализация FastCGI для PHP, оптимизированная для процессов.
  • certbot: утилита для получения сертификатов Let’s Encrypt.

Схема принятия решений по SSL (Mermaid)

flowchart TD
  A[Есть домен?] -->|Нет| B[Настроить DNS]
  B --> A
  A -->|Да| C[Домен указывает на сервер?]
  C -->|Нет| B
  C -->|Да| D[Остановить Nginx]
  D --> E[Запустить certbot standalone]
  E --> F{Успех?}
  F -->|Да| G[Включить Nginx и настроить сертификат в Nginx]
  F -->|Нет| H[Использовать webroot или вручную установить сертификат]

Короткая сводка и дальнейшие шаги

  • Убедитесь, что автоматическое обновление сертификатов работает: certbot renew –dry-run.
  • Пересмотрите права доступа к файлам и каталогам (особенно /sites/default/files и настройки private).
  • Настройте мониторинг и резервное копирование для производства.

Итог: следуя этому руководству, вы получите рабочий экземпляр Drupal 9 на Debian 10 с HTTPS и базовыми мерами безопасности. Для продакшн-сайта добавьте мониторинг, регулярные бэкапы, WAF и политики обновлений.

Поделиться: 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 быстро