Установка Drupal 9 на Ubuntu 22.04: подробный LAMP‑гайд
Коротко: пошаговый практический гид по установке Drupal 9 на Ubuntu 22.04 с использованием стека LAMP (Apache, MariaDB, PHP 8.1) и Composer. Описаны настройка виртуального хоста Apache, создание базы данных, конфигурация PHP (включая расширение uploadprogress), базовая безопасность (SSL, trusted_host) и контрольные списки для запуска в production.
В этом руководстве вы найдёте полную процедуру установки, рекомендации по безопасности и эксплуатационные заметки: альтернативы (Nginx), сценарии отката, тесты приёмки и шаблоны чек‑листов для ролей. Если вам нужен быстрый результат — следуйте основному сценарию. Если готовите продакшн — применяйте разделы «Безопасность», «Резервное копирование» и «Мониторинг».
О чём этот материал
Этот материал назначен для системных администраторов, DevOps‑инженеров и разработчиков, которым нужно развернуть Drupal 9 на Ubuntu 22.04. Он включает:
- подготовку сервера и требуемые пакеты;
- установку Apache, MariaDB, PHP 8.1 и Composer;
- установку и настройку Drupal (через Composer или архив);
- конфигурацию виртуального хоста и SSL;
- рекомендации по безопасности, резервному копированию и производительности;
- операционные чек‑листы, runbook для инцидентов и тест‑кейсы приёмки.
Важно: команды и файлы конфигураций приведены в оригинальном виде в блоках кода и должны выполняться с учётом вашей специфики окружения (домены, пароли, пути).
Кому подходит этот гид
- Новичкам, которые знакомы с Linux и хотят понять весь процесс установки Drupal на Ubuntu 22.04.
- Инженерам, которые настраивают небольшие и средние инфраструктуры и нуждаются в проверяемом SOP.
- Тем, кто переносит сайт на новую систему и нуждается в чек‑листах запусках и откате.
Important
Перед началом убедитесь, что у вас есть резервная копия любых важных данных и возможность доступа к консоли сервера (SSH), а также права sudo.
Основные понятия (в одну строку)
- Drupal: CMS на PHP с модульной архитектурой для построения сайтов разной сложности.
- LAMP: Linux + Apache + MariaDB/MySQL + PHP — классический стек для PHP‑приложений.
- Composer: менеджер зависимостей для PHP.
Ключевые требования и предпосылки
Перед началом подготовьте:
- Сервер с Ubuntu 22.04 (локальный или облачный). В примерах используется хостнейм server-ubuntu.
- Ненулевой пользователь с sudo (не работайте под root для рутинных операций).
- Домены, указывающие на IP сервера (A/AAAA записи) для HTTPS.
- Доступ в интернет для загрузки пакетов и Composer‑зависимостей.
Совет: для тестов локально можно использовать /etc/hosts, но для production обязательно настройте корректные DNS‑записи.
Архитектурная схема установки (коротко)
- Веб‑сервер: Apache (mod_php) или альтернативно Nginx + php‑fpm.
- БД: MariaDB (совместима с MySQL) — база для Drupal.
- PHP: 8.1 (рекомендуется) с набором расширений.
- Composer: установка внешних PHP‑пакетов и модулей.
- SSL: LetsEncrypt или коммерческий сертификат.
Ментальная модель: представьте сайт как трёхслойную систему — «веб» (Apache), «логика» (PHP + модули) и «данные» (MariaDB). Обеспечьте безопасность и надёжность для каждого слоя.
Установка Apache2 (шаг за шагом)
Apache — популярный выбор для Drupal; альтернативой является Nginx. Выполните обновление индекса пакетов:
sudo apt updateУстановите Apache:
sudo apt install apache2

Проверка статуса и включения службы:
sudo systemctl is-enabled apache2
sudo systemctl status apache2

Настройка UFW для доступа по HTTP/HTTPS:
sudo ufw allow “Apache Full”
sudo ufw status

Notes
- Если вы используете облачный провайдер, дополнительно откройте порты в панели провайдера.
- Для высокой нагрузки рассмотрите front‑proxy (NGINX/HAProxy) перед Apache.
---
## Установка MariaDB и базовая безопасность
Drupal поддерживает MySQL/MariaDB, PostgreSQL и SQLite. В этом примере — MariaDB.
Установка MariaDB:
sudo apt install mariadb-server mariadb-client

Проверка статуса сервиса:
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

Запустите интерактивную утилиту безопасной настройки:
sudo mysql_secure_installation
Следуйте подсказкам: установите root‑пароль, удалите анонимных пользователей, удалите тестовую базу, запретите удалённый вход для root, перезагрузите таблицы привилегий.
Создание базы данных и пользователя для Drupal (в примере: drupaldb / drupal / password — замените реальные значения):
sudo mysql -u root -p
CREATE DATABASE drupaldb;
CREATE USER drupal@localhost IDENTIFIED BY ‘password’;
GRANT ALL ON drupaldb.* TO drupal@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;

Проверка прав и выход:
SHOW GRANTS FOR drupal@localhost;
quit

Совет безопасности
- Используйте сложные пароли и храните их в менеджере секретов.
- Для production окружений рассмотрите выделение отдельного сервера баз данных или использование управляемых СУБД.
---
## Установка и настройка PHP 8.1 и расширений
Drupal 9 рекомендует PHP 8.x. Установим PHP 8.1 и часто требуемые расширения:
sudo apt install php php-apcu php-dev libapache2-mod-php libcurl4-openssl-dev php-cli php-mysql php-zip php-gd php-fpm php-json php-common php-intl php-mbstring php-curl php-xml php-pear php-tidy php-soap php-bcmath php-xmlrpc

Установка расширения uploadprogress из PECL (нужно для отслеживания прогресса загрузки файлов в Drupal):
sudo pecl install uploadprogress
Затем создайте конфигурационный файл расширения:
cat <
; priority 15
extension=uploadprogress.so
EOF
Включите расширение для Apache PHP:
sudo ln -s /etc/php/8.1/mods-available/uploadprogress.ini /etc/php/8.1/apache2/conf.d/15-uploadprogress.ini

Настройка php.ini
Откройте файл php.ini для Apache:
sudo nano /etc/php/8.1/apache2/php.ini
Измените параметры в соответствии с ресурсами сервера и требованиями сайта, например:
memory_limit = 512M
upload_max_filesize = 60M
max_execution_time = 300
date.timezone = Europe/Paris
Перезапустите Apache, чтобы применить изменения:
sudo systemctl restart apache2
Проверка phpinfo (создаётся временный файл info.php):
cat <
?>
EOF
Откройте http://YOUR_SERVER_IP/info.php чтобы убедиться, что PHP работает корректно.
Примечание
- Не оставляйте info.php в production — удалите после отладки.
- Для больших сайтов рассмотрите использование OPcache, Redis/Memcached и настройки PHP‑FPM с Nginx.
---
## Установка Composer
Composer используется для управления зависимостями PHP и часто применяется при установке Drupal.
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;”
php composer-setup.php
php -r “unlink(‘composer-setup.php’);”
После установки переместите бинарь для глобального использования:
sudo mv composer.phar /usr/local/bin/composer
Проверка:
composer –help

Совет
- Обновляйте Composer периодически (composer self-update) и следите за совместимостью пакетов.
---
## Скачивание и установка Drupal
Можно установить Drupal двумя способами: распаковкой архива (как в этом руководстве) или с помощью Composer (рекомендуется для продакшн с кастомными модулями).
Скачивание архива и распаковка:
wget https://www.drupal.org/download-latest/tar.gz -O drupal.tar.gz
tar -xvf drupal.tar.gz
mv drupal-* /var/www/drupal
Установите владельца и права:
sudo chown -R www-data:www-data /var/www/drupal/
sudo chmod -R 755 /var/www/drupal/
Установка зависимостей через Composer (если вы использовали архив, всё равно полезно):
cd /var/www/drupal
sudo -u www-data composer install –no-dev
Замечание
- Альтернатива: создать проект через Composer (drupal/recommended-project) — удобнее для управления модулями.
---
## Настройка виртуального хоста Apache для Drupal
Включите необходимые модули Apache:
sudo a2enmod rewrite ssl headers deflate

Создайте конфигурацию сайта /etc/apache2/sites-available/drupal.conf и адаптируйте домены и пути к SSL:
sudo nano /etc/apache2/sites-available/drupal.conf
Вставьте конфигурацию (в примере — howtoforge.local):
Активируйте сайт и проверьте конфигурацию:
sudo a2ensite drupal.conf
sudo apachectl configtest

Перезапустите Apache:
sudo systemctl restart apache2
Совет
- Если используете Let's Encrypt, предварительно получите сертификат (certbot) и обновите пути SSLCertificateFile.
- Для мультисайтовой установки Drupal виртуальные хосты настроите для каждого домена с отдельными settings.php или симлинками sites/.
---
## Запуск веб‑установщика Drupal
Откройте в браузере https://YOUR_DOMAIN/ (пример: https://howtoforge.local/). Следуйте мастеру:
1. Выберите язык и профиль установки (Standard рекомендуется для начинающих).
2. Введите параметры базы данных (drupaldb, drupal, пароль).
3. Дождитесь завершения установки модулей и импорта конфигурации.
4. Создайте администратора сайта и базовые параметры сайта.





После успешной установки вы увидите подтверждение:

---
## Настройка trusted_host_patterns
Для защиты от атак с подменой заголовка Host настройте trusted_host_patterns в settings.php:
Сделайте файл временно доступным для записи и отредактируйте:
sudo chmod 644 /var/www/drupal/sites/default/settings.php
sudo nano /var/www/drupal/sites/default/settings.php
Найдите место для trusted_host_patterns и добавьте домен в форме регулярного выражения:
$settings[‘trusted_host_patterns’] = [
‘^hwdomain.io$’,
];
Сделайте файл снова только для чтения:
sudo chmod 444 /var/www/drupal/sites/default/settings.php
Проверьте отчёт состояния сайта: https://YOUR_DOMAIN/admin/reports/status


Совет
- Для нескольких доменов включите соответствующие шаблоны в trusted_host_patterns.
---
## Безопасность и hardening (необходимые шаги)
1. SSL: используйте Let's Encrypt (certbot) или коммерческие сертификаты. Автоматизируйте продление (cron или systemd timer).
2. Права на файлы: каталоги с пользовательскими файлами (sites/default/files) должны быть записываемы веб‑сервером; остальные файлы — только для чтения.
3. Отключите показ ошибок PHP в production (display_errors = Off).
4. Ограничьте доступ к /core, /vendor если возможно (правильные правила в .htaccess или конфиге сервера).
5. Регулярно обновляйте ядро и модули Drupal.
6. Включите брандмауэр UFW и мониторинг логов.
7. Настройте регулярную проверку целостности (drush pm‑security, Composer audit, внешние сканеры).
Рекомендации по файлам и правам
- settings.php — 444 (только чтение).
- sites/default/files — 755 или 775, владелец www-data.
---
## Резервное копирование и восстановление
Резервные копии должны включать:
- Полную копию базы данных (mysqldump или инструмент СУБД).
- Дерево сайта (sites/default/files, конфиги, custom modules/themes).
- composer.json и composer.lock.
Пример резервного дампа базы:
mysqldump -u root -p drupaldb > drupaldb.sql
Шаблон простой политики бэкапа:
- Full backup — еженедельно, хранить 4–8 копий.
- Incremental (данные/файлы) — ежедневно.
- Тест восстановления — ежемесячно на копии окружения.
Runbook восстановления (коротко)
1. Остановить веб‑сервер (при необходимости): sudo systemctl stop apache2
2. Восстановить файлы (tar/rsync).
3. Восстановить базу: mysql -u root -p drupaldb < drupaldb.sql
4. Проверить права и владельца файлов.
5. Запустить сервисы и проверить сайт.
---
## Производительность и кэширование
1. Включите OPcache (обычно в PHP‑пакете) и настройте параметры opcache.memory_consumption, opcache.max_accelerated_files.
2. Включите внутренний кэш Drupal — драйвер кеша (APCu/Redis/Memcached) в зависимости от нагрузки.
3. Используйте агрегирование CSS/JS в настройках Drupal.
4. Разместите статические ресурсы за Nginx/Cloud CDN для ускорения доставки.
Короткая шпаргалка по кешам
- APCu — быстрый локальный кэш для одного веб‑узла.
- Redis/Memcached — распределённый кэш, подходит для кластеров.
---
## Мониторинг и оповещения
Рекомендуемые метрики:
- Доступность HTTP(S) — uptime мониторинг.
- Время ответа приложения (95/99‑й процентиль).
- Нагрузка CPU, использование памяти, диск I/O.
- Размер и рост таблиц БД.
- Ошибки в логах Apache и PHP.
Инструменты: Prometheus + Grafana, Zabbix, Datadog, NewRelic.
---
## Отладка и частые проблемы
1. 500 Internal Server Error — проверьте логи Apache (/var/log/apache2/error.log) и права файлов.
2. Проблемы с подключением к БД — проверьте host, порт, пользователя и права; убедитесь, что MariaDB слушает локально/на нужном интерфейсе.
3. Ошибки Composer — проверьте версии PHP и расширений; запустите composer install как пользователь www-data.
4. Ошибки HTTPS — проверьте корректность цепочки сертификатов и пути в конфиге виртуального хоста.
Точечный пример поиска проблемы с файлами
- Проверьте права на sites/default/files — если Drupal не может записать файл, загрузки будут падать.
- Просмотрите watchdog (в админке) и логи в /var/log/apache2/.
---
## Альтернативные подходы (когда не подходит этот сценарий)
- Nginx + PHP‑FPM: более высокая экономичность по памяти при высокой нагрузке и лучшая интеграция с HTTP/2 и TLS.
- Managed hosting (Acquia, Platform.sh, Pantheon): избавляет от управления инфраструктурой, но требует адаптации процессов разработки.
- Docker/Kubernetes: полезно для CI/CD и масштабирования, но добавляет сложность в сетевые и файловые права.
Когда выбирать альтернативу
- Используйте Nginx для высокой нагрузки и если вы готовы настраивать php‑fpm.
- Выбирайте managed решения при ограниченных ресурсах DevOps или при требовании SLA.
- Docker подходит для единообразных окружений и многоконтейнерных развёртываний.
---
## Совместимость, миграция и обновления
- Проверяйте совместимость модулей при обновлении ядра Drupal.
- Перед обновлением ядра или больших модулей сделайте тестовый деплой и бэкап БД и файлов.
- Composer‑подход облегчает обновления зависимостей и управление версиями.
Краткий чек‑лист миграции
1. Сделать полный бэкап текущей системы.
2. Развернуть тестовую копию и прогнать миграцию/обновление.
3. Прогнать тест‑кейсы (см. ниже).
4. Планировать окно обслуживания для продакшн‑обновления.
---
## Критерии приёмки (Test cases / Acceptance criteria)
1. Сайт доступен по HTTPS, сертификат валиден.
2. Пользователь‑администратор может войти и создать материал (node).
3. Файловые загрузки работают, прогресс отображается.
4. База данных отвечает на запросы, нет критических ошибок в логах.
5. Все критические модули загружены и активны.
---
## Роль‑ориентированные чек‑листы
Администратор сервера
- [ ] Обновление пакетов (apt update/upgrade).
- [ ] Настройка брандмауэра и правил доступа.
- [ ] Настройка автоматических резервных копий.
Разработчик
- [ ] Проверка composer.json и composer.lock.
- [ ] Локальное тестирование функциональности.
- [ ] Проверка кода модулей на совместимость с PHP 8.1.
DevOps / Release engineer
- [ ] Прогон миграции на staging.
- [ ] План отката и тест восстановления.
- [ ] Мониторинг после релиза.
---
## Playbook установки (сводный SOP)
1. Подготовка окружения: обновление apt, настройка часов, DNS.
2. Установка Apache, MariaDB, PHP и Composer (как описано выше).
3. Создание БД и пользователя.
4. Разворачивание Drupal (архив или Composer) и установка зависимостей.
5. Настройка виртуального хоста и SSL.
6. Запуск веб‑инсталлятора и первичная настройка сайта.
7. Настройка trusted_host_patterns и прав доступа.
8. Тестирование (приёмочные тесты) и перевод в production.
---
## Runbook / Откат при инциденте
Симптом: сайт недоступен после обновления.
1. Откат конфигураций Apache (a2dissite, перезапуск) — если проблема в виртуалхосте.
2. Восстановление базы из последнего бэкапа (mysqldump).
3. Восстановление файлов (tar/rsync).
4. Перезапуск сервисов и проверка логов.
5. Если ошибка в обновлении модулей — восстановить composer.lock и выполнить composer install.
---
## Советы по безопасности GDPR и приватности
- Храните персональные данные в базе согласно политикам хранения и удаления.
- Ограничьте доступ к админке по IP или через VPN для администраторов.
- Используйте HTTPS везде и HSTS для защиты от MITM.
- Логи с персональными данными анонимизируйте/маскируйте при необходимости.
---
## Шаблоны и примеры команд (чек‑лист быстрого запуска)
- Обновление системы:
sudo apt update && sudo apt upgrade -y
- Создание дампа БД:
mysqldump -u root -p drupaldb > /backups/drupaldb-$(date +%F).sql
- Резервирование файлов:
tar -czf /backups/drupal_files-$(date +%F).tar.gz /var/www/drupal/sites/default/files
---
## Когда этот подход не подойдёт (контрпример)
- Если вам нужен горизонтальный autoscale с шарингом файловой системы — лучше использовать object storage (S3/Swift) и Redis/DB‑кластер.
- Если управление инфраструктурой должно быть полностью аутсорснуто — выбирайте managed‑platform.
---
## Краткий набор ключевых чисел (факт‑бокс)
- Целевая ОС: Ubuntu 22.04 LTS
- Рекомендуемая версия PHP: 8.1
- MariaDB в репозиториях Ubuntu 22.04 обычно в версии 10.6
- Обычные права: 755 для директорий, settings.php — 444
---
## Социальные тексты и анонс
OG title: Drupal 9 на Ubuntu 22.04 — установка и настройка
OG description: Пошаговый LAMP‑гайд по установке Drupal 9 с Apache, MariaDB, PHP 8.1 и Composer. Включает безопасность, резервное копирование и чек‑листы.
Короткий анонс (100–200 слов):
Публикация быстрого запуска: этот подробный материал проведёт вас через установку Drupal 9 на Ubuntu 22.04. Вы пройдёте все этапы: Apache, MariaDB, PHP 8.1, настройку виртуального хоста и SSL, а также узнаете о лучших практиках безопасности, резервном копировании и мониторинге. В конце — готовые чек‑листы и runbook для запуска в production.
---
## Итоги
Вы установили Drupal 9 на Ubuntu 22.04, настроили LAMP‑стек, Composer и базовые параметры безопасности. Для вывода в production:
- примените SSL и автоматическое обновление сертификатов;
- настройте резервные копии и мониторинг;
- протестируйте сценарии восстановления и отката.
Summary
- Drupal развёрнут в DocumentRoot /var/www/drupal и доступен по HTTPS.
- Настроены PHP 8.1, расширение uploadprogress, MariaDB и виртуальный хост Apache.
- Приведены чек‑листы, runbook и критерии приёмки для безопасного запуска.
Дополнительные шаги (рекомендуется): интеграция CI/CD, использование Composer‑подхода для управления зависимостями и миграция файлов в объектное хранилище для масштабируемости.
Important
Удалите временные файлы (phpinfo, composer.phar в рабочей папке) и примените все правки к конфигурации под ваши реальные домены и требования безопасности.