Установка Drupal с помощью Docker на Ubuntu 22.04
- Пошаговое руководство по развёртыванию Drupal 10 с PHP-FPM, MySQL и Nginx в контейнерах Docker на Ubuntu 22.04. Используем Docker Compose и Certbot для автоматической выдачи и обновления SSL. Включены рекомендации по безопасности, резервному копированию и обновлению.

Drupal — это система управления контентом (CMS) с открытым исходным кодом, написанная на PHP. Её используют для блогов, государственных порталов, корпоративных сайтов и других проектов. Drupal гибкий: набор модулей и тем позволяет создать практически любой сайт.
В этом руководстве вы научитесь устанавливать Drupal в Docker на сервере Ubuntu 22.04. Мы будем использовать PHP 8.2 совместимый образ Drupal, базу данных MySQL и Nginx в качестве веб-сервера. Для HTTPS выдачи сертификатов применим Certbot (Let’s Encrypt). Docker Compose объединит сервисы в единый стек.
Важные термины в одну строку
- Docker: платформа для контейнеризации приложений.
- Docker Compose: инструмент для определения и запуска многоконтейнерных Docker-приложений.
- Certbot: клиент для автоматического получения сертификатов Let’s Encrypt.
- PHP-FPM: реализация FastCGI для PHP для обработки PHP-запросов.
Для кого это руководство
Для системных администраторов и разработчиков, у которых есть доступ к Ubuntu 22.04 серверу и базовые навыки работы в терминале. Подойдёт для небольших и средних проектов. Если вы готовите production для большого трафика, разделите роли (балансировка, кластеризация БД и т.д.).
Основные шаги в одном предложении
- Настроить базовую систему и ufw, 2. установить Docker и Docker Compose, 3. создать docker-compose.yml, 4. настроить Nginx для ACME, 5. получить тестовый (staging) сертификат, 6. получить боевой сертификат, 7. запустить Drupal web-установщик, 8. настроить параметры БД и trusted hosts, 9. настроить резервное копирование, 10. обновлять образы при необходимости.
Содержание
- Предварительные требования
- Шаг 1 — Настройка брандмауэра
- Шаг 2 — Установка Docker и Docker Compose
- Шаг 3 — Файл Docker Compose для Drupal
- Шаг 4 — Конфигурация Nginx
- Шаг 5 — Получение SSL сертификатов
- Шаг 6 — Конфигурация Nginx для SSL
- Шаг 7 — Запуск веб-инсталлятора Drupal
- Шаг 8 — Базовая настройка Drupal (оптимизация и безопасность)
- Шаг 9 — Резервное копирование
- Шаг 10 — Обновление Drupal
- Частые ошибки и отладка
- Контрольные списки, тест-кейсы, SOP и рекомендации
- Краткое резюме
Предварительные требования
- Сервер с Ubuntu 22.04, минимум 1 ГБ оперативной памяти для небольших сайтов; для среднего проекта пригодится 2 ГБ и больше.
- Нераутовый пользователь с правами sudo.
- Полностью настроенное доменное имя (FQDN), указывающее на ваш сервер. В примерах используется example.com и drupal.example.com — замените их на ваш домен.
- Система обновлена и установлены утилиты:
$ sudo apt update$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -yПримечание: набор пакетов обеспечивает работу добавления репозиториев, GPG-ключей и базовых утилит.
Шаг 1 — Настройка брандмауэра
Ubuntu по умолчанию поставляется с ufw (Uncomplicated Firewall). Проверим статус и откроем нужные порты.
Проверить статус:
$ sudo ufw statusЕсли статус inactive, откройте SSH, HTTP и HTTPS, чтобы не потерять доступ:
$ sudo ufw allow OpenSSH
$ sudo ufw allow http
$ sudo ufw allow httpsВключите брандмауэр:
$ sudo ufw enableПроверка статуса после включения:
$ sudo ufw statusОжидаемый вывод: OpenSSH, 80/tcp и 443/tcp разрешены для IPv4 и IPv6 (если включены). Важно: при управлении удалённым сервером сначала убедитесь, что правило для SSH применено, иначе вы можете потерять доступ.
Важно
- На серверах в облаке дополнительно проверьте правила сетевого уровня (например, security groups в AWS или правила брандмауэра в GCP/OVH), чтобы порты 80/443 были открыты.
Шаг 2 — Установка Docker и Docker Compose
Ubuntu 22.04 может содержать старую версию Docker. Установим официальную последнюю стабильную версию.
Импорт GPG-ключа Docker:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgСоздаём файл репозитория Docker:
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullОбновляем список пакетов и устанавливаем Docker Engine и плагин docker-compose:
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-pluginПроверяем статус Docker:
$ sudo systemctl status dockerЧтобы запускать docker без sudo, добавьте пользователя в группу docker:
$ sudo usermod -aG docker $(whoami)Перезайдите в сессию или выполните:
$ su - ${USER}Проверка групп:
$ groupsЕсли в выводе есть docker — всё готово.
Совет по безопасности
- В продакшне стоит ограничивать доступ к группе docker, так как членство в ней даёт привилегии, схожие с root.
Шаг 3 — Создание docker-compose.yml для Drupal
Создадим директорию и файл docker-compose.yml.
$ mkdir ~/drupal
$ cd ~/drupal
$ nano docker-compose.ymlВставьте следующий манифест (сохраните файл после вставки):
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: unless-stopped
env_file: .env
volumes:
- db-data:/var/lib/mysql
networks:
- internal
drupal:
image: drupal:10-fpm-alpine
container_name: drupal
depends_on:
- mysql
restart: unless-stopped
networks:
- internal
- external
volumes:
- drupal-data:/var/www/html
webserver:
image: nginx:1.22.1-alpine
container_name: webserver
depends_on:
- drupal
restart: unless-stopped
ports:
- 80:80
volumes:
- drupal-data:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
- certbot-etc:/etc/letsencrypt
networks:
- external
certbot:
depends_on:
- webserver
image: certbot/certbot
container_name: certbot
volumes:
- certbot-etc:/etc/letsencrypt
- drupal-data:/var/www/html
command: certonly --webroot --webroot-path=/var/www/html --email sammy@your_domain --agree-tos --no-eff-email --staging -d example.com -d www.example.com
networks:
external:
driver: bridge
internal:
driver: bridge
volumes:
drupal-data:
db-data:
certbot-etc:
Разбор сервисов
- MySQL: используем образ mysql:8.0, данные монтируются в named volume db-data. Переменные окружения задаются в файле .env, который мы создадим отдельно (пользователь, пароль, имя БД).
- Drupal: образ drupal:10-fpm-alpine содержит PHP-FPM. Код сайта монтируется в drupal-data.
- webserver (Nginx): отдаёт порт 80 и использует директорию с конфигурациями nginx-conf. Сертификаты certbot хранятся в certbot-etc.
- certbot: получает сертификаты через webroot. В примере используется –staging для тестовой выдачи.
Файл .env (пример)
Создайте файл .env в той же папке и добавьте туда переменные для MySQL:
MYSQL_ROOT_PASSWORD=changeme_root_password
MYSQL_DATABASE=drupal
MYSQL_USER=drupal
MYSQL_PASSWORD=changeme_db_passwordЗамените пароли на безопасные значения и храните .env с ограниченными правами доступа.
Шаг 4 — Конфигурация Nginx
Создайте директорию для конфигураций Nginx и файл drupal.conf:
$ mkdir nginx-conf
$ nano nginx-conf/drupal.confВставьте конфигурацию, которая позволит Certbot проверять веб-рут и отдавать PHP-контент через PHP-FPM:
server {
listen 80;
listen [::]:80;
server_name drupal.example.com;
index index.php index.html index.htm;
root /var/www/html;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass drupal:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
Пояснение
- Блок для /.well-known/acme-challenge разрешает Certbot размещать проверочные файлы.
- PHP-файлы проксируются на drupal:9000 — это контейнер с PHP-FPM.
- Для статических файлов включён кэш через expires.
Шаг 5 — Генерация SSL сертификатов (staging → production)
Сначала запустим контейнеры и получим тестовый (staging) сертификат, чтобы проверить процесс выдачи и не исчерпать лимиты Let’s Encrypt в период тестирования.
Запуск стекa:
$ docker compose up -dПроверка статуса:
$ docker compose psВ примере вы увидите, что certbot может завершиться с кодом 1 при использовании –staging в команде (в этом случае это ожидаемо для некоторых конфигураций) или завершиться успешно при корректном домене. Сертификаты размещаются в /etc/letsencrypt/live внутри контейнера webserver (через общий том certbot-etc).
Проверка файлов сертификата:
$ docker compose exec webserver ls -la /etc/letsencrypt/liveЕсли тестовый сертификат создан, можно заменить флаг –staging на –force-renewal (и убрать test endpoint) в секции certbot docker-compose для реальной выдачи.
Обновление команды certbot в docker-compose.yml (примеры в файле):
certbot:
depends_on:
- webserver
image: certbot/certbot
container_name: certbot
volumes:
- certbot-etc:/etc/letsencrypt
- drupal-data:/var/www/html
command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email --staple-ocsp --force-renewal -d drupal.example.comПересоздаём контейнер certbot без пересоздания зависимостей:
$ docker compose up --force-recreate --no-deps certbotПри успешной выдаче вы увидите сообщения о сохранении fullchain.pem и privkey.pem в соответствующей папке.
Совет
- Для массовых выдач сертификатов и автоматического обновления используйте cron/логику внутри контейнера или планировщик на хосте. Certbot поддерживает автоматическое продление через certbot renew.
Шаг 6 — Конфигурация Nginx для SSL
После того как сертификаты получены, нужно настроить Nginx так, чтобы он слушал 443 и перенаправлял HTTP → HTTPS.
- Остановите webserver контейнер:
$ docker stop webserver- Создайте новый файл nginx-conf/drupal-ssl.conf:
$ nano nginx-conf/drupal-ssl.confВставьте конфигурацию:
server {
listen 80;
listen [::]:80;
server_name drupal.example.com;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
rewrite ^ https://$host$request_uri? permanent;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name drupal.example.com;
index index.php index.html index.htm;
root /var/www/html;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/drupal.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/drupal.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/drupal.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_ecdh_curve secp384r1;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass drupal:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
- Обновите docker-compose.yml, чтобы Nginx слушал порт 443 и подключал dhparam:
webserver:
image: nginx:1.22.1-alpine
container_name: webserver
depends_on:
- drupal
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- drupal-data:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
- certbot-etc:/etc/letsencrypt
- /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
networks:
- external- Удалите старый HTTP-конфиг, если он не нужен:
$ rm nginx-conf/drupal.conf- Сгенерируйте Diffie-Hellman параметры (dhparam.pem):
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096Процесс может занять пару минут.
- Пересоздайте webserver контейнер:
$ docker compose up -d --force-recreate --no-deps webserverПроверка статуса контейнеров:
$ docker compose psЕсли вебсервер запущен и порты 80/443 проброшены, открывайте https://drupal.example.com (замените на ваш домен).
Шаг 7 — Запуск веб-инсталлятора Drupal
Откройте в браузере https://drupal.example.com. Вы увидите экран инсталляции Drupal.

Выберите профиль (обычно Standard) и следуйте мастеру установки. На этапе настройки БД укажите данные из .env и в качестве хоста укажите mysql (имя сервиса в docker-compose). Это говорит Drupal подключаться по внутренней сети Docker к MySQL.

При успешной установке вы увидите прогресс установки модулей и тем.

Далее заполните основные параметры сайта: имя, учётные данные администратора, региональные настройки.

После завершения вы попадёте на панель управления Drupal.

Шаг 8 — Настройка Drupal: оптимизация и безопасность
- Transaction Isolation Level (уровень изоляции транзакций MySQL)
По умолчанию MySQL использует REPEATABLE READ. Для Drupal рекомендуется использовать READ COMMITTED, чтобы снизить вероятность взаимных блокировок (deadlocks).
Подключитесь к контейнеру MySQL:
$ docker exec -it mysql bash
bash-4.4# mysql -u root -p
Enter password:В MySQL выполните:
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;Учтите, что команда меняет глобальную настройку для текущего сеанса MySQL. Для постоянного эффекта добавьте соответствующую настройку в my.cnf при необходимости.
- Trusted hosts (доверенные хосты) — защита от Host header атак
Отредактируйте settings.php и добавьте ваш домен в trusted_host_patterns. Рекомендуется производить правку файла на хосте и затем копировать обратно в контейнер.
Копирование файла на хост:
$ docker cp drupal:/var/www/html/sites/default/settings.php settings.php
$ chmod +w settings.php
$ nano settings.phpНайдите и замените секцию:
#$settings['trusted_host_patterns'] = [
# '^www\.example\.com$',
#];На:
$settings['trusted_host_patterns'] = [
'^drupal\.example\.com$',
];Сделайте файл снова только для чтения и скопируйте в контейнер:
$ chmod -w settings.php
$ docker cp settings.php drupal:/var/www/html/sites/default- Права на файлы и безопасность
- Директория sites/default/files должна быть доступна для записи веб-процессом (PHP-FPM внутри контейнера).
- Не храните чувствительные данные в репозитории.
- Ограничьте доступ к .env и файлам конфигурации на хосте.
Шаг 9 — Резервное копирование
Резервные копии — обязательный элемент эксплуатации. Здесь показан пример бэкапа базы данных через mysqldump и сохранение SQL-файла на хосте.
Создаём папку для бэкапов и выполняем дамп:
$ cd ~/drupal
$ mkdir backup-data
$ docker compose exec mysql sh -c "exec mysqldump drupal -uroot -p" | tee backup-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Enter password: root_passwordФайл окажется в ~/drupal/backup-data.
Восстановление:
$ docker compose exec mysql sh -c "exec mysql -uroot -p" < backup-data/data_19-01-2023_13_36_58.sqlАвтоматизация резервного копирования (ежедневный cron)
Создайте скрипт в /etc/cron.daily:
$ sudo nano /etc/cron.daily/drupalbackup.shПример содержимого скрипта:
#!/bin/bash
cd /home/navjot/drupal/
/usr/bin/docker compose exec mysql sh -c "exec mysqldump drupal -uroot -p" | tee backup-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/nullСделайте его исполняемым:
$ sudo chmod +x /etc/cron.daily/drupalbackup.shРекомендации
- Копии базы и файлов храните вне сервера (например, в объектном хранилище S3, Backblaze B2 или на другом хосте).
- Шифруйте резервные копии и контролируйте доступ.
Шаг 10 — Обновление Drupal и компонентов
- Перед обновлением обязательно выполните резервную копию базы данных и файлов.
- Остановите контейнеры:
$ docker compose down- Обновите образы (пример для Drupal):
$ docker compose pull drupal:10-fpm-alpineЕсли нужен переход на другой мажорный релиз, проверьте релиз-ноуты Drupal и требования модулей.
- Включите изменения и перезапустите стек:
$ docker compose up -dСовет
- Тестируйте обновление на staging-окружении перед выводом в production. Для больших сайтов используйте blue/green или rolling обновления.
Частые ошибки и способы их устранения
- Certbot не смог подтвердить домен (HTTP-01 challenge).
- Проверьте, что DNS A/AAAA записи указывают на IP сервера.
- Убедитесь, что порт 80 публично доступен (проверить через curl http://yourdomain/.well-known/acme-challenge/).
- Убедитесь, что Nginx отдаёт папку /var/www/html и что в контейнере webroot содержит проверочный файл.
- Drupal не подключается к MySQL.
- Проверьте переменные в .env и соответствие имени БД, пользователя и пароля.
- Хост должен быть mysql (имя сервиса). Проверьте сеть internal.
- Убедитесь, что контейнер mysql запущен и слушает 3306 внутри сети Docker (docker compose ps).
- Права на файлы/директории (500 / 403 ошибки).
- Проверьте права на sites/default/files и права owner; в контейнере PHP-FPM процесс должен иметь возможность записи в эти директории.
- Низкая производительность.
- Включите кеширование на уровне Drupal (Render cache, Page cache).
- Используйте OPcache (обычно включён в образах PHP) и внешние кэши (Redis, Varnish) для больших проектов.
Контрольные списки и SOP
Контрольный список перед запуском в production
- DNS для домена настроен и проверен.
- Порты 80 и 443 открыты на уровне сети и OS.
- SSL сертификаты получены и корректно смонтированы в контейнер.
- Приватные ключи и .env защищены на хосте.
- Резервное копирование настроено и протестировано.
- Логи и метрики собираются (journald, syslog, Prometheus/ELK по желанию).
SOP: Быстрый откат к предыдущей версии (rollback)
- Остановить контейнеры:
$ docker compose down- Восстановить базу данных из последней рабочей резервной копии (см. Шаг 9).
- Вернуть предыдущий тег образа в docker-compose.yml (например, drupal:10-fpm-alpine@sha256:… или конкретную версию).
- Запустить стек заново:
$ docker compose up -d- Проверить работоспособность сайта и проверить логи webserver и drupal.
Тест-кейсы и критерии приёмки
Критерии приёмки
- Сайт доступен по HTTPS и валидный сертификат выдан Let’s Encrypt.
- Веб-инсталлятор Drupal завершил установку без ошибок.
- Drupal подключился к MySQL и создал таблицы.
- Файлы (uploads) доступны и корректно сохраняются в sites/default/files.
- Резервная копия базы создаётся и может быть восстановлена на тестовом инсталляторе.
Минимальные тест-кейсы
- Открыть https://drupal.example.com — получить HTTP 200 и рабочую страницу администратора.
- Попробовать создать запись/узел и проверить её отображение.
- Загрузить файл в медиа-библиотеку и проверить доступность файла.
- Выполнить mysqldump и убедиться, что файл SQL можно импортировать локально.
Когда этот подход с Docker не подойдёт
- Если у вас высокие требования к доступности и нагрузке: требуется кластерная база данных, репликация, балансировка нагрузки и отдельный CDN. Одного Docker Compose для этого недостаточно.
- Если организация требует управляемые сервисы (PaaS) или специализированный хостинг с поддержкой Drupal — рассмотрите облачные решения.
- Если необходимо тонко настраивать ядро ОС и оптимизировать сетевые стеки — возможно, контейнеры усложнят задачу.
Альтернативы
- Использовать готовые Managed Drupal хостинги (Platform.sh, Pantheon).
- Разворачивать Drupal на виртуальной машине без контейнеризации.
- Применять Kubernetes для масштабируемых архитектур.
Ментальные модели и рекомендации
- Изоляция: сервисы разделены по контейнерам — база, приложение, вебсервер, агент TLS. Это упрощает обновления и отладку.
- Идем сверху вниз: сначала сеть и порты (ufw, облачный firewall), затем Docker Engine, потом Compose, затем приложения и TLS.
- Минимум прав: используйте минимально необходимые права доступа к файлам и группам.
Быстрые шпаргалки (cheat sheet)
- Запустить стек:
$ docker compose up -d- Остановить стек:
$ docker compose down- Просмотреть логи контейнера:
$ docker compose logs -f webserver- Выполнить команду в контейнере:
$ docker compose exec drupal bash- Обновление образов и перезапуск:
$ docker compose pull
$ docker compose up -dDecision flowchart (Mermaid)
flowchart TD
A[Начало: DNS и сервер готовы?] -->|Да| B[Установить Docker]
B --> C[Создать docker-compose]
C --> D[Настроить Nginx и webroot]
D --> E[Запустить стек и получить staging-cert]
E --> F{staging OK?}
F -->|Да| G[Получить production-cert и включить 443]
F -->|Нет| H[Диагностика: DNS/управление портами]
G --> I[Запустить Drupal Installer]
I --> J[Настроить trusted hosts, бэкап]
J --> K[Мониторинг и обновления]Риски и рекомендации по их снижению
- Потеря доступа через SSH при неверных правилах ufw: проверьте правило для OpenSSH заранее.
- Истечение сертификата: организуйте автоматическое обновление (certbot renew) и мониторинг срока действия.
- Потеря данных: регулярные резервные копии и тесты восстановления.
- Уязвимости в контейнерах: своевременно обновляйте образы и применяйте security patches.
Социальная карточка (предпросмотр для соцсетей)
OG Title: Установка Drupal в Docker на Ubuntu 22.04
OG Description: Пошаговое руководство: Docker Compose, Nginx, MySQL и Certbot для безопасного развёртывания Drupal 10.
(Поле og_image оставлено пустым — используйте логотип сайта или скриншот.)
Краткое объявление (100–200 слов)
Это пошаговое руководство по развёртыванию Drupal 10 на Ubuntu 22.04 с помощью Docker Compose. Вы узнаете, как настроить MySQL, PHP-FPM, Nginx и Certbot для HTTPS, как правильно настроить права и параметры MySQL для производительности, как настроить автоматическое резервное копирование и как безопасно обновлять образы. Руководство подходит для небольших и средних проектов и содержит практичные чек-листы для запуска в production.
Заключение
В этом руководстве показано, как быстро и воспроизводимо развернуть современный стек для Drupal с Docker Compose. Главные шаги — подготовка сервера, установка Docker, создание docker-compose.yml, настройка Nginx и получение SSL сертификата, запуск веб-инсталлятора и включение резервного копирования. Для production-окружений дополнительно рассмотрите мониторинг, автоматическое обновление и масштабирование сервисов.
Ключевые действия сейчас
- Подготовьте .env с безопасными паролями.
- Настройте DNS и откройте порты 80/443.
- Следуйте шагам из этого руководства и протестируйте весь процесс на staging перед production.
Если у вас возникли вопросы по конкретным шагам (docker-compose.yml, Nginx-конфиги, Certificate renewal), опишите ваш сценарий — я помогу с диагностикой и предложу конфигурацию.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента