Skip to content

Обзор инфраструктуры

Meduza работает на одном KVM-хосте, доступном по SSH. Платформа опирается на три ключевых компонента: Nomad для оркестрации рабочих нагрузок, Traefik для обратного проксирования и терминации TLS, и Consul для управления конфигурацией через хранилище ключей-значений.

Компоненты стека

КомпонентРольПорт
NomadОркестрация контейнеров, планирование задач, проверки здоровья4646
TraefikОбратный прокси, терминация TLS, автоматический HTTPS через Let's Encrypt80, 443
ConsulKV-хранилище для конфигурации приложений8500

Как они взаимодействуют

Три компонента образуют тесно интегрированный цикл:

  1. Nomad планирует и запускает контейнеризированные сервисы (задачи). Каждая задача определяет блоки сервисов с метаданными-тегами.
  2. Traefik отслеживает каталог сервисов Nomad и автоматически обнаруживает сервисы, аннотированные тегами traefik.*. Он формирует правила маршрутизации и выпускает TLS-сертификаты через Let's Encrypt на основе этих тегов.
  3. Consul хранит конфигурацию приложений в виде JSON-объектов в KV-хранилище. Nomad-задачи используют блоки template для чтения значений из Consul при деплое и инжекта их как переменных окружения в работающие контейнеры.
mermaid
flowchart TB
    Internet["Internet (HTTPS :443)"]

    subgraph KVM Host
        Traefik["Traefik\nReverse Proxy + TLS"]
        Nomad["Nomad\nOrchestrator"]
        Consul["Consul\nKV Config Store"]

        subgraph Nomad Jobs
            FE["Frontend Container"]
            BE["Backend Container"]
        end
    end

    Internet -->|"incoming request"| Traefik
    Traefik -->|"route by Host header"| FE
    FE -->|"API calls"| BE

    Nomad -->|"schedules & health-checks"| FE
    Nomad -->|"schedules & health-checks"| BE
    Nomad -->|"reads service tags"| Traefik

    Consul -->|"template: KV config → env vars"| BE
    Consul -->|"template: KV config → env vars"| FE
    Nomad -->|"resolves template blocks"| Consul

Поток запросов

Типичный запрос проходит через стек следующим образом:

mermaid
sequenceDiagram
    participant Client
    participant Traefik
    participant Frontend
    participant Backend
    participant Consul

    Client->>Traefik: HTTPS request to app.meduza.io
    Traefik->>Traefik: Match Host() rule, terminate TLS
    Traefik->>Frontend: Forward to healthy upstream
    Frontend->>Backend: API request (dynamic port)
    Backend->>Consul: (at deploy time) Config loaded via template
    Backend-->>Frontend: JSON response
    Frontend-->>Traefik: HTML / assets
    Traefik-->>Client: HTTPS response

Окружения

Все окружения работают на одном KVM-хосте и различаются переменными Nomad-задач и путями Consul KV:

ОкружениеПрефикс Consul KVПорт фронтендаДомен
prodhub/prod/config8888Продакшн-домен
stagehub/stage/config8889Стейджинг-домен
devhub/dev/config8890Dev-домен

TIP

Все три окружения используют один и тот же файл Nomad-задачи (hub.nomad.hcl). Переменная env определяет, какой путь Consul читается, какие порты назначаются и на какой домен Traefik маршрутизирует трафик.

Доступ

Доступ к KVM-хосту осуществляется исключительно через SSH. Веб-панели управления нет. Для управления инфраструктурой:

  • Nomad UI доступен по адресу http://<host>:4646 (через SSH-туннель)
  • Consul UI доступен по адресу http://<host>:8500 (через SSH-туннель)
  • Traefik Dashboard доступен по адресу http://<host>:8080 (через SSH-туннель)

WARNING

Всегда используйте SSH-туннелирование для доступа к административным интерфейсам. Эти порты не должны быть открыты в публичный интернет.

Дополнительное чтение

  • Nomad — определения задач, группы, задачи, сеть и проверки здоровья
  • Traefik — обнаружение сервисов, правила маршрутизации и настройка TLS
  • Consul — паттерны KV-хранилища и управление конфигурацией

Документация по инфраструктуре