Обзор развертывания WordPress на сервере¶
Предпосылки и предварительные требования¶
Для корректной работы приложения на сервере должны быть выполнены следующие условия:
- Операционная система с поддержкой Docker и Docker Compose.
- Наличие прав суперпользователя (root) для создания директорий и запуска контейнеров.
- Доступ к домену в зоне
hostkey.inдля настройки виртуального хостинга. - Открытые порты 80 и 443 для работы веб-сервера и получения SSL-сертификатов.
- Сетевая доступность для получения образов контейнеров из реестра
docker.io.
Структура файлов и каталогов¶
Все файлы конфигурации, данные и сертификаты размещаются в следующих директориях:
/data— корневая директория для хранения данных приложения./data/nginx— директория для конфигураций Nginx и переменных окружения./data/nginx/user_conf.d— каталог с конфигурационными файлами виртуальных хостов Nginx./data/wordpress— точка монтирования для файлов самого приложения WordPress./root/wordpress— рабочая директория, где хранится файлcompose.ymlдля управления контейнерами.
Контейнеры Docker и их запуск¶
Приложение развертывается с использованием Docker Compose. Конфигурация описана в файле /root/wordpress/compose.yml. Система состоит из трех сервисов:
- mariadb
- Образ:
docker.io/bitnami/mariadb:latest. - Хранение данных: именованный том
mariadb_data, монтируемый в/bitnami/mariadb. - Переменные окружения:
MARIADB_USER=wordpressMARIADB_DATABASE=wordpressMARIADB_PASSWORDиMARIADB_ROOT_PASSWORDзадаются динамически.
-
Политика перезапуска:
unless-stopped. -
wordpress
- Образ:
docker.io/wordpress:php8.2-fpm. - Порт:
127.0.0.1:9000(локальный интерфейс, используется для связи с Nginx). - Точки монтирования:
/data/wordpressмонтируется в/var/www/htmlвнутри контейнера.
- Зависимости: запускается после сервиса
mariadb. - Переменные окружения:
MYSQL_ROOT_PASSWORDWORDPRESS_DB_PASSWORDWORDPRESS_DB_HOST=mariadbWORDPRESS_DB_USER=wordpressWORDPRESS_DB_NAME=wordpress
-
Политика перезапуска:
unless-stopped. -
nginx
- Образ:
jonasal/nginx-certbot:latest. - Режим сети:
host(использует сетевой стек хоста). - Зависимости: запускается после сервиса
wordpress. - Переменные окружения:
CERTBOT_EMAIL=hkadm@hostkey.com.
- Файл переменных окружения:
/data/nginx/nginx-certbot.env. - Точки монтирования:
- Именованный том
nginx_secretsв/etc/letsencryptдля хранения сертификатов. /data/nginx/user_conf.dв/etc/nginx/user_conf.dдля конфигураций./data/wordpressв/var/www/htmlдля доступа к файлам сайта.
- Именованный том
- Политика перезапуска:
unless-stopped.
Базы данных¶
База данных MariaDB работает внутри контейнера. Данные сохраняются в именованном томе Docker mariadb_data. Подключение к базе данных осуществляется через внутреннюю сеть Docker. Сервис WordPress обращается к базе данных по имени хоста mariadb. Имя пользователя базы данных — wordpress, имя базы данных — wordpress. Пароли для доступа задаются через переменные окружения в файле compose.yml.
Прокси серверы¶
В качестве веб-сервера и прокси используется контейнер Nginx с поддержкой Certbot.
- Доменное имя: Конфигурация настроена для домена вида
wp<server_id>.hostkey.in, где<server_id>— идентификатор сервера. - Порты:
- Порт 80 используется для обработки HTTP-запросов и автоматического получения SSL-сертификатов через ACME challenge.
- Порт 443 используется для HTTPS-соединений с поддержкой HTTP/2.
- SSL-сертификаты:
- Путь к сертификату:
/etc/letsencrypt/live/wp<server_id>.hostkey.in/fullchain.pem. - Путь к ключу:
/etc/letsencrypt/live/wp<server_id>.hostkey.in/privkey.pem. - Конфигурация:
- Файл конфигурации размещается в
/data/nginx/user_conf.d/wp<server_id>.hostkey.in.conf. - Корневая директория для веб-контента:
/var/www/html. - Обработчик PHP: запросы с расширением
.phpпередаются на127.0.0.1:9000через FastCGI. - Специальная директива
locationдля/.well-known/acme-challenge/указывает на/var/www/certbotдля валидации сертификатов.
Права доступа и безопасность¶
- Директории
/data,/data/nginx,/data/nginx/user_conf.dи/root/wordpressсоздаются с владельцемrootи группойroot. - Права доступа на директории установлены как
0755(чтение и выполнение для всех, запись для владельца). - Файлы конфигурации Nginx и переменных окружения имеют права
0644. - Файл
compose.ymlимеет права0644. - Порт 9000, используемый для связи Nginx и PHP-FPM, привязан только к локальному интерфейсу
127.0.0.1, что ограничивает внешний доступ к нему.
Запуск, остановка и обновление¶
Управление контейнерами осуществляется через утилиту docker compose в директории /root/wordpress.
-
Запуск: Для запуска всех сервисов в фоновом режиме используется команда:
Команда выполняется из директории/root/wordpress. -
Остановка: Для остановки всех сервисов используется команда:
-
Обновление: Для применения изменений конфигурации или обновления образов контейнеров используется последовательность команд: