Установка Drupal на Debian 12 — пошаговый гид

Важно: замените примеры доменов, паролей и временных зон на значения вашего окружения.
Основные варианты запроса (SEO-интент)
- Установка Drupal на Debian 12
- Установка Drupal LAMP Debian
- Drupal на Apache2 и MariaDB
- Настройка SSL Letsencrypt для Drupal
Предварительные требования
Перед началом убедитесь, что у вас есть:
- Сервер с Debian 12.
- Непользователь root — учётная запись с правами администратора (sudo).
- Доменное имя, указывающее на IP сервера.
Установка зависимостей
Drupal написан на PHP и использует MySQL/MariaDB. В этом разделе мы установим LAMP (Apache2, MariaDB, PHP), Composer и необходимые расширения PHP.
Обновите индекс пакетов Debian:
sudo apt updateУстановите все пакеты сразу:
sudo apt install apache2 mariadb-server composer 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Подтвердите установку, введя y при запросе.
После установки проверьте состояние сервисов и версий.
Проверка Apache2:
sudo systemctl is-enabled apache2
sudo systemctl status apache2
Проверка MariaDB:
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb
Проверка Composer:
which composer
sudo -u www-data composer -vВы должны увидеть установленный Composer 2.x, например расположение /usr/bin/composer.

Проверка PHP и модулей:
php -v
php -mВ руководстве используется PHP 8.2; убедитесь, что у вас установлена корректная версия и расширения включены.

Настройка MariaDB
Защитите установку MariaDB и создайте базу данных и пользователя для Drupal.
Выполните утилиту безопасной настройки:
sudo mariadb-secure-installationВо время процесса рекомендуем:
- Нажать ENTER, если по умолчанию пароля нет.
- Установить пароль для root (ответ Y).
- Удалить анонимных пользователей (Y).
- Отключить удалённый вход для root (Y).
- Удалить тестовую базу данных (Y).
- Перезагрузить привилегии (Y).
Затем войдите в MariaDB как root:
sudo mariadb -u root -pСоздайте базу данных и пользователя (замените пароль на надёжный):
CREATE DATABASE drupaldb;
CREATE USER drupal@localhost IDENTIFIED BY 'secure_password_here';
GRANT ALL ON drupaldb.* TO drupal@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;
Проверьте привилегии пользователя:
SHOW GRANTS FOR drupal@localhost;
Совет: в продакшн-среде давать минимально необходимые права. Для установки часто нужны широкие права, но в дальнейшем стоит ограничить привилегии.
Настройка PHP
Нам понадобятся дополнительные расширения, например uploadprogress, и правки в php.ini.
Установка расширения uploadprogress через PECL
Uploadprogress помогает отслеживать прогресс загрузки файлов. Установите его так:
sudo pecl install uploadprogress
Создайте конфигурационный файл расширения:
cat <Включите расширение для Apache2:
sudo ln -s /etc/php/8.2/mods-available/uploadprogress.ini /etc/php/8.2/apache2/conf.d/15-uploadprogress.ini
Правки в php.ini
Откройте конфигурацию PHP для Apache2:
sudo nano /etc/php/8.2/apache2/php.iniОтредактируйте параметры под ваш сервер, например:
memory_limit = 512M
upload_max_filesize = 60M
max_execution_time = 300
date.timezone = Europe/AmsterdamСовет: установите date.timezone в вашу локальную временную зону, например Europe/Moscow.
Перезапустите Apache:
sudo systemctl restart apache2Создайте тестовую страницу phpinfo:
cat <
EOF Откройте http://SERVER_IP/info.php и убедитесь, что конфигурация применена.

Загрузка исходников Drupal
Скачайте последний релиз Drupal и распакуйте его в /var/www/drupal.
cd /var/www/
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/Конфигурация виртуального хоста Apache2
Включите обязательные модули:
sudo a2enmod rewrite ssl headers deflate
Создайте файл виртуального хоста /etc/apache2/sites-available/drupal.conf:
sudo nano /etc/apache2/sites-available/drupal.confВставьте конфигурацию (замените ServerName на ваш домен):
ServerName howtoforge.local
ServerAdmin admin@domain.tld
DocumentRoot /var/www/drupal
# Add security
php_flag register_globals off
ErrorLog ${APACHE_LOG_DIR}/howtoforge.local.error.log
CustomLog ${APACHE_LOG_DIR}/howtoforge.local.access.log combined
SSLOptions +StdEnvVars
Options FollowSymlinks
AllowOverride All
Require all granted
SecRuleEngine Off
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Активируйте сайт и проверьте синтаксис конфигурации Apache:
sudo a2ensite drupal.conf
sudo apachectl configtestПри успешной проверке увидите “Syntax OK”.

Перезапустите Apache:
sudo systemctl restart apache2SSL/TLS через Let’s Encrypt
Установите Certbot и плагин для Apache:
sudo apt install certbot python3-certbot-apache
Сгенерируйте сертификат (замените email и домен):
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email admin@domain.tld -d howtoforge.localПосле завершения сертификаты будут в /etc/letsencrypt/live/domain.com, а сайт автоматически настроится на HTTPS.
Важно: убедитесь, что порт 80 и 443 открыты в фаерволе и что DNS указывает на сервер.
Установка Drupal через веб-инсталлятор
Откройте ваш домен в браузере, например https://howtoforge.local/. Установка должна запуститься автоматически и предложить выбрать язык.
Выберите профиль установки. Для большинства случаев подходит “Standard”.


Когда инсталлятор проверит окружение, введите данные базы данных (drupaldb, drupal, ваш пароль) и продолжите.

Следуйте процессу установки; после завершения настройте параметры сайта: название, email, пользователя admin, страну и часовой пояс.

Успешная установка отобразит сообщение «Поздравляем, вы установили Drupal!».

Перейдите в раздел “Manage” → “Configuration” чтобы продолжить настройку сайта.

Дополнительная конфигурация Drupal
Установив Drupal, выполните несколько финальных настроек.
Измените права и отредактируйте 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Проверьте отчёты состояния в админке: Reports → Status reports.

Вы увидите версии компонентов — пример: Drupal 10, Apache2 2.4, MariaDB 10.11, PHP 8.2.


Безопасность и жёсткая конфигурация (Security hardening)
Ключевые меры для повышения безопасности сайта:
- Регулярно обновляйте ядро Drupal и модули через Composer.
- Отключите перечисление директорий (Options -Indexes) в виртуальном хосте.
- Ограничьте доступ к /sites/default/files через правила .htaccess при необходимости.
- Используйте сильные пароли и двухфакторную аутентификацию для админов.
- Настройте WAF (Web Application Firewall) и модуль мод_security для Apache.
- Настройте регулярные бэкапы базы и файлов.
- Защитите доступ к SSH: ключи, отключение пароля, ограничение логинов.
- Ограничьте привилегии MariaDB в продакшне.
Пример правила в Apache для отключения индексации:
Options -Indexes +FollowSymlinks
Резервное копирование и восстановление
Рекомендуемый минимум:
- Ежедневные дампы базы данных (mysqldump или mariadb-dump).
- Инкрементальные резервные копии папки sites/default/files.
- Хранилище бэкапов вне сервера (S3, удалённый NAS или другой дата-центр).
Пример простого бэкап-скрипта (cron):
#!/bin/bash
DATE=$(date +%F)
# дамп БД
mysqldump -u root -p'ROOT_PASS' drupaldb > /var/backups/drupaldb_$DATE.sql
# архив файлов
tar -czf /var/backups/drupal_files_$DATE.tar.gz -C /var/www/drupal/sites/default/files .
# удаление старых бэкапов старше 30 дней
find /var/backups -type f -mtime +30 -deleteКритерии приёмки: успешный бэкап может быть восстановлен на тестовом сервере и сайт работает корректно.
Обслуживание сертификатов и автоматическое продление
Certbot автоматически настраивает системный cron или systemd таймер для обновления сертификатов. Проверьте симуляцию продления:
sudo certbot renew --dry-runЕсли возникли ошибки, проверьте логи /var/log/letsencrypt/.
Производительность и кэширование
Улучшения производительности:
- Включите кэширование на уровне Drupal (Internal Page Cache, Dynamic Page Cache).
- Используйте Redis или Memcached для кэширования сессий и кеш-слоёв.
- Включите OPCache для PHP (обычно уже установлено с PHP-FPM/CLI).
- Настройте сжатие и сжатие Brotli/Gzip на Apache.
- Используйте CDN для статических файлов.
Пример включения модулей кэша в Drupal: через интерфейс или Drush (если установлен).
Composer: лучшие практики
- Управляйте зависимостями Drupal через Composer. Не копируйте код модулей вручную.
- Репозиторий проекта должен включать composer.json и composer.lock.
- В рабочем процессе CI собирайте артефакт и деплойте на продакшн без выполнения composer install на проде (рекомендация для предсказуемого релиза).
План обновлений и миграции
- Перед обновлением ядра или модуля создавайте бэкап БД и файлов.
- Тестируйте обновления на копии продакшна.
- Используйте режим обслуживания при обновлениях.
Отладка: распространённые ошибки и решения
- Белый экран или 500 Internal Server Error
- Проверьте логи Apache (/var/log/apache2/error.log).
- Убедитесь, что права доступа к файлам верны.
- Проверьте PHP-расширения и память (memory_limit).
- Ошибка подключения к БД
- Проверьте правильность параметров в settings.php.
- Убедитесь, что пользователь базы имеет нужные права.
- Ошибки сертификата или редиректа
- Проверьте, что домен правильно настроен в виртуальном хосте и в Certbot.
- Запустите certbot renew –dry-run, чтобы смоделировать продление.
Роли и контрольный список (Role-based checklists)
Администратор сервера:
- Установил и настроил Apache/MariaDB/PHP.
- Настроил SSL и firewall.
- Организовал бэкапы и мониторинг.
Веб-разработчик:
- Развернул проект и управляет зависимостями через Composer.
- Провёл тестирование миграций и обновлений.
Контент-менеджер:
- Создал структуру контента.
- Настроил права ролей в Drupal.
Мини-процедура развёртывания (SOP)
- Подготовка: бэкап базы и файлов.
- Перевод сайта в режим обслуживания.
- Применение Composer обновлений на тесте.
- Обновление на продакшне, миграция БД (если требуется).
- Проверка логов и тестовой страницы.
- Вывод сайта из режима обслуживания.
Тесты приёмки
- Сайт доступен по HTTPS и сертификат действителен.
- Основные страницы рендерятся без ошибок.
- Пользователь с правами редактора может создать материал.
- Резервная копия БД восстанавливается на тестовом хосте.
Дополнительные замечания по локализации и GDPR
- Если сайт обрабатывает персональные данные, обеспечьте документацию GDPR: политика конфиденциальности, соглашение на хранение cookies.
- Локальные альтернативы и риски: для России популярны решения хранения бэкапов на локальных ресурсах с учётом законодательства.
Частые ошибки при миграции с другой CMS
- Неполные экспорт-импорты данных — проверьте соответствие полей.
- Проблемы с кодировкой — убедитесь в UTF-8 и корректных заголовках.
Заключение
Вы установили Drupal на сервер Debian 12 с LAMP и настроили HTTPS через Let’s Encrypt. Дальше рекомендуем:
- Настроить регулярные обновления и мониторинг.
- Настроить автоматические бэкапы и тестирование восстановления.
- Внедрить меры безопасности, описанные выше.
Краткие рекомендации: держите систему и модули в актуальном состоянии, используйте проверенные модули и управляйте зависимостями через Composer.
Важно: эта инструкция даёт практическое руководство для развёртывания типичного сайта на Drupal. В сложных корпоративных сценариях потребуется дополнительная архитектура (балансировщики, кластерные базы, CI/CD).
Похожие материалы
Обновить Cube WP10 до Anniversary Update
Как проверить, запущен ли Docker daemon
Как запланировать твит в Twitter
docker cp — копирование файлов между хостом и контейнером
Копирование файлов по SSH без пароля