Обзор развертывания Joomla на сервере¶
Предварительные требования и базовые условия¶
-
Операционная система: Ubuntu (следует из задач установки)
-
Права доступа: Для управления Docker и системными службами требуются права root или sudo.
-
Конфигурация домена: Приложение настроено на использование зоны
hostkey.inс определенным префиксом. -
Сетевые настройки: Движок Docker (Docker Engine) должен быть установлен и запущен.
-
Порты:
-
Порт
8080: Внутренний порт службы Joomla. -
Порт
443: Внешний доступ через HTTPS. -
Порт
3306: Внутренний порт службы MySQL (привязан к хосту).
-
FQDN финальной панели¶
Приложение доступно по следующему полному доменному имени (Fully Qualified Domain Name, FQDN), где SERVER_ID заменяется на уникальный идентификатор сервера:
joomla
Структура файлов и директорий¶
Для развертывания используются определенные директории для конфигурации, хранения данных и управления прокси:
-
Директория конфигурации Nginx:
/root/nginx- Содержит файл Docker Compose для стека прокси.
-
Пользовательская конфигурация Nginx:
/data/nginx/user_conf.d- Здесь хранятся файлы конфигурации конкретных сайтов, например
joomla<SERVER_ID>.hostkey.in.conf.
- Здесь хранятся файлы конфигурации конкретных сайтов, например
-
Секреты Nginx: Монтируются из внешнего тома
nginx_secrets, расположенного в/etc/letsencryptвнутри контейнера. -
Тома данных (Data Volumes):
-
Данные MySQL хранятся в именованном томе Docker
mysql_data, отображаемом в/var/lib/mysqlвнутри контейнера. -
Данные Joomla хранятся в именованном томе Docker
joomla_data, отображаемом в/var/www/htmlвнутри контейнера.
-
Процесс установки приложения¶
Приложение развертывается с использованием контейнеров Docker. Используются следующие образы и версии:
-
Образ Joomla:
joomla:latest -
Образ MySQL:
mysql:8.0
Развертывание включает запуск двух основных контейнеров:
-
Контейнер MySQL:
-
Имя:
joomla_db -
База данных:
joomla -
Пользователь:
joomla_user -
Контейнер настроен с политикой перезапуска
restart_policy—always.
-
-
Контейнер Joomla:
-
Имя:
joomla -
Связан с контейнером MySQL как
mysql. -
Контейнер настроен с политикой перезапуска
restart_policy—always. -
Отображение портов открывает внутренний порт
80на порт хоста8080.
-
Контейнеры Docker и их развертывание¶
Стек приложения состоит из трех служб Docker, управляемых через специальные конфигурации.
Контейнер базы данных:
-
Имя:
joomla_db -
Образ:
mysql:8.0 -
Переменные окружения:
-
MYSQL_ROOT_PASSWORD: Задается как пароль SSH хоста. -
MYSQL_DATABASE:joomla -
MYSQL_USER:joomla_user -
MYSQL_PASSWORD: Задается как пароль SSH хоста.
-
-
Тома:
mysql_dataмонтируется в/var/lib/mysql. -
Порты: Порт хоста
3306отображается на порт контейнера3306.
Контейнер приложения:
-
Имя:
joomla -
Образ:
joomla:latest -
Переменные окружения:
-
JOOMLA_DB_HOST:joomla_db -
JOOMLA_DB_NAME:joomla -
JOOMLA_DB_USER:joomla_user -
JOOMLA_DB_PASSWORD: Задается как пароль SSH хоста.
-
-
Тома:
joomla_dataмонтируется в/var/www/html. -
Порты: Порт хоста
8080отображается на порт контейнера80. -
Связи (Links): Подключен к
joomla_dbс псевдонимомmysql.
Стек контейнеров прокси: Nginx-прокси с поддержкой Certbot управляется через файл Docker Compose, расположенный по адресу /root/nginx/compose.yml.
| Параметр | Значение |
|---|---|
| Образ службы | jonasal/nginx-certbot:latest |
| Политика перезапуска | unless-stopped |
| Режим сети | host |
| Email для Certbot | hkadm@hostkey.com |
| Файл окружения | /data/nginx/nginx-certbot.env |
| Том секретов | nginx_secrets, отображается в /etc/letsencrypt |
| Том пользовательской конфигурации | /data/nginx/user_conf.d, отображается в /etc/nginx/user_conf.d |
Прокси-серверы¶
Nginx развернут как обратный прокси с автоматическим управлением SSL-сертификатами через Certbot.
-
Цель прокси: Прокси перенаправляет трафик во внутреннюю службу Joomla по адресу
http://127.0.0.1:8080. -
Файл конфигурации: Конфигурация для конкретного сайта находится в
/data/nginx/user_conf.d/joomla<SERVER_ID>.hostkey.in.conf. -
Маршрутизация:
-
Входящие запросы к FQDN на порт
443маршрутизируются на контейнер Nginx. -
Контейнер Nginx перенаправляет запросы в контейнер Joomla на порт
8080. -
Терминация SSL обрабатывается контейнером Nginx с использованием сертификатов, хранящихся в томе
nginx_secrets.
-
Базы данных¶
-
Метод подключения: Контейнер Joomla подключается к базе данных через внутреннюю сеть Docker, используя имя службы
joomla_db(ссылается какmysqlчерез связь контейнеров). -
Место хранения: Персистентность (сохранение) базы данных обеспечивается именованным томом Docker
mysql_data, который отображается в/var/lib/mysqlвнутри контейнераjoomla_db. -
Настройки подключения:
-
Хост:
joomla_db -
База данных:
joomla -
Пользователь:
joomla_user -
Пароль: Совпадает с паролем SSH хоста.
-
Настройки разрешений¶
-
Директория Nginx:
/root/nginxпринадлежитroot:rootс правами0755. -
Файл Compose:
/root/nginx/compose.ymlпринадлежитroot:rootс правами0644. -
Владение контейнерами:
-
Тома контейнера Nginx монтируются из корневых или данных директорий хоста.
-
Внутренние права доступа к файлам внутри контейнеров Joomla и MySQL управляются их соответствующими конфигурациями по умолчанию.
-
Доступные порты для подключения¶
| Порт | Служба | Описание |
|---|---|---|
443 | Nginx | Безопасный доступ HTTPS к приложению Joomla. |
8080 | Joomla | Внутренний порт службы (недоступен напрямую из внешних сетей без прокси). |
3306 | MySQL | Внутренний порт базы данных (привязан к хосту для коммуникации контейнеров). |
Запуск, остановка и обновление¶
Контейнеры Joomla и MySQL: Эти контейнеры управляются отдельно с помощью команд командной строки Docker (CLI) на хосте.
-
Запуск:
docker start joomlaиdocker start joomla_db -
Остановка:
docker stop joomlaиdocker stop joomla_db -
Перезапуск:
docker restart joomlaиdocker restart joomla_db -
Обновление образов:
docker pull joomla:latestиdocker pull mysql:8.0
Стек прокси (Nginx/Certbot): Стек прокси управляется через Docker Compose в директории /root/nginx.
-
Запуск/Обновление:
docker compose up -d(выполняется в/root/nginx) -
Остановка:
docker compose down(выполняется в/root/nginx)