- Home »

Как установить Drupal с Docker Compose
В этом посте разберёмся, как быстро и без боли развернуть Drupal с помощью Docker Compose. Почему это важно? Потому что ручная установка CMS на сервер — это боль, страдания и куча лишних телодвижений. Docker Compose позволяет собрать всё в один клик: PHP, Nginx, MariaDB/PostgreSQL, Redis, Volumes — и всё это в изолированных контейнерах. Такой подход экономит время, снижает количество багов и облегчает миграцию между серверами или локальной машиной и продакшеном. Если ты хочешь поднять свой Drupal-проект на VPS или dedicated сервере, не тратя часы на настройку окружения, этот гайд для тебя.
Как это работает?
Docker Compose — это инструмент для описания и управления многоконтейнерными Docker-приложениями. Ты пишешь один YAML-файл, где указываешь, какие сервисы нужны (например, веб-сервер, база данных, кэш), какие порты пробрасывать, какие тома монтировать. После этого одной командой docker-compose up -d
поднимаешь всю инфраструктуру.
- Каждый сервис (PHP, Nginx, MariaDB) работает в своём контейнере.
- Контейнеры общаются друг с другом по внутренней сети Docker.
- Все данные (файлы сайта, база) можно хранить в volume — это удобно для бэкапов и миграций.
- Можно быстро обновлять отдельные сервисы, не трогая остальные.
В случае с Drupal всё становится особенно удобно: не нужно думать о версиях PHP, расширениях, настройках базы — всё уже собрано в контейнерах. Хочешь обновить PHP или MariaDB? Просто меняешь версию в YAML и перезапускаешь сервис.
Как быстро и просто всё настроить?
Покажу на практике, как собрать рабочий стенд для Drupal 10 (или 9, если нужно) с помощью Docker Compose. Будет три контейнера: nginx (или apache, если любишь классику), php-fpm и mariadb. Можно добавить phpmyadmin для управления базой, redis для кэша, mailhog для тестовой почты.
- Устанавливаем Docker и Docker Compose (если ещё не стоят):
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker
- Создаём структуру проекта:
mkdir drupal-docker
cd drupal-docker
mkdir html db
- Пишем docker-compose.yml:
version: '3.8'
services:
db:
image: mariadb:10.6
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: drupal
MYSQL_USER: drupal
MYSQL_PASSWORD: drupalpass
volumes:
- ./db:/var/lib/mysql
php:
image: drupal:10-fpm
restart: always
volumes:
- ./html:/var/www/html
nginx:
image: nginx:alpine
restart: always
ports:
- "8080:80"
volumes:
- ./html:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- "8081:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: rootpass
depends_on:
- db
- Создаём nginx.conf:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
- Скачиваем Drupal:
docker run --rm -v $(pwd)/html:/app composer create-project drupal/recommended-project /app
- Запускаем всё:
docker-compose up -d
- Открываем браузер: http://localhost:8080 — и ставим Drupal через веб-интерфейс.
Для управления базой: http://localhost:8081 (логин: root, пароль: rootpass).
Примеры, схемы, практические советы
Вот типичная схема для production и development:
Сервис | Dev (локально) | Prod (сервер) | Рекомендации |
---|---|---|---|
PHP | drupal:10-fpm | drupal:10-fpm | В dev можно добавить xdebug, в prod — отключить. |
Веб-сервер | nginx:alpine | nginx:alpine | В prod — добавить SSL (Let’s Encrypt), HTTP/2. |
БД | mariadb:10.6 | mariadb:10.6 | В prod — хранить volume на отдельном диске, делать бэкапы. |
phpMyAdmin | phpmyadmin/phpmyadmin | Отключить или ограничить доступ по IP | В prod не держать phpMyAdmin открытым наружу. |
Redis | redis:alpine | redis:alpine | Для ускорения кэша, особенно на больших проектах. |
Положительный кейс: проект на Drupal 10, миграция с локалки на VPS заняла 10 минут: скопировали docker-compose.yml, volumes, поменяли пару переменных — и всё работает.
Отрицательный кейс: забыли пробросить volume для базы, после перезапуска контейнера все данные исчезли. Вывод: всегда монтируйте volume для базы и файлов Drupal!
Команды для управления
# Запуск всех сервисов в фоне
docker-compose up -d
# Остановка
docker-compose down
# Перезапуск
docker-compose restart
# Просмотр логов
docker-compose logs -f
# Войти в контейнер php
docker-compose exec php bash
# Бэкап базы
docker-compose exec db sh -c 'mysqldump -u drupal -pdrupalpass drupal' > backup.sql
# Восстановление базы
cat backup.sql | docker-compose exec -T db sh -c 'mysql -u drupal -pdrupalpass drupal'
Похожие решения, программы и утилиты
- Docksal — готовая оболочка для Drupal и других PHP-проектов, но менее гибкая, чем чистый Docker Compose.
- Lando — ещё одна обёртка, заточенная под локальную разработку, но для продакшена лучше использовать чистый Docker Compose.
- Wodby Drupal Stack — мощный набор Docker-образов для Drupal, с кучей настроек и поддержкой CI/CD.
Статистика, сравнение с другими решениями
Решение | Гибкость | Простота | Подходит для продакшена? | Автоматизация |
---|---|---|---|---|
Docker Compose | Высокая | Средняя | Да | Да |
Lando | Средняя | Высокая | Нет | Ограниченно |
Docksal | Средняя | Высокая | Нет | Ограниченно |
Ручная установка | Высокая | Низкая | Да | Нет |
По опросам на Stack Overflow и Reddit, более 60% разработчиков, работающих с Drupal, используют Docker или Docker Compose для локальной разработки и CI/CD. В продакшене — около 30%, но эта цифра растёт.
Интересные факты и нестандартные способы использования
- Можно запускать несколько версий Drupal параллельно на одном сервере, просто меняя порты и папки.
- С помощью
docker-compose.override.yml
можно делать разные конфиги для dev и prod без дублирования кода. - Можно подключать внешние сервисы (S3, Elasticsearch, Solr) как отдельные контейнеры — и тестировать интеграции локально.
- В связке с GitLab CI/CD можно автоматически деплоить Drupal на staging/production, просто пушая изменения в репозиторий.
- Для тестирования обновлений ядра Drupal — клонируешь проект, поднимаешь новый контейнер, тестируешь, не ломая продакшен.
Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?
- Можно автоматизировать развёртывание новых сайтов: скрипт клонирует репозиторий, копирует docker-compose.yml, запускает контейнеры — и сайт готов.
- Легко интегрировать с Ansible, Terraform, CI/CD пайплайнами — инфраструктура как код, всё прозрачно и воспроизводимо.
- Можно быстро делать бэкапы и восстановление: volume для базы и файлов — это просто копирование папок.
- Масштабирование: если проект вырос — можно вынести базу на отдельный сервер, добавить балансировщик, не меняя код приложения.
- Тестирование новых модулей, патчей, обновлений — в изолированной среде, без риска для основного сайта.
Вывод — заключение и рекомендации
Если хочешь быстро и надёжно развернуть Drupal на своём сервере — Docker Compose это must-have. Это не только экономия времени, но и гарантия, что окружение будет одинаковым на всех этапах: от локальной разработки до продакшена. Не забывай про бэкапы volumes, не держи phpMyAdmin открытым наружу, и всегда тестируй обновления в отдельном контейнере.
Для старта на VPS — заказать VPS, для крупных проектов — выделенный сервер. Всё, что нужно — это SSH-доступ и 10 минут времени.
Официальные ссылки для погружения:
Всё, теперь ты знаешь, как поднять Drupal с Docker Compose — быстро, удобно и по-современному. Если остались вопросы — пиши в комменты, разберём любые кейсы!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.