Обзор развертывания Temporal на сервере¶
Предварительные требования и базовые условия¶
Для развертывания требуется сервер Linux с дистрибутивами на базе Debian. Перед началом установки должны быть выполнены следующие предварительные требования:
-
Операционная система: Debian или Ubuntu
-
Привилегии: Доступ root или права
sudo -
Конфигурация домена: Действующий домен в зоне
hostkey.in -
Порты: Сервер должен разрешать трафик на внешний порт
443для доступа по HTTPS и на специфические внутренние порты для коммуникации контейнеров.
FQDN конечной панели¶
Приложение доступно по следующему формату полностью квалифицированного доменного имени (FQDN):
temporal<Server ID>.hostkey.in:443
Замените <Server ID> на конкретный идентификатор, назначенный экземпляру сервера. Приложение обслуживается по протоколу HTTPS на порту 443.
Структура файлов и каталогов¶
Развертывание использует следующую структуру каталогов для файлов конфигурации, хранения данных и сертификатов:
-
/root/docker-compose: Содержит клонированный репозиторий GitHub и основной файлdocker-compose-multirole_edited.yaml. -
/root/nginx: Содержит файлы конфигурации Nginx и Certbot, включаяcompose.yml. -
/data/nginx/user_conf.d/: Хранит специфическую конфигурацию блока сервера Nginx для экземпляра Temporal. -
/data/grafana/: Хранит файл конфигурации Grafana (grafana.ini). -
/etc/letsencrypt/live/: Хранит SSL-сертификаты и ключи для домена. -
/var/lib/postgresql/data: Постоянный том хранения для базы данных PostgreSQL.
Процесс установки приложения¶
Приложение развертывается с использованием Docker и Docker Compose. Процесс установки включает следующие шаги:
-
Обновление системы: Обновление и upgrade всех пакетов APT на сервере.
-
Установка Docker: Установка движка Docker и утилиты
docker-compose. -
Клонирование репозитория: Клонирование официального репозитория Docker Compose Temporal с
https://github.com/temporalio/docker-compose.gitв/root/docker-compose. -
Установка драйвера Loki: Установка и включение плагина
grafana/loki-docker-driverдля ведения журналов контейнеров. -
Конфигурация алиаса: Добавление алиаса для
tctlв файл.bashrcпользователя root для облегчения взаимодействия с CLI Temporal из командной строки. -
Генерация конфигурации: Генерация файла
docker-compose-multirole_edited.yamlи конфигураций Nginx на основе переменных развертывания. -
Запуск сервисов: Запуск стека сервера Temporal с множественными ролями и стека Nginx/Certbot с использованием Docker Compose.
Права доступа и безопасность¶
Безопасность обеспечивается следующими механизмами:
-
Межсетевой экран (Firewall): Сервер должен разрешать входящий трафик на порт
443(HTTPS). Внутренние порты контейнеров доступны только внутри сети Docker или мапятся на специфические порты хоста для мониторинга. -
SSL/TLS: Весь внешний трафик шифруется с использованием SSL-сертификатов, управляемых Certbot.
-
Доступ пользователей: Скрипты развертывания выполняются с привилегиями root. Алиас
tctlнастроен для пользователя root. -
Изоляция сети: Все сервисы Temporal общаются через выделенную мостовую сеть Docker с именем
temporal-network.
Базы данных¶
Развертывание использует две основные системы баз данных:
-
PostgreSQL:
-
Роль: Хранит данные истории и видимости Temporal.
-
Образ:
postgres:${POSTGRESQL_VERSION} -
Хранение: Данные сохраняются в томе
/var/lib/postgresql/data. -
Подключение: Внутренние сервисы подключаются через имя хоста
postgresqlна порту по умолчанию.
-
-
Elasticsearch:
-
Роль: Используется для данных видимости и архивирования.
-
Образ:
elasticsearch:${ELASTICSEARCH_VERSION} -
Конфигурация: Обнаружение в режиме одного узла с отключенной безопасностью (
xpack.security.enabled=false). -
Подключение: Внутренние сервисы подключаются через имя хоста
elasticsearchна порту9200.
-
Контейнеры Docker и их развертывание¶
Приложение состоит из нескольких контейнеров Docker, оркестрируемых через docker-compose-multirole_edited.yaml. Контейнеры развертываются в следующем порядке на основе зависимостей:
-
loki: Сервис агрегации журналов.
-
elasticsearch: Движок поиска и аналитики.
-
postgresql: Реляционная база данных.
-
temporal-history: Обрабатывает логику сервиса истории.
-
temporal-matching: Обрабатывает логику сервиса сопоставления.
-
temporal-frontend: Обрабатывает логику сервиса фронтенда (два экземпляра:
temporal-frontendиtemporal-frontend2). -
temporal-worker: Обрабатывает логику сервиса воркера.
-
temporal-admin-tools: Административные инструменты CLI.
-
temporal-ui: Веб-интерфейс пользователя.
-
temporal-nginx: Внутренний прокси Nginx для сервисов Temporal.
-
prometheus: Сбор метрик.
-
grafana: Визуализация метрик.
-
jaeger-all-in-one: Распределенная трассировка.
-
otel-collector: Коллектор OpenTelemetry.
Все контейнеры используют grafana/loki-docker-driver для ведения журналов, отправляя логи в локальный экземпляр Loki.
Прокси-серверы¶
Внешний доступ управляется через обратный прокси Nginx, настроенный с Certbot для терминации SSL.
-
Конфигурация Nginx:
-
Расположение:
/root/nginx/compose.yml -
Образ:
jonasal/nginx-certbot:latest -
Функция: Обрабатывает генерацию и обновление SSL-сертификатов, а также проксирует трафик к внутренним сервисам Temporal UI, Grafana и Prometheus.
-
-
Маршрутизация:
-
Корневой путь
/проксирует к Temporal UI, работающему на внутреннем порту8080. -
Путь
/grafana/проксирует к сервису Grafana. -
Путь
/prometheus/проксирует к сервису Prometheus.
-
-
SSL: Сертификаты хранятся в
/etc/letsencrypt/live/и автоматически обновляются контейнером Certbot.
Настройки прав доступа¶
Права доступа к файлам и каталогам устанавливаются следующим образом во время развертывания:
-
/root/nginx: Режим0644, владелецroot:root. -
/root/docker-compose: Режим0644, владелецroot:root. -
/data/nginx/user_conf.d/: Режим0644, владелецroot:root. -
/data/grafana/: Режим0644, владелецroot:root. -
Файлы конфигурации, сгенерированные шаблонами, устанавливаются с правами
0644и владельцемroot.
Расположение файлов конфигурации и данных¶
Следующая таблица перечисляет критические файлы конфигурации и их расположение:
| Имя файла | Расположение | Описание |
|---|---|---|
docker-compose-multirole_edited.yaml | /root/docker-compose/ | Основной файл оркестрации для сервисов Temporal. |
compose.yml | /root/nginx/ | Файл оркестрации для Nginx и Certbot. |
user.conf | /data/nginx/user_conf.d/ | Конфигурация блока сервера Nginx для домена. |
grafana.ini | /data/grafana/ | Конфигурация сервера Grafana. |
nginx.conf | /root/docker-compose/deployment/nginx/ | Внутренняя конфигурация Nginx для сервисов Temporal. |
local-config.yaml | /root/docker-compose/deployment/loki/ | Файл конфигурации Loki. |
prometheus.yml | /root/docker-compose/deployment/prometheus/ | Файл конфигурации Prometheus. |
otel-config.yaml | /root/docker-compose/deployment/otel/ | Конфигурация коллектора OpenTelemetry. |
Доступные порты для подключения¶
Следующие порты открыты на хосте для внешнего или внутреннего доступа:
| Порт | Сервис | Описание |
|---|---|---|
443 | Nginx (Внешний) | Доступ по HTTPS к Temporal UI, Grafana и Prometheus. |
8080 | Temporal UI | Прямой доступ к веб-интерфейсу Temporal (внутренний). |
8085 | Grafana | Прямой доступ к панели Grafana (внутренний). |
9090 | Prometheus | Прямой доступ к метрикам Prometheus (внутренний). |
7233 | Temporal Nginx | Внутренний gRPC-прокси для сервисов Temporal. |
7234 | Temporal History | Порт сервиса истории. |
7235 | Temporal Matching | Порт сервиса сопоставления. |
7236 | Temporal Frontend 2 | Порт вторичного сервиса фронтенда. |
7237 | Temporal Frontend | Порт основного сервиса фронтенда. |
7232 | Temporal Worker | Порт сервиса воркера. |
3100 | Loki | Порт сервиса агрегации журналов. |
9200 | Elasticsearch | Порт поискового движка. |
16686 | Jaeger | Веб-интерфейс распределенной трассировки. |
14268 | Jaeger | HTTP-порт коллектора. |
14250 | Jaeger | gRPC-порт коллектора. |
1888 | OTEL Collector | Порт метрик Prometheus. |
13133 | OTEL Collector | Порт удаленной записи Prometheus. |
4317 | OTEL Collector | Порт OTLP gRPC. |
55670 | OTEL Collector | Порт OTLP HTTP. |
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker Compose, выполняемые из соответствующих каталогов проектов.
-
Запуск сервисов Temporal:
-
Остановка сервисов Temporal:
-
Запуск сервисов Nginx/Certbot:
-
Остановка сервисов Nginx/Certbot:
-
Обновление сервисов: Для обновления приложения загрузите последние образы и перезапустите контейнеры:
-
Доступ к CLI Temporal: Алиас
tctlнастроен в/root/.bashrc. После загрузки файла выполните: