Обзор развертывания 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: -
Запуск/Перезапуск прокси-сервера Nginx: Выполните команду в директории
/root/nginx: -
Остановка сервисов: Для остановки основного стека приложения:
Для остановки прокси-сервера Nginx: -
Обновление приложения: Получите новые образы и перезапустите контейнеры: