Обзор развертывания Temporal на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие сервера с операционной системой Debian или Ubuntu. Требуется доступ к серверу с правами суперпользователя (root) или возможность выполнения команд через sudo.
Система должна иметь доступ к интернету для загрузки образов контейнеров и репозиториев. Необходимо наличие настроенного доменного имени для работы с SSL-сертификатами через Certbot.
Следующие порты должны быть доступны для входящих соединений: - 80 и 443 для веб-трафика и SSL. - 3100 для Loki. - 9200 для Elasticsearch. - 7233, 7234, 7235, 7236, 7237 для компонентов Temporal. - 8080 для Temporal UI. - 8085 для Grafana. - 9090 для Prometheus. - 16686, 14268, 14250 для Jaeger. - 1888, 13133, 4317, 55670 для OpenTelemetry Collector.
Структура файлов и каталогов¶
Все файлы конфигурации и данные приложения размещаются в следующих директориях:
/root/docker-compose— каталог с файлами конфигурации Docker Compose для Temporal и зависимостей./root/nginx— каталог для конфигурации Nginx и Certbot./data/nginx/user_conf.d— директория для пользовательских конфигурационных файлов Nginx./data/grafana— каталог для конфигурации и данных Grafana./var/lib/postgresql/data— место хранения данных базы данных PostgreSQL./etc/letsencrypt— директория для SSL-сертификатов (монтируется в контейнер Nginx).
Основные файлы конфигурации: - /root/docker-compose/docker-compose-multirole_edited.yaml — основной файл оркестрации контейнеров Temporal. - /root/nginx/compose.yml — файл конфигурации для Nginx и Certbot. - /data/grafana/grafana.ini — файл настроек Grafana. - /data/nginx/user_conf.d/<домен>.conf — конфигурация виртуального хоста Nginx.
Процесс установки приложения¶
Установка выполняется путем развертывания контейнеров Docker. Процесс включает следующие этапы:
- Обновление пакетов системы и установка Docker Engine.
- Установка утилиты
docker-compose. - Клонирование репозитория
https://github.com/temporalio/docker-compose.gitв директорию/root/docker-compose. - Установка и активация плагина Docker для Loki (
grafana/loki-docker-driver:latest). - Создание необходимых директорий для конфигураций Nginx и Grafana.
- Генерация файлов конфигурации на основе шаблонов.
- Запуск контейнеров Temporal с помощью
docker composeв директории/root/docker-compose. - Запуск контейнеров Nginx и Certbot с помощью
docker composeв директории/root/nginx.
Базы данных¶
Приложение использует следующие базы данных, развернутые в контейнерах:
- PostgreSQL: Используется для хранения истории событий и видимости.
- Образ:
postgres:${POSTGRESQL_VERSION}. - Данные хранятся в томе
/var/lib/postgresql/data. - Подключение осуществляется по имени хоста
postgresqlвнутри сетиtemporal-network. - Порт экспонируется как
${POSTGRES_DEFAULT_PORT}. -
Параметры аутентификации задаются через переменные окружения
POSTGRES_USERиPOSTGRES_PASSWORD. -
Elasticsearch: Используется для индексации видимости событий.
- Образ:
elasticsearch:${ELASTICSEARCH_VERSION}. - Режим работы:
single-node. - Безопасность отключена (
xpack.security.enabled=false). - Порт:
9200.
Контейнеры Docker и их запуск¶
Приложение состоит из множества контейнеров, управляемых через файл docker-compose-multirole_edited.yaml. Все контейнеры работают в сети temporal-network и используют драйвер логирования loki для отправки логов на сервер http://host.docker.internal:3100/loki/api/v1/push.
Список основных контейнеров: - loki: Сбор и хранение логов. - temporal-elasticsearch: База данных Elasticsearch. - temporal-postgresql: База данных PostgreSQL. - temporal-history: Сервис истории Temporal. - temporal-matching: Сервис сопоставления Temporal. - temporal-frontend и temporal-frontend2: Фронтенд-сервисы Temporal. - temporal-worker: Рабочий процесс Temporal. - temporal-admin-tools: Утилиты администрирования. - temporal-ui: Веб-интерфейс Temporal. - temporal-nginx: Внутренний балансировщик нагрузки для фронтенд-сервисов. - prometheus: Сбор метрик. - grafana: Визуализация метрик. - jaeger-all-in-one: Система трассировки. - otel-collector: Сборщик телеметрии OpenTelemetry.
Для запуска всех сервисов используется команда:
в директории/root/docker-compose. Для управления утилитой tctl создается алиас в файле /root/.bashrc:
Прокси серверы¶
Внешний доступ к приложению осуществляется через Nginx, который работает в режиме host и управляет SSL-сертификатами через Certbot.
Контейнер Nginx использует образ jonasal/nginx-certbot:latest. Он монтирует томы для хранения секретов Let's Encrypt и пользовательских конфигураций.
Конфигурация виртуального хоста размещается в файле /data/nginx/user_conf.d/<домен>.conf. Она включает: - Настройки SSL с использованием сертификатов из /etc/letsencrypt/live/<домен>/. - Прокси-правила для перенаправления трафика на внутренние сервисы (Grafana, Prometheus, Temporal). - Поддержку WebSocket для обновлений в реальном времени.
Для запуска Nginx и Certbot используется команда:
в директории/root/nginx. Настройки прав¶
Права доступа к файлам и директориям устанавливаются следующим образом: - Директория /root/nginx и файлы внутри нее имеют владельца root:root и права 0644. - Директория /data/grafana и файлы внутри нее имеют владельца root:root и права 0644. - Файл конфигурации Grafana /data/grafana/grafana.ini имеет владельца root:root и права 0644. - Файлы конфигурации Nginx в /data/nginx/user_conf.d имеют владельца root:root и права 0644.
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker Compose.
Запуск всех контейнеров Temporal:
Запуск контейнеров Nginx и Certbot:
Остановка контейнеров Temporal:
Остановка контейнеров Nginx и Certbot:
Обновление конфигурации и перезапуск: После изменения файлов конфигурации необходимо выполнить остановку и последующий запуск соответствующих групп контейнеров.