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

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

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

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

  • Операционная система: Сервер на базе Linux с установленными Docker и Docker Compose.

  • Права доступа: Требуется доступ root или пользователь с эквивалентными правами sudo для управления контейнерами, конфигурирования Nginx и управления правами доступа к файлам.

  • Требования к сети: Сервер должен разрешать входящий трафик на определенных портах для приложения, баз данных и инструментов мониторинга.

  • Конфигурация домена: Сервер должен быть настроен для разрешения домена hostkey.in для внешнего интерфейса приложения.

FQDN финальной панели

Полное доменное имя (FQDN) для доступа к веб-интерфейсу Temporal соответствует стандартному формату, определенному окружением хостинга:

  • Формат: <prefix><Server ID>.hostkey.in:<port>

  • Реализация: temporal<Server ID>.hostkey.in:443

Примечание: Значение prefix установлено как temporal, а внешний трафик маршрутизируется через порт 443 с помощью обратного прокси-сервера Nginx.

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

Приложение использует определенную структуру директорий на хост-сервере для хранения конфигураций, данных и сертификатов. Используются следующие пути:

  • Конфигурация Nginx: /root/nginx

    • Файл Compose: /root/nginx/compose.yml

    • Конфигурация для конкретного пользователя: /data/nginx/user_conf.d/temporal<Server ID>.hostkey.in.conf

  • Docker Compose: /root/docker-compose

    • Основной файл развертывания: /root/docker-compose/docker-compose-multirole_edited.yaml
  • Данные Grafana: /data/grafana

    • Файл конфигурации: /data/grafana/grafana.ini
  • Данные приложения:

    • Данные PostgreSQL находятся по пути: /var/lib/postgresql/data

    • Динамические файлы конфигурации монтируются из: ./dynamicconfig

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

Приложение Temporal развертывается с помощью Docker Compose. Процесс установки включает оркестрацию множества контейнеров, определенных в едином YAML-манифесте.

  • Метод развертывания: Docker Compose (версия 2).

  • Версионирование: Развертывание использует специфичные версии для основных компонентов:

    • Temporal Server: Определяется переменной ${TEMPORAL_VERSION}.

    • Temporal UI: Определяется переменной ${TEMPORAL_UI_VERSION}.

    • Temporal Admin Tools: Определяется переменной ${TEMPORAL_ADMINTOOLS_VERSION}.

  • Выполнение: Файл docker-compose-multirole_edited.yaml выполняется из директории /root/docker-compose для запуска стека сервера Temporal с множественными ролями.

Контейнеры Docker и их развертывание

Развертывание состоит из нескольких взаимосвязанных сервисов, оркестрируемых внутри сети temporal-network.

  • Основные сервисы Temporal:

    • temporal-history: Обработка логики сервиса истории.

    • temporal-matching: Обработка логики сервиса сопоставления (matching).

    • temporal-frontend: Предоставляет фронтенд-сервис (Порт 7237).

    • temporal-frontend2: Предоставляет вторичный экземпляр фронтенд-сервиса (Порт 7236).

    • temporal-worker: Обработка логики рабочего сервиса (worker).

    • temporal-admin-tools: Инструменты командной строки для администрирования.

    • temporal-ui: Веб-интерфейс для мониторинга и управления.

  • Сервисы баз данных и хранилищ:

    • postgresql: Экземпляр базы данных PostgreSQL.

    • elasticsearch: Экземпляр Elasticsearch для обеспечения видимости (visibility).

  • Мониторинг и логирование:

    • loki: Агрегация логов.

    • prometheus: Сбор метрик (Образ: prom/prometheus:v2.37.0).

    • grafana: Дашборд визуализации (Образ: grafana/grafana:7.5.16).

    • jaeger-all-in-one: Распределенная трассировка.

    • otel-collector: Коллектор OpenTelemetry.

  • Прокси-сервер сети:

    • temporal-nginx: Внутренний прокси-сервер Nginx, выполняющий балансировку трафика между экземплярами фронтенда.

    • nginx (Внешний): Внешний контейнер Nginx, использующий образ jonasal/nginx-certbot:latest, управляющий SSL и обратным проксированием.

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

Система использует многоуровневую архитектуру прокси-серверов для обработки трафика и завершения SSL-сессий.

  • Внешний прокси:

    • Сервис: Nginx с Certbot.

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

    • Функция: Управляет SSL-сертификатами через Let's Encrypt и маршрутизирует трафик из публичного интерфейса.

    • Окружение: Настроен с переменной CERTBOT_EMAIL=hkadm@hostkey.com.

    • Томы (Volumes):

      • nginx_secrets (Внешний том для Let's Encrypt).

      • /data/nginx/user_conf.d смонтирован в /etc/nginx/user_conf.d.

  • Внутренний прокси:

    • Сервис: Nginx (temporal-nginx).

    • Образ: nginx:1.22.1.

    • Функция: Балансирует запросы между temporal-frontend и temporal-frontend2.

    • Конфигурация: Использует пользовательский файл конфигурации, смонтированный из ./deployment/nginx/nginx.conf.

Базы данных

Приложение опирается на две основные технологии баз данных, обе работают как Docker-контейнеры внутри сети temporal-network.

  • PostgreSQL:

    • Использование: Основное хранилище данных для истории и состояния Temporal.

    • Имя контейнера: temporal-postgresql.

    • Хранилище: Данные сохраняются через bind-mount в /var/lib/postgresql/data на хосте.

    • Конфигурация:

      • Пользователь и пароль устанавливаются через переменные окружения (${POSTGRES_USER}, ${POSTGRES_PASSWORD}).

      • Открыт для внутреннего доступа на порту ${POSTGRES_DEFAULT_PORT}.

  • Elasticsearch:

    • Использование: Обеспечение видимости (visibility) и возможностей поиска.

    • Имя контейнера: temporal-elasticsearch.

    • Версия: Определяется переменной ${ELASTICSEARCH_VERSION}.

    • Конфигурация:

      • Запуск в режиме одиночного узла (discovery.type=single-node).

      • Размер Java Heap установлен в 512 МБ (ES_JAVA_OPTS).

      • Безопасность отключена (xpack.security.enabled=false).

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

Права доступа к файлам и директориям настроены для обеспечения правильного владения для root и сервисов приложения.

  • Директории Root:

    • /root/nginx: Владелец root:root, режим 0644.

    • /root/docker-compose: Владелец root:root, режим 0644.

  • Директории данных:

    • /data/grafana: Владелец root:root, режим 0644.

    • /data/nginx: Владелец root:root, режим 0644.

  • Файлы конфигурации:

    • Все сгенерированные файлы конфигурации (например, compose.yml, docker-compose-multirole_edited.yaml, grafana.ini) принадлежат пользователю root с правами 0644.

Доступные порты для подключения

Следующие порты экспортируются на хост или мапятся для внутреннего взаимодействия.

Сервис Внутренний порт Экспортированный порт (Хост) Протокол/Назначение
Temporal UI 8080 8080 HTTP (Прямой доступ, внутренний)
Temporal Frontend 1 7237 7237 gRPC
Temporal Frontend 2 7236 7236 gRPC
Temporal History 7234 7234 gRPC
Temporal Matching 7235 7235 gRPC
Temporal Worker 7232 7232 gRPC
Temporal Nginx 7233 7233 gRPC (Внутренний балансировщик)
Prometheus 9090 9090 HTTP (Метрики)
Grafana 3000 8085 HTTP (Дашборд)
Elasticsearch 9200 9200 HTTP
Loki 3100 3100 HTTP
Jaeger 16686, 14268, 14250 16686, 14268, 14250 HTTP, gRPC
OTel Collector 1888, 13133, 4317, 55670 1888, 13133, 4317, 55670 Различные
Nginx (Внешний) 80/443 443 HTTPS (Публичный)

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

Управление сервисами осуществляется с помощью команд Docker Compose, выполняемых в соответствующих директориях проектов.

  • Запуск/Перезапуск основного приложения: Выполните команду в директории /root/docker-compose:

    cd /root/docker-compose
    docker compose -f docker-compose-multirole_edited.yaml up -d
    

  • Запуск/Перезапуск прокси-сервера Nginx: Выполните команду в директории /root/nginx:

    cd /root/nginx
    docker compose up -d
    

  • Остановка сервисов: Для остановки основного стека приложения:

    cd /root/docker-compose
    docker compose -f docker-compose-multirole_edited.yaml down
    
    Для остановки прокси-сервера Nginx:
    cd /root/nginx
    docker compose down
    

  • Обновление приложения: Получите новые образы и перезапустите контейнеры:

    cd /root/docker-compose
    docker compose -f docker-compose-multirole_edited.yaml pull
    docker compose -f docker-compose-multirole_edited.yaml up -d
    

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