Обзор развертывания LEMP-стека на сервере¶
Предварительные требования¶
Для успешного развертывания приложения необходимо наличие сервера с операционной системой Ubuntu. Пользователь должен обладать правами суперпользователя (root) или доступом через sudo для выполнения команд установки и управления контейнерами.
Требуется наличие доступа к интернету для загрузки образов Docker. Необходимо убедиться, что следующие порты доступны для внешнего подключения:
-
Порт
88для веб-сервера (HTTP). -
Порт
3306для базы данных MySQL. -
Порт
5432для базы данных PostgreSQL.
Структура файлов и каталогов¶
Приложение использует следующую структуру каталогов на хост-системе:
-
/root/data— каталог для хранения данных баз данных MySQL. -
/root/webroot— каталог для размещения веб-контента (корневая директория веб-сервера). -
/data/nginx— каталог для конфигурации и секретов Nginx (используется в режиме Docker Compose). -
/data/nginx/user_conf.d— подкаталог для пользовательских конфигурационных файлов Nginx. -
/data/nginx/nginx-certbot.env— файл переменных окружения для настройки Certbot.
Процесс установки приложения¶
Установка выполняется через Docker. Сначала на сервере устанавливается демон Docker. Затем происходит загрузка образа adhocore/lemp версии 8.3.
Создается выделенная сеть Docker с именем lemp-net для изоляции контейнеров.
Запускается контейнер lemp-stack с использованием образа adhocore/lemp:8.3. Контейнер настроен на автоматический перезапуск при сбоях.
Контейнеры Docker и их запуск¶
В системе развернуты два типа контейнерных решений:
-
Контейнер LEMP-стека:
-
Имя контейнера:
lemp-stack. -
Образ:
adhocore/lemp:8.3. -
Сеть:
lemp-net. -
Маппинг портов:
-
88:80(локальный порт 88 на порт 80 контейнера). -
3306:3306(локальный порт 3306 на порт 3306 контейнера). -
5432:5432(локальный порт 5432 на порт 5432 контейнера).
-
-
Монтированные тома:
-
/root/data:/var/lib/mysql -
/root/webroot:/var/www/html
-
-
Переменная окружения
MYSQL_ROOT_PASSWORDустанавливается динамически. -
Контейнер Nginx с Certbot:
-
Запускается через
docker composeна основе файла конфигурацииcompose.yml. -
Образ:
jonasal/nginx-certbot:latest. -
Режим сети:
host. -
Политика перезапуска:
unless-stopped. -
Монтированные тома:
-
nginx_secrets:/etc/letsencrypt(внешний том для сертификатов). -
/data/nginx/user_conf.d:/etc/nginx/user_conf.d.
-
-
Переменная окружения
CERTBOT_EMAILустановлена наhkadm@hostkey.com.
Базы данных¶
Внутри контейнера lemp-stack работают службы баз данных:
-
MySQL: данные хранятся в томе, смонтированном в
/root/data. Доступ к базе осуществляется через порт3306. Пароль root-пользователя передается через переменную окружения при запуске контейнера. -
PostgreSQL: доступен через порт
5432.
Прокси серверы¶
Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx на основе образа jonasal/nginx-certbot.
Конфигурация включает:
-
Использование внешнего тома
nginx_secretsдля хранения сертификатов Let's Encrypt. -
Подключение пользовательских конфигурационных файлов из директории
/data/nginx/user_conf.d. -
Настройка email для уведомлений от Certbot через переменную
CERTBOT_EMAIL.
Настройки прав¶
Каталоги /root/data и /root/webroot создаются с правами доступа 0755 и владельцем root. Это обеспечивает возможность чтения и выполнения для всех пользователей, но запись и изменение разрешены только владельцу.
Запуск, остановка и обновление¶
Управление контейнером LEMP-стека осуществляется через стандартные команды Docker:
-
Запуск и остановка контейнера
lemp-stackвыполняются командамиdocker start lemp-stackиdocker stop lemp-stack. -
Обновление образа выполняется командой
docker pull adhocore/lemp:8.3, после чего контейнер перезапускается.
Управление сервисом Nginx с Certbot осуществляется через Docker Compose:
-
Запуск:
docker compose up -d. -
Остановка:
docker compose down. -
Обновление:
docker compose pullиdocker compose up -d.