Обзор развертывания 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. Процесс включает следующие этапы:
- Установка Docker на сервере.
- Загрузка образов контейнеров:
- Образ базы данных MySQL.
- Образ веб-приложения Joomla.
- Запуск контейнера базы данных MySQL с настройкой параметров подключения.
- Запуск контейнера Joomla с привязкой к базе данных и порту
8080. - Настройка и запуск прокси-сервера 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.
-
Запуск прокси-сервера:
Команда выполняется в директории/root/nginx. -
Остановка и удаление контейнеров прокси:
-
Управление контейнерами базы данных и приложения:
- Остановка:
docker stop <имя_контейнера> - Запуск:
docker start <имя_контейнера> -
Перезапуск:
docker restart <имя_контейнера> -
Обновление образов:
- Для базы данных:
docker pull <mysql_image> - Для приложения:
docker pull <joomla_image> - Для прокси:
docker pull jonasal/nginx-certbot:latest
После обновления образов контейнеры необходимо перезапустить для применения новых версий.