Обзор развертывания Drupal на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие следующих компонентов и условий на сервере:
- Операционная система Ubuntu.
- Установленный и работающий демон Docker.
- Права доступа пользователя
rootдля управления контейнерами и файловой системой. - Свободный порт
8080для внешнего доступа к веб-интерфейсу. - Наличие сети Docker с именем, соответствующим префиксу проекта (например,
prefix-net).
Структура файлов и каталогов¶
Конфигурация и данные приложения организованы следующим образом:
- Каталог
/root/nginxсодержит файлы конфигурации для прокси-сервера и скрипты оркестрации. - Файл
/root/nginx/compose.ymlявляется основным манифестом для запуска контейнеров прокси. - Каталог
/data/nginx/user_conf.dиспользуется для хранения пользовательских конфигурационных файлов Nginx. - Каталог
/data/nginxсодержит переменные окружения для сервиса Certbot в файлеnginx-certbot.env. - Том
nginx_secrets(внешний) используется для хранения SSL-сертификатов Let's Encrypt в директории/etc/letsencryptвнутри контейнера.
Процесс установки приложения¶
Развертывание осуществляется через запуск контейнеров Docker. Процесс включает следующие этапы:
- Установка и настройка Docker на сервере.
- Создание изолированной сети Docker с именем
prefix-net. - Запуск контейнера базы данных MariaDB.
- Запуск контейнера веб-приложения Drupal.
- Настройка и запуск прокси-сервера Nginx с поддержкой Certbot через
docker compose.
Контейнеры Docker и их запуск¶
Приложение состоит из трех основных контейнеров, работающих в одной сети:
- Контейнер базы данных:
- Имя контейнера:
db_container_name(определяется переменной окружения). - Образ:
db_image(версия MariaDB). - Параметры запуска:
- Пароль суперпользователя:
MYSQL_ROOT_PASSWORD. - Имя базы данных:
MYSQL_DATABASE. - Пользователь приложения:
MYSQL_USER. - Пароль пользователя:
MYSQL_PASSWORD.
- Пароль суперпользователя:
- Политика перезапуска:
always. -
Сеть:
prefix-net. -
Контейнер веб-приложения:
- Имя контейнера:
drupal_container_name. - Образ:
drupal_image(версия Drupal). - Порт:
8080на хосте маппится на порт80внутри контейнера. - Параметры подключения к базе данных:
- Хост:
DRUPAL_DB_HOST(указывает на имя контейнера базы данных). - Имя базы:
DRUPAL_DB_NAME. - Пользователь:
DRUPAL_DB_USER. - Пароль:
DRUPAL_DB_PASSWORD. - Порт:
3306.
- Хост:
- Политика перезапуска:
always. -
Сеть:
prefix-net. -
Контейнер прокси-сервера:
- Запускается через
docker composeиз каталога/root/nginx. - Образ:
jonasal/nginx-certbot:latest. - Политика перезапуска:
unless-stopped. - Режим сети:
host. - Переменная окружения для email:
CERTBOT_EMAIL=hkadm@hostkey.com. - Файл переменных окружения:
/data/nginx/nginx-certbot.env. - Подключенные тома:
nginx_secretsмонтируется в/etc/letsencrypt./data/nginx/user_conf.dмонтируется в/etc/nginx/user_conf.d.
Базы данных¶
База данных развернута в отдельном контейнере MariaDB.
- Тип базы данных: MariaDB.
- Хранение данных: внутри контейнера (используется стандартный том Docker для образа).
- Подключение: Веб-приложение подключается к базе данных по внутреннему сетевому имени контейнера базы данных.
- Настройки безопасности: Пароли и имена пользователей передаются через переменные окружения при запуске контейнера.
Прокси серверы¶
Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx с Certbot.
- Образ:
jonasal/nginx-certbot:latest. - Домен и сертификаты: Сертификаты Let's Encrypt хранятся в томе
nginx_secrets. - Конфигурация: Пользовательские настройки размещаются в каталоге
/data/nginx/user_conf.dна хосте и монтируются в контейнер. - Email для уведомлений:
hkadm@hostkey.com. - Запуск: Осуществляется командой
docker compose up -dиз директории/root/nginx.
Права доступа и безопасность¶
- Каталог
/root/nginxпринадлежит пользователюrootи группеrootс правами доступа0755. - Файл конфигурации
/root/nginx/compose.ymlимеет права доступа0644. - Доступ к контейнерам осуществляется через Docker API.
- Веб-интерфейс доступен только через порт
8080на хосте. - Внутренняя сеть
prefix-netизолирует контейнеры приложения от внешнего мира, позволяя им общаться только между собой.
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker и Docker Compose.
- Запуск прокси-сервера:
- Остановка прокси-сервера:
- Управление контейнерами приложения и базы данных:
- Запуск:
docker start <имя_контейнера> - Остановка:
docker stop <имя_контейнера> - Перезапуск:
docker restart <имя_контейнера> - Обновление образов:
- Скачивание новых версий образов:
docker pull <имя_образа> - Пересоздание контейнеров с новыми образами:
docker-compose up -d(для прокси) или ручное удаление и создание контейнеров для приложения и БД.