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

Обзор развертывания LinuxPatch на сервере

Предпосылки и предварительные требования

Для успешного развертывания приложения LinuxPatch на сервере необходимо наличие следующих компонентов и условий:

  • Операционная система Linux с установленным Docker и Docker Compose.
  • Права доступа пользователя root или права sudo для выполнения команд установки и управления контейнерами.
  • Свободные порты 80 и 443 для работы веб-сервера и SSL-шифрования.
  • Доступ к интернету для загрузки образов контейнеров и репозитория кода.
  • Наличие доменного имени или хоста, который будет использоваться для доступа к приложению.

Структура файлов и каталогов

Приложение размещается в корневом каталоге /root/linuxpatch. Внутри этой директории формируется следующая структура:

  • /root/linuxpatch — основной каталог приложения, содержащий скрипты конфигурации и файлы Docker Compose.
  • /root/linuxpatch/data — каталог для хранения данных приложения, включая конфигурационный файл .env.
  • /root/linuxpatch/data/certs — подкаталог для хранения SSL-сертификатов.
  • /root/linuxpatch/data/logs — подкаталог для хранения файлов логов.
  • /root/linuxpatch/docker-compose.yml — файл конфигурации оркестрации контейнеров.
  • /root/linuxpatch/configure.sh — скрипт генерации конфигурации и запуска сервисов.
  • /data/nginx/user_conf.d — каталог для пользовательских конфигураций Nginx (монтируется в контейнер прокси).

Процесс установки приложения

Установка приложения выполняется путем клонирования репозитория и запуска скрипта конфигурации. Процесс включает следующие шаги:

  1. Создание директории /root/linuxpatch.
  2. Клонирование репозитория https://github.com/linuxpatch/self-hosted.git в указанную директорию.
  3. Создание внешнего тома Docker nginx_secrets для хранения секретов сертификатов.
  4. Генерация файла docker-compose.yml и скрипта configure.sh с использованием шаблонов.
  5. Запуск скрипта configure.sh, который:
  6. Создает необходимые директории data/certs и data/logs.
  7. Генерирует случайные учетные данные (пароли, секреты сессий) и записывает их в файл data/.env.
  8. Обновляет файл docker-compose.yml переменными окружения.
  9. Запускает контейнеры в фоновом режиме.

Контейнеры Docker и их запуск

Приложение состоит из четырех основных контейнеров, управляемых через Docker Compose:

  • nginx:
  • Образ: jonasal/nginx-certbot:latest.
  • Назначение: Прокси-сервер с поддержкой автоматического получения SSL-сертификатов через Certbot.
  • Порты: 80 и 443 открыты на хосте.
  • Тома: Монтирует nginx_secrets в /etc/letsencrypt и /data/nginx/user_conf.d в /etc/nginx/user_conf.d.
  • Зависимости: Запускается после linuxpatch-app.

  • linuxpatch-app:

  • Образ: linuxpatch/appliance:latest.
  • Назначение: Основной веб-сервер приложения.
  • Команда запуска: ./web.
  • Переменные окружения: Настраиваются динамически через файл .env (база данных, Redis, SMTP, администратор).
  • Тома: Монтирует локальную директорию ./data в /app/data внутри контейнера.
  • Зависимости: Ожидает готовности linuxpatch-db и linuxpatch-redis.

  • linuxpatch-db:

  • Образ: percona/percona-server:8.0.
  • Назначение: Реляционная база данных MySQL.
  • Команда: mysqld.
  • Тома: Монтирует том linuxpatch-mysql-data в /var/lib/mysql.
  • Проверка здоровья: Выполняет команду mysqladmin ping.

  • linuxpatch-redis:

  • Образ: redis:6.
  • Назначение: Кэш и брокер сообщений.
  • Команда: redis-server.
  • Тома: Монтирует том linuxpatch-redis-data в /data.
  • Проверка здоровья: Выполняет команду redis-cli ping.

Все контейнеры подключены к сети linuxpatch-app-network с драйвером bridge.

Базы данных

Приложение использует две системы хранения данных, развернутые в виде контейнеров:

  1. MySQL (Percona Server 8.0):
  2. Хранение данных осуществляется в томе linuxpatch-mysql-data.
  3. Имя базы данных: linuxpatch.
  4. Пользователь базы данных генерируется автоматически (префикс lpuser_).
  5. Пароль генерируется автоматически (32 символа).
  6. Подключение приложения происходит через переменные DB_HOST=linuxpatch-db, DB_PORT=3306.

  7. Redis:

  8. Хранение данных осуществляется в томе linuxpatch-redis-data.
  9. Используется база данных с индексом 0.
  10. Подключение приложения происходит через переменные REDIS_HOST=linuxpatch-redis, REDIS_PORT=6379.

Конфигурация подключения к базам данных хранится в файле /root/linuxpatch/data/.env.

Прокси серверы

Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx:

  • Образ: jonasal/nginx-certbot:latest.
  • Домен: Настраивается через переменную SERVER_NAME и TLS_DOMAIN в файле .env (по умолчанию используется имя хоста).
  • SSL: Поддерживается автоматическое получение и обновление сертификатов через Certbot.
  • Конфигурация:
  • Файл конфигурации Nginx для приложения находится в /data/nginx/user_conf.d.
  • В конфигурации прокси-запрос перенаправляется на http://linuxpatch-app.
  • Порты:
  • 80 — HTTP.
  • 443 — HTTPS.

Настройки прав

Права доступа к файлам и директориям устанавливаются следующим образом:

  • Директория /root/linuxpatch создается с правами 0644, владелец root, группа root.
  • Скрипт configure.sh имеет права на выполнение 0744.
  • Директории data/certs и data/logs создаются с правами 755.
  • Файл docker-compose.yml имеет права 0644.
  • Контейнеры запускаются от имени пользователя, имеющего доступ к Docker-деamon (обычно root).

Запуск, остановка и обновление

Управление сервисами осуществляется через команды Docker Compose в директории /root/linuxpatch:

  • Запуск всех сервисов:

    cd /root/linuxpatch
    docker compose up -d
    

  • Остановка всех сервисов:

    cd /root/linuxpatch
    docker compose down
    

  • Перезапуск сервисов:

    cd /root/linuxpatch
    docker compose restart
    

  • Просмотр логов:

    cd /root/linuxpatch
    docker compose logs -f
    

  • Обновление образов:

    cd /root/linuxpatch
    docker compose pull
    docker compose up -d
    

После запуска скрипта configure.sh приложение доступно по адресу https://<домен>. Учетные данные администратора выводятся в консоль и сохраняются в файле data/.env.

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