Перейти к содержанию

Обзор развертывания 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. Процесс включает следующие этапы:

  1. Установка и настройка Docker на сервере.
  2. Создание изолированной сети Docker с именем prefix-net.
  3. Запуск контейнера базы данных MariaDB.
  4. Запуск контейнера веб-приложения Drupal.
  5. Настройка и запуск прокси-сервера 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.

  • Запуск прокси-сервера:
    cd /root/nginx
    docker compose up -d
    
  • Остановка прокси-сервера:
    cd /root/nginx
    docker compose down
    
  • Управление контейнерами приложения и базы данных:
  • Запуск: docker start <имя_контейнера>
  • Остановка: docker stop <имя_контейнера>
  • Перезапуск: docker restart <имя_контейнера>
  • Обновление образов:
  • Скачивание новых версий образов: docker pull <имя_образа>
  • Пересоздание контейнеров с новыми образами: docker-compose up -d (для прокси) или ручное удаление и создание контейнеров для приложения и БД.
question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×