Home » Как установить Drupal с Docker Compose
Как установить Drupal с Docker Compose

Как установить 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 для тестовой почты.

  1. Устанавливаем Docker и Docker Compose (если ещё не стоят):


sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker

  1. Создаём структуру проекта:


mkdir drupal-docker
cd drupal-docker
mkdir html db

  1. Пишем 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

  1. Создаём 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;
}
}

  1. Скачиваем Drupal:


docker run --rm -v $(pwd)/html:/app composer create-project drupal/recommended-project /app

  1. Запускаем всё:


docker-compose up -d

  1. Открываем браузер: 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 — быстро, удобно и по-современному. Если остались вопросы — пиши в комменты, разберём любые кейсы!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked