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

Обзор развертывания Joomla на сервере

Предпосылки и предварительные требования

Для корректной работы приложения на сервере должны быть выполнены следующие условия:

  • Операционная система Ubuntu.
  • Наличие прав суперпользователя (root) для управления контейнерами и файловой системой.
  • Установленный и работающий демон Docker.
  • Открытые порты для внешнего доступа:
  • Порт 3306 для подключения к базе данных MySQL.
  • Порт 8080 для веб-интерфейса Joomla (доступ через прокси).
  • Наличие доменного имени для настройки SSL-сертификатов через Certbot.

Структура файлов и каталогов

Конфигурация и данные приложения организованы в следующих директориях:

  • /root/nginx — каталог для запуска контейнера прокси-сервера Nginx и Certbot.
  • /root/nginx/compose.yml — файл конфигурации Docker Compose для прокси.
  • /data/nginx — хранилище конфигураций и переменных окружения для Nginx.
  • /data/nginx/nginx-certbot.env — файл переменных окружения для настройки Certbot.
  • /data/nginx/user_conf.d — каталог с пользовательскими конфигурациями виртуальных хостов.
    • /data/nginx/user_conf.d/<prefix><server_id>.hostkey.in.conf — файл конфигурации конкретного домена с настройками проксирования.
  • /var/lib/mysql — точка монтирования для данных базы данных MySQL (внутри контейнера).
  • /var/www/html — точка монтирования для файлов веб-приложения Joomla (внутри контейнера).

Процесс установки приложения

Развертывание приложения осуществляется через запуск контейнеров Docker. Процесс включает следующие этапы:

  1. Установка Docker на сервере.
  2. Загрузка образов контейнеров:
  3. Образ базы данных MySQL.
  4. Образ веб-приложения Joomla.
  5. Запуск контейнера базы данных MySQL с настройкой параметров подключения.
  6. Запуск контейнера Joomla с привязкой к базе данных и порту 8080.
  7. Настройка и запуск прокси-сервера Nginx с поддержкой SSL через Certbot.

Контейнеры Docker и их запуск

Приложение состоит из трех основных контейнеров, управляемых через Docker.

Контейнер базы данных MySQL

Контейнер запускается с именем, указанным в переменной mysql_container_name. Используются следующие параметры:

  • Образ: mysql_image (версия определяется в конфигурации).
  • Политика перезапуска: always.
  • Переменные окружения:
  • MYSQL_ROOT_PASSWORD — пароль суперпользователя.
  • MYSQL_DATABASE — имя создаваемой базы данных.
  • MYSQL_USER — имя пользователя приложения.
  • MYSQL_PASSWORD — пароль пользователя приложения.
  • Порты: 3306:3306.
  • Тома: mysql_data монтируется в /var/lib/mysql.

Контейнер веб-приложения Joomla

Контейнер запускается с именем joomla_container_name. Параметры запуска:

  • Образ: joomla_image.
  • Политика перезапуска: always.
  • Переменные окружения:
  • JOOMLA_DB_HOST — имя контейнера MySQL.
  • JOOMLA_DB_NAME — имя базы данных.
  • JOOMLA_DB_USER — пользователь базы данных.
  • JOOMLA_DB_PASSWORD — пароль пользователя.
  • Порты: 8080:80 (порт 8080 на хосте соответствует порту 80 внутри контейнера).
  • Тома: joomla_data монтируется в /var/www/html.
  • Связи: контейнер связан с MySQL через псевдоним mysql.

Контейнер прокси-сервера Nginx

Контейнер запускается через Docker Compose в директории /root/nginx.

  • Образ: jonasal/nginx-certbot:latest.
  • Политика перезапуска: unless-stopped.
  • Режим сети: host.
  • Переменные окружения:
  • CERTBOT_EMAIL — адрес электронной почты для уведомлений от Let's Encrypt.
  • Тома:
  • nginx_secrets монтируется в /etc/letsencrypt для хранения сертификатов.
  • /data/nginx/user_conf.d монтируется в /etc/nginx/user_conf.d для загрузки конфигураций хостов.

Прокси серверы

Для обработки входящего трафика и настройки SSL используется контейнер Nginx с Certbot.

  • Конфигурация хостов хранится в файле /data/nginx/user_conf.d/<prefix><server_id>.hostkey.in.conf.
  • В блоке location / настроена директива proxy_pass, перенаправляющая запросы на http://127.0.0.1:8080.
  • Сертификаты SSL автоматически генерируются и обновляются через Certbot, используя доменное имя, указанное в конфигурации.
  • Запуск прокси осуществляется командой docker compose up -d в директории /root/nginx.

Базы данных

База данных MySQL работает в изолированном контейнере.

  • Подключение к базе осуществляется из контейнера Joomla по внутреннему имени контейнера mysql.
  • Данные базы данных сохраняются в томе mysql_data, который монтируется в /var/lib/mysql внутри контейнера.
  • Параметры подключения (имя базы, пользователь, пароль) передаются в контейнер Joomla через переменные окружения.

Права доступа и безопасность

  • Каталог /root/nginx принадлежит пользователю root с правами 0755.
  • Файл конфигурации /root/nginx/compose.yml имеет права 0644 и принадлежит root.
  • Доступ к порту 3306 базы данных открыт на уровне хоста, что требует настройки брандмауэра для ограничения доступа только с доверенных IP-адресов.
  • Веб-интерфейс доступен только через прокси-сервер Nginx, который обрабатывает SSL-шифрование.

Запуск, остановка и обновление

Управление сервисами осуществляется через команды Docker и Docker Compose.

  • Запуск прокси-сервера:

    docker compose up -d
    
    Команда выполняется в директории /root/nginx.

  • Остановка и удаление контейнеров прокси:

    docker compose down
    

  • Управление контейнерами базы данных и приложения:

  • Остановка: docker stop <имя_контейнера>
  • Запуск: docker start <имя_контейнера>
  • Перезапуск: docker restart <имя_контейнера>

  • Обновление образов:

  • Для базы данных: docker pull <mysql_image>
  • Для приложения: docker pull <joomla_image>
  • Для прокси: docker pull jonasal/nginx-certbot:latest

После обновления образов контейнеры необходимо перезапустить для применения новых версий.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×