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

Обзор развертывания 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. Процесс установки включает следующие шаги:

  1. Обновление системы: Обновление и upgrade всех пакетов APT на сервере.

  2. Установка Docker: Установка движка Docker и утилиты docker-compose.

  3. Клонирование репозитория: Клонирование официального репозитория Docker Compose Temporal с https://github.com/temporalio/docker-compose.git в /root/docker-compose.

  4. Установка драйвера Loki: Установка и включение плагина grafana/loki-docker-driver для ведения журналов контейнеров.

  5. Конфигурация алиаса: Добавление алиаса для tctl в файл .bashrc пользователя root для облегчения взаимодействия с CLI Temporal из командной строки.

  6. Генерация конфигурации: Генерация файла docker-compose-multirole_edited.yaml и конфигураций Nginx на основе переменных развертывания.

  7. Запуск сервисов: Запуск стека сервера 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:

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

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

    cd /root/docker-compose
    docker compose -f docker-compose-multirole_edited.yaml down
    

  • Запуск сервисов Nginx/Certbot:

    cd /root/nginx
    docker compose up -d
    

  • Остановка сервисов Nginx/Certbot:

    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
    

  • Доступ к CLI Temporal: Алиас tctl настроен в /root/.bashrc. После загрузки файла выполните:

    tctl
    

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