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

Обзор развертывания 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 и их запуск

В системе развернуты два типа контейнерных решений:

  1. Контейнер LEMP-стека:

  2. Имя контейнера: lemp-stack.

  3. Образ: adhocore/lemp:8.3.

  4. Сеть: lemp-net.

  5. Маппинг портов:

    • 88:80 (локальный порт 88 на порт 80 контейнера).

    • 3306:3306 (локальный порт 3306 на порт 3306 контейнера).

    • 5432:5432 (локальный порт 5432 на порт 5432 контейнера).

  6. Монтированные тома:

    • /root/data:/var/lib/mysql

    • /root/webroot:/var/www/html

  7. Переменная окружения MYSQL_ROOT_PASSWORD устанавливается динамически.

  8. Контейнер Nginx с Certbot:

  9. Запускается через docker compose на основе файла конфигурации compose.yml.

  10. Образ: jonasal/nginx-certbot:latest.

  11. Режим сети: host.

  12. Политика перезапуска: unless-stopped.

  13. Монтированные тома:

    • nginx_secrets:/etc/letsencrypt (внешний том для сертификатов).

    • /data/nginx/user_conf.d:/etc/nginx/user_conf.d.

  14. Переменная окружения 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.

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