Документация Установка и развёртывание

Руководство по установке и развёртыванию

Содержание

  1. Обзор
  2. Компоненты и порты
  3. Запуск бинарников напрямую
  4. Запуск с Docker
  5. Примеры Docker Compose
  6. Обновление запущенной инсталляции
  7. Справочник переменных окружения
  8. Режим SQLite
  9. Mock Resolver
  10. Runner Agent
  11. Server Generator
  12. Настройка TLS
  13. Резервное копирование и восстановление
  14. Проверки здоровья
  15. Рекомендации для продакшена
  16. Развёртывание в Kubernetes

Обзор

Что такое Docker? Docker – это инструмент, который упаковывает приложения в легковесные переносимые контейнеры, чтобы они работали одинаково на любой машине. Использование Docker для Mockarty упрощает развёртывание: вы получаете воспроизводимое окружение со всеми зависимостями, простое масштабирование через Docker Compose и отсутствие необходимости устанавливать что-либо на хост, кроме самого Docker.

Mockarty распространяется двумя способами:

  1. Готовые бинарные файлы — скачайте с GitHub Releases и запустите как нативные процессы
  2. Официальные Docker-образы — скачайте с Docker Hub и запустите в контейнерах

Официальные образы Docker Hub:

Образ Описание
mockarty/mockarty Admin нода (веб-интерфейс, REST API, координатор)
mockarty/resolver Mock Resolver нода
mockarty/runner Runner Agent
mockarty/generator Server Generator (оркестратор)
mockarty/cli CLI-инструмент

Исходный код не требуется. Все бинарники и Docker-образы самодостаточны и включают встроенный веб-интерфейс, миграции базы данных и конфигурацию по умолчанию.

URL-адреса в примерах: Во всех примерах используется localhost:5770 как адрес Mockarty по умолчанию. Если ваш экземпляр работает на удалённом сервере, замените localhost:5770 на реальный адрес (например, https://mockarty.company.com или http://192.168.1.50:5770). Подробнее — в разделе Полезные функции и советы.


Компоненты и порты

Компонент Бинарник Порты по умолчанию Описание
Admin нода mockarty 5770 (HTTP), 5771 (HTTPS), 5772 (MCP), 5773 (coordinator gRPC) Основная нода: веб-интерфейс, REST API, управление моками, координатор
Mock resolver mockarty-resolver 5780 (HTTP), 6780 (дашборд) Обрабатывает трафик резолвинга моков, разгружает admin ноду
Runner agent mockarty-runner 6770 (дашборд) Выполняет API-тесты и нагрузочные тесты
Server generator mockarty-server-generator 8888 (режим оркестратора) Генератор кода для всех поддерживаемых протоколов и брокеров

Примечание: Порт 5773 — внутренний gRPC-порт координатора для регистрации resolver/runner нод. Он не предназначен для gRPC мок-трафика.

Чек-лист для фаервола

Откройте следующие порты admin-ноды для клиентов и соседних сервисов:

  • 5770/tcp — HTTP: веб-интерфейс, REST API, мок-трафик (stubs). Открывайте для конечных пользователей и SDK/CLI-клиентов.
  • 5771/tcp — HTTPS: то же самое с TLS. Открывайте для пользователей при HTTPS_ENABLED=true.
  • 5772/tcp — MCP (Model Context Protocol). Открывайте только для хостов с MCP-совместимыми AI-ассистентами.
  • 5773/tcp — координатор gRPC. Открывайте только resolver/runner-нодам, не публикуйте в интернет.

Resolver-ноды дополнительно используют 5780/tcp (мок-трафик) и 6780/tcp (дашборд); runner-агенты используют 6770/tcp (дашборд). Открывайте эти порты только там, где соответствующий компонент действительно развернут.


Запуск бинарников напрямую

1. Скачайте

Скачайте подходящий бинарник для вашей платформы с GitHub Releases.

2. Сделайте исполняемым (Linux/macOS)

chmod +x mockarty

3. Запуск бинарника

Самый простой способ запуска — с SQLite, без внешней базы данных:

DB_USE=sqlite ./mockarty

Mockarty запустится по адресу http://localhost:5770 с базой данных SQLite в ~/.mockarty/data.db.

Учётные данные администратора по умолчанию: admin / admin (смените сразу после первого входа).

4. Запуск с PostgreSQL

export DB_USE=pg
export DB_DSN="postgres://mockarty:password@localhost:5432/mockarty?sslmode=disable"
export FIRST_ADMIN_PASSWORD=change_me

./mockarty

Admin нода запустится по адресу http://localhost:5770.

5. Запуск с SQLite (без PostgreSQL)

export DB_USE=sqlite
export DB_DSN="/path/to/mockarty.db"
export FIRST_ADMIN_PASSWORD=change_me

./mockarty

Если DB_DSN не указан при DB_USE=sqlite, база данных по умолчанию создаётся в ~/.mockarty/data.db.

Маршрутизация URL для резолвинга моков

Mockarty использует систему маршрутизации URL на основе неймспейсов. Весь мок-трафик проходит через префикс /stubs/, за которым следует имя неймспейса:

http://localhost:5770/stubs/{namespace}/{ваш-маршрут-мока}

Например, если вы создали мок с маршрутом /api/users в неймспейсе sandbox:

# Вызов мока
curl http://localhost:5770/stubs/sandbox/api/users

# С параметрами запроса
curl "http://localhost:5770/stubs/sandbox/api/users?page=1&limit=10"

# POST-запрос
curl -X POST http://localhost:5770/stubs/sandbox/api/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John"}'

Неймспейс sandbox создаётся автоматически при первом запуске. Дополнительные неймспейсы можно создать через Админ-панель или страницу Настроек.

Важно: Префикс /stubs/{namespace}/ обязателен для всех запросов резолвинга моков. Веб-интерфейс, REST API и эндпоинты управления используют другие пути (например, /ui/, /mock/, /api/).

6. Управление миграциями

Миграции применяются автоматически при запуске. Для ручного управления:

# Применить все ожидающие миграции
./mockarty --migrate up

# Применить N миграций
./mockarty --migrate up --migrate-steps N

# Откатить N миграций
./mockarty --migrate down --migrate-steps N

# Показать текущую версию миграции
./mockarty --migrate version

# Пробный запуск (вывести SQL без выполнения)
./mockarty --migrate up --migrate-dry-run

# Автоисправление грязного состояния миграции
./mockarty --migrate up --migrate-fix-dirty

7. Запуск как systemd-сервис (Linux)

Создайте /etc/systemd/system/mockarty.service:

[Unit]
Description=Mockarty Mock Server
After=network.target postgresql.service

[Service]
Type=simple
User=mockarty
ExecStart=/opt/mockarty/mockarty
WorkingDirectory=/opt/mockarty
Environment=DB_USE=pg
Environment=DB_DSN=postgres://mockarty:password@localhost:5432/mockarty?sslmode=disable
Environment=FIRST_ADMIN_PASSWORD=change_me
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl enable mockarty
sudo systemctl start mockarty

Запуск с Docker

Внимание: HTTP_BIND_ADDR — Внутри Docker-контейнеров вы ОБЯЗАТЕЛЬНО должны установить HTTP_BIND_ADDR=0.0.0.0. Значение по умолчанию localhost делает сервер недоступным извне контейнера.

Внимание: COOKIE_SECURE — При работе без HTTPS (разработка) установите COOKIE_SECURE=false, чтобы избежать зацикливания аутентификации.

Использование официальных Docker-образов

Самый быстрый способ — использовать официальные образы с Docker Hub:

Admin нода

docker run -d \
  --name mockarty \
  -p 5770:5770 \
  -p 5771:5771 \
  -p 5772:5772 \
  -e HTTP_BIND_ADDR=0.0.0.0 \
  -e DB_USE=pg \
  -e DB_DSN="postgres://mockarty:password@postgres:5432/mockarty?sslmode=disable" \
  -e FIRST_ADMIN_PASSWORD=change_me \
  mockarty/mockarty:latest

С SQLite (без сервера базы данных)

docker run -d \
  --name mockarty \
  -p 5770:5770 \
  -e HTTP_BIND_ADDR=0.0.0.0 \
  -e DB_USE=sqlite \
  -e DB_DSN="/data/mockarty.db" \
  -e FIRST_ADMIN_PASSWORD=change_me \
  -v mockarty-data:/data \
  mockarty/mockarty:latest

Сборка собственного Docker-образа из бинарника

Если вы не можете использовать Docker Hub (air-gapped окружение), создайте минимальный образ из скачанного бинарника:

FROM alpine:3.20
RUN apk add --no-cache ca-certificates tzdata curl
COPY mockarty /usr/local/bin/mockarty
RUN chmod +x /usr/local/bin/mockarty
EXPOSE 5770 5771 5772 5773
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost:5770/health/live || exit 1
ENTRYPOINT ["mockarty"]

Сборка и запуск:

docker build -t mockarty:latest -f Dockerfile.admin .
docker run -d \
  --name mockarty \
  -p 5770:5770 \
  -e HTTP_BIND_ADDR=0.0.0.0 \
  -e DB_USE=sqlite \
  -e FIRST_ADMIN_PASSWORD=change_me \
  mockarty:latest

Важно: Используйте бинарник linux/amd64 или linux/arm64, соответствующий архитектуре вашего Docker-хоста.


Примеры Docker Compose

Минимальный: Admin + PostgreSQL

services:
  postgres:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: mockarty
      POSTGRES_PASSWORD: change_me
      POSTGRES_DB: mockarty
    volumes:
      - pg-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mockarty"]
      interval: 5s
      retries: 10

  mockarty:
    image: mockarty/mockarty:latest
    ports:
      - "5770:5770"   # HTTP — Web UI, REST API, мок-трафик
      - "5771:5771"   # HTTPS
      - "5772:5772"   # MCP
      - "5773:5773"   # gRPC координатор (для resolver/runner нод)
    environment:
      HTTP_BIND_ADDR: "0.0.0.0"
      DB_USE: pg
      DB_DSN: postgres://mockarty:change_me@postgres:5432/mockarty?sslmode=disable
      FIRST_ADMIN_PASSWORD: change_me
    depends_on:
      postgres:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5770/health/live"]
      interval: 10s
      timeout: 5s
      retries: 10

volumes:
  pg-data:

Минимальный: Admin + SQLite (без сервера БД)

services:
  mockarty:
    image: mockarty/mockarty:latest
    ports:
      - "5770:5770"
      - "5771:5771"
    environment:
      HTTP_BIND_ADDR: "0.0.0.0"
      DB_USE: sqlite
      DB_DSN: /data/mockarty.db
      FIRST_ADMIN_PASSWORD: change_me
    volumes:
      - mockarty-data:/data

volumes:
  mockarty-data:

Полный: Admin + PostgreSQL + Redis + Resolver + Runner

Распределённое развёртывание требует двухфазного запуска, поскольку resolver- и runner-ноды нуждаются в интеграционных токенах, которые генерируются admin-нодой.

Фаза 1: Запуск admin-ноды и базы данных

Создайте docker-compose.yml:

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: mockarty
      POSTGRES_PASSWORD: change_me
      POSTGRES_DB: mockarty
    volumes:
      - pg-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mockarty"]
      interval: 5s
      retries: 10

  redis:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      retries: 10

  mockarty:
    image: mockarty/mockarty:latest
    ports:
      - "5770:5770"
      - "5771:5771"
      - "5772:5772"
      - "5773:5773"   # gRPC координатор (внутренний — открывайте только внутри compose-сети)
    environment:
      HTTP_BIND_ADDR: "0.0.0.0"
      DB_USE: pg
      DB_DSN: postgres://mockarty:change_me@postgres:5432/mockarty?sslmode=disable
      CACHE_TYPE: redis
      REPO_REDIS_HOST: redis
      REPO_REDIS_PORT: "6379"
      FIRST_ADMIN_PASSWORD: change_me
      RUNNER_GRPC_BIND_ADDR: "0.0.0.0"
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5770/health/live"]
      interval: 10s
      timeout: 5s
      retries: 10

  resolver:
    image: mockarty/resolver:latest
    ports:
      - "5780:5780"
      - "6780:6780"
    environment:
      COORDINATOR_ADDR: mockarty:5773
      API_TOKEN: "${RESOLVER_API_TOKEN}"
      RESOLVER_NAME: "resolver-1"
      DB_DSN: postgres://mockarty:change_me@postgres:5432/mockarty?sslmode=disable
      HTTP_PORT: "5780"
    depends_on:
      mockarty:
        condition: service_healthy

  runner:
    image: mockarty/runner:latest
    environment:
      COORDINATOR_ADDR: mockarty:5773
      API_TOKEN: "${RUNNER_API_TOKEN}"
      RUNNER_NAME: "runner-1"
      SHARED: "true"
      CAPABILITIES: "api_test,performance"
    depends_on:
      mockarty:
        condition: service_healthy

volumes:
  pg-data:

Сначала запустите только admin-ноду:

docker compose up -d postgres redis mockarty

Дождитесь готовности admin-ноды, затем войдите в веб-интерфейс по адресу http://localhost:5770/ui/ и смените пароль по умолчанию.

Фаза 2: Генерация токенов и запуск resolver/runner

Сгенерируйте токены для resolver и runner через API:

# Создать токен для resolver
curl -X POST http://localhost:5770/api/v1/integrations \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"resolver-1","type":"mock_resolver"}'

# Создать токен для runner
curl -X POST http://localhost:5770/api/v1/integrations \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"runner-1","type":"test_runner"}'

Каждый ответ содержит поле token (формат: mki_...). Сохраните токены сразу — они показываются только один раз.

Поместите токены в .env файл рядом с docker-compose.yml:

RESOLVER_API_TOKEN=mki_your_resolver_token_here
RUNNER_API_TOKEN=mki_your_runner_token_here

Теперь запустите полный стек:

docker compose up -d

Resolver- и runner-ноды аутентифицируются у admin-ноды с помощью интеграционных токенов и регистрируются через gRPC-порт координатора (5773).

Важно: Если resolver или runner запустятся без действительных токенов, они не смогут подключиться и будут перезапускаться в цикле. Всегда генерируйте токены перед запуском этих компонентов.

С генерированными серверами

Серверы, созданные mockarty-server-generator, — это автономные сервисы, которые обращаются к admin ноде Mockarty для резолвинга моков:

services:
  mockarty:
    image: mockarty/mockarty:latest
    ports:
      - "5770:5770"
    environment:
      HTTP_BIND_ADDR: "0.0.0.0"
      DB_USE: pg
      DB_DSN: postgres://mockarty:change_me@postgres:5432/mockarty?sslmode=disable
      FIRST_ADMIN_PASSWORD: change_me

  # Генерированный MCP-сервер (собранный из сгенерированного кода)
  mcp-server:
    image: my-mcp-server:latest
    ports:
      - "8080:8080"   # Админ-панель
      - "8910:8910"   # MCP SSE эндпоинт
    environment:
      HTTP_ADMIN_BASE_URL: http://mockarty:5770
      NAMESPACE: sandbox
      MCP_SSE_PORT: "8910"
    depends_on:
      - mockarty

  # Генерированный gRPC-сервер (собранный из сгенерированного кода)
  grpc-server:
    image: my-grpc-server:latest
    ports:
      - "4770:4770"   # gRPC
      - "8081:8080"   # Админ-панель
    environment:
      HTTP_ADMIN_BASE_URL: http://mockarty:5770
      GRPC_PORT: "4770"
      NAMESPACE: sandbox
    depends_on:
      - mockarty

Примечание: Генерированные серверы собираются из кода, созданного mockarty-server-generator. Подробности в Руководстве по генератору кода.


Обновление запущенной инсталляции

Mockarty поставляется в виде набора версионированных Docker-образов на Docker Hub. Процесс обновления одинаков и для Docker Compose, и для Helm: меняем tag образа и даём оркестратору пересоздать контейнеры. Миграции базы применяются автоматически при старте admin-ноды — вручную SQL выполнять не нужно.

Образы на Docker Hub

Компонент Образ
Admin-нода mockarty/mockarty
Resolver mockarty/resolver
Runner mockarty/runner
Server generator mockarty/generator

Каждый образ публикуется с двумя тегами: точная версия (например, mockarty/mockarty:0.0.4-beta) и latest. В продакшене фиксируйте точную версиюlatest может незаметно поменяться.

Перед обновлением

  1. Сделайте бэкап базы. На single-node: docker compose exec postgres pg_dump -U mockarty mockarty > backup.sql. На Helm-кластере используйте штатный workflow бэкапа Postgres.
  2. Прочитайте release notes целевой версии: https://mockarty.ru/downloads или GitHub.
  3. Проверьте здоровье текущей инсталляции: curl -fsS http://<admin>/health/live.

Обновление Docker Compose

# 1. Зафиксируйте новую версию в .env:
#    VERSION=0.0.4-beta

# 2. Скачайте новые образы
docker compose -f docker-compose.minimal.yml pull

# 3. Пересоздайте контейнеры in-place (volumes сохраняются)
docker compose -f docker-compose.minimal.yml up -d

# 4. Следите за логами пока admin-нода не сообщит «migrations applied»
docker compose -f docker-compose.minimal.yml logs -f mockarty

Для распределённого стека обновляйте в таком порядке, чтобы не оборвать трафик во время миграций:

docker compose -f docker-compose.distributed.yml pull
docker compose -f docker-compose.distributed.yml up -d --no-deps mockarty
docker compose -f docker-compose.distributed.yml up -d --no-deps mockarty-resolver
docker compose -f docker-compose.distributed.yml up -d --no-deps mockarty-runner

Обновление Helm / Kubernetes

# Вариант A — поднять tag на все компоненты разом (проще всего)
helm upgrade mockarty deploy/helm/mockarty \
  --namespace mockarty \
  --reuse-values \
  --set admin.image.tag=0.0.4-beta \
  --set resolver.image.tag=0.0.4-beta \
  --set runner.image.tag=0.0.4-beta \
  --set orchestrator.image.tag=0.0.4-beta

# Вариант B — держать values.yaml источником правды
#   отредактируйте values.yaml и поднимите image.tag у каждого компонента
helm upgrade mockarty deploy/helm/mockarty --namespace mockarty -f values.yaml

Kubernetes обновляет pods стратегией RollingUpdate (maxSurge=1, maxUnavailable=0), поэтому трафик резолверов и раннеров не прерывается. Admin StatefulSet раскатывается по одному поду — кратковременное мигание UI во время обновления admin-ноды ожидаемо.

Откат

# Docker Compose: укажите прежний VERSION в .env и повторите up -d
VERSION=0.0.3 docker compose -f docker-compose.minimal.yml up -d

# Helm: откат релиза
helm rollback mockarty --namespace mockarty

Откат миграций (./mockarty --migrate down --migrate-steps N) возможен только для последних N миграций и только если новая версия явно описала down-путь. Если уверенности нет — восстанавливайте из бэкапа.


Справочник переменных окружения

Основные

Переменная Описание По умолчанию
ENV Имя окружения (development, production) development
LOG_LEVEL Уровень логирования: debug, info, warn, error info

HTTP сервер

Переменная Описание По умолчанию
HTTP_PORT Порт HTTP сервера 5770
HTTP_BIND_ADDR Адрес привязки HTTP localhost
HTTPS_ENABLED Включить HTTPS true
HTTPS_PORT Порт HTTPS сервера 5771
HTTPS_BIND_ADDR Адрес привязки HTTPS (пусто)
HTTPS_CERT_FILE Путь к файлу TLS сертификата (пусто)
HTTPS_KEY_FILE Путь к файлу приватного ключа TLS (пусто)
HTTPS_TLS_DIR Директория для автоматически сгенерированных TLS сертификатов .mockarty/tls
HTTP_KEEP_ALIVE_TIME Время HTTP keep-alive 30s
HTTP_KEEP_ALIVE_TIMEOUT Таймаут HTTP keep-alive 30s
HTTP_REQUEST_BODY_SIZE_LIMIT_MB Максимальный размер тела запроса в МБ 5

MCP сервер

Переменная Описание По умолчанию
ENABLE_MCP Включить MCP (Model Context Protocol) сервер false
MCP_PORT Порт MCP сервера 5772
MCP_TLS_INSECURE_SKIP_VERIFY Пропустить проверку TLS для MCP прокси false

LLM / AI-ассистент

Переменная Описание По умолчанию
ENABLE_LLM Включить AI-ассистента (Agent Chat) false
OLLAMA_URL URL сервера Ollama http://localhost:11434
OLLAMA_MODEL Имя модели Ollama qwen3:1.7b

AI-агент (ADK)

Переменная Описание По умолчанию
ADK_ENABLED Включить подсистему ADK-агента true
ADK_MAX_CONCURRENT_TASKS Максимум параллельных задач AI-агента 3
ADK_MAX_TOOL_ITERATIONS Максимум итераций инструментов на задачу 50
ADK_SESSION_TTL_HOURS Время жизни сессии агента в часах 24
A2A_ENABLED Включить протокол A2A (Agent-to-Agent) true

База данных

Переменная Описание По умолчанию
DB_USE Тип базы данных: pg или sqlite pg
DB_DSN Строка подключения к базе данных (пусто)
DB_ENABLE_AUDIT Включить аудит-логирование true
DB_ENABLE_VERSIONING Включить версионирование моков true

Кеш

Переменная Описание По умолчанию
USE_CACHE Включить слой кеширования true
CACHE_TYPE Тип кеша: inmemory или redis inmemory
REPO_LOG_LIMIT Лимит логов репозитория 3
REPO_INMEMORY_MAX_SIZE_MB Максимальный размер in-memory кеша в МБ 200
REPO_REDIS_HOST Хост Redis (пусто)
REPO_REDIS_PORT Порт Redis (пусто)
REPO_REDIS_PASSWORD Пароль Redis (пусто)

Аутентификация

Переменная Описание По умолчанию
AUTH_MODE Режим аутентификации: full или local full
AUTH_SESSION_EXPIRATION Срок действия сессии в часах 24
AUTH_BASE_URL Базовый URL для колбэков аутентификации http://localhost:5770
FIRST_ADMIN_LOGIN Имя администратора при первом запуске admin
FIRST_ADMIN_PASSWORD Пароль администратора при первом запуске admin
FIRST_ADMIN_EMAIL Email администратора при первом запуске (пусто)
COOKIE_SECURE Устанавливать флаг Secure на куки true

OAuth провайдеры

Рекомендация: Настраивайте OAuth-провайдеров через веб-интерфейс Админ-панели (Панель администрирования > Провайдеры авторизации) для поддержки горячей перезагрузки. Переменные окружения ниже поддерживаются для обратной совместимости и начальной загрузки.

Переменная Описание По умолчанию
OAUTH_GOOGLE_ENABLED Включить Google OAuth false
OAUTH_GOOGLE_CLIENT_ID Google OAuth client ID (пусто)
OAUTH_GOOGLE_SECRET Google OAuth client secret (пусто)
OAUTH_YANDEX_ENABLED Включить Yandex OAuth false
OAUTH_YANDEX_CLIENT_ID Yandex OAuth client ID (пусто)
OAUTH_YANDEX_SECRET Yandex OAuth client secret (пусто)
OAUTH_VK_ENABLED Включить VK OAuth false
OAUTH_VK_CLIENT_ID VK OAuth client ID (пусто)
OAUTH_VK_SECRET VK OAuth client secret (пусто)

LDAP / Active Directory

LDAP/AD аутентификация настраивается исключительно через веб-интерфейс Админ-панели (Панель администрирования > Провайдеры авторизации). Настройки хранятся в базе данных и применяются без перезапуска. Переменных окружения для LDAP нет — войдите под bootstrap-админом и завершите настройку в UI.

Email уведомления

Переменная Описание По умолчанию
EMAIL_ENABLED Включить исходящую почту false
SMTP_HOST Хост SMTP сервера (пусто)
SMTP_PORT Порт SMTP сервера 587
SMTP_USERNAME Имя пользователя SMTP (пусто)
SMTP_PASSWORD Пароль SMTP (пусто)
SMTP_USE_IMPLICIT_TLS Использовать implicit TLS (порт 465) false
EMAIL_FROM Адрес отправителя no-reply@mockarty.ru
EMAIL_FROM_NAME Отображаемое имя отправителя Mockarty
EMAIL_REPLY_TO Адрес для ответа (пусто)

Координатор Runner

Переменная Описание По умолчанию
RUNNER_COORDINATOR_ENABLED Включить координатор runner true
RUNNER_GRPC_PORT gRPC порт координатора 5773
RUNNER_GRPC_BIND_ADDR Адрес привязки gRPC координатора 0.0.0.0
RUNNER_HEARTBEAT_TIMEOUT Таймаут heartbeat для агентов 30s
RUNNER_TASK_TIMEOUT Максимальное время выполнения задачи 30m
RUNNER_GRPC_TLS_ENABLED Включить TLS для gRPC координатора false
RUNNER_GRPC_TLS_CERT_FILE Файл TLS сертификата (пусто)
RUNNER_GRPC_TLS_KEY_FILE Файл приватного ключа TLS (пусто)
RUNNER_GRPC_TLS_DIR Директория для автоматически сгенерированных TLS сертификатов .mockarty/tls
RUNNER_GRPC_TLS_CLIENT_CA_CERT CA сертификат клиента для mTLS (пусто)

Хаос-инженерия

Хаос-инженерия требует PRO-лицензии и подключённого кластера Kubernetes. Подробности см. в руководстве Хаос-инженерия.

Переменная Описание По умолчанию
K8S_MANAGEMENT Включить функции управления Kubernetes (автоопределяется в K8s-подах) (авто)

Контрактное тестирование

Контрактное тестирование проверяет соответствие моков спецификациям API. Подробности см. в руководстве Контрактное тестирование.

Контрактное тестирование включается пользователем в Настройках пользователя и не требует дополнительных переменных окружения. Прогоны контрактной валидации настраиваются через UI или API.

Лицензия

Лицензионные ключи вводятся через панель администратора: Администрирование → Лицензия. Переменные окружения для активации лицензии не нужны.

Безопасность

Переменная Описание По умолчанию
ALLOW_PROXY_TO_PRIVATE_IPS Разрешить проксирование на приватные/внутренние IP false
ENABLE_LOG_CLOSEST_MATCH Логировать ближайшее совпадение когда мок не найден true

Кластер

Переменная Описание По умолчанию
CLUSTER_MODE Включить кластеризацию/выбор лидера false
NODE_ID Уникальный идентификатор ноды (генерируется автоматически если пуст) (пусто)

Шина событий

Переменная Описание По умолчанию
EVENT_BUS_QUEUE_SIZE Размер внутренней очереди шины событий 1000
EVENT_BUS_RETRY_MAX Максимум попыток повтора для неудачных событий 3
EVENT_BUS_WORKER_COUNT Количество горутин-воркеров шины событий 2

Режим SQLite

Mockarty поддерживает SQLite для небольших развёртываний, не требующих PostgreSQL. Режим SQLite идеален для:

  • Развёртываний на одном сервере
  • Окружений разработки и тестирования
  • Быстрой оценки возможностей
# Прямой запуск
DB_USE=sqlite DB_DSN="/data/mockarty.db" ./mockarty

# Docker
docker run -d \
  --name mockarty \
  -p 5770:5770 \
  -e HTTP_BIND_ADDR=0.0.0.0 \
  -e DB_USE=sqlite \
  -e DB_DSN="/data/mockarty.db" \
  -e FIRST_ADMIN_PASSWORD=change_me \
  -v mockarty-data:/data \
  mockarty/mockarty:latest

SQLite использует режим WAL для конкурентного чтения с одним писателем.

Ограничения:

  • Нет поддержки распределённых resolver/runner — resolver-ноды требуют PostgreSQL через DB_DSN для общего доступа к базе данных, что невозможно с одним файлом SQLite
  • Некоторые запросы статистики дашборда могут возвращать пустые результаты на SQLite
  • Если DB_DSN не указан при DB_USE=sqlite, база создаётся в ~/.mockarty/data.db

Mock Resolver

Подробные инструкции по настройке см. в Руководстве по интеграциям.

Resolver-ноды обрабатывают трафик резолвинга моков, разгружая admin ноду. Направляйте весь мок-трафик (HTTP, gRPC и т.д.) на resolver-ноды; веб-интерфейс и API управления остаются на admin ноде.

Запуск напрямую

export COORDINATOR_ADDR=mockarty:5773
export API_TOKEN="mki_your_resolver_token"
export RESOLVER_NAME="resolver-1"
export DB_DSN="postgres://mockarty:password@localhost:5432/mockarty?sslmode=disable"
export HTTP_PORT=5780

./mockarty-resolver

Примечание: Resolver требует прямой доступ к базе данных (DB_DSN) для чтения определений моков. Он должен использовать ту же базу данных, что и admin-нода.

Запуск с Docker

resolver:
  image: mockarty/resolver:latest
  ports:
    - "5780:5780"   # Трафик резолвинга моков
    - "6780:6780"   # Дашборд
  environment:
    COORDINATOR_ADDR: mockarty:5773
    API_TOKEN: "mki_your_token"
    RESOLVER_NAME: "resolver-1"
    DB_DSN: postgres://mockarty:password@postgres:5432/mockarty?sslmode=disable
    HTTP_PORT: "5780"
  depends_on:
    - mockarty

Переменные окружения

Переменная Описание По умолчанию
COORDINATOR_ADDR gRPC-адрес admin ноды (host:port) (обязательно)
API_TOKEN Интеграционный токен (формат mki_*) (обязательно)
RESOLVER_NAME Отображаемое имя resolver mockarty-resolver
SHARED Общий resolver (получает трафик из всех неймспейсов) true
NAMESPACE Область неймспейса (когда не общий) (пусто)
HTTP_PORT HTTP порт для трафика резолвинга моков 5780
GRPC_PORT gRPC порт для трафика резолвинга моков 4780
DB_DSN Строка подключения PostgreSQL (обязательно) (обязательно)
CACHE_MAX_SIZE_MB Максимальный размер in-memory кеша в МБ 512
UI_PORT Порт дашборда resolver 6780
UI_ENABLED Включить дашборд resolver true
LABELS Метки resolver через запятую (пусто)
DASHBOARD_URL Публичный URL дашборда resolver (автоопределяется если пусто) (пусто)
LOG_LEVEL Уровень логирования: debug, info, warn, error info

Создание интеграционных токенов

Создайте токены resolver через API (требуется аутентификация администратора):

curl -X POST http://localhost:5770/api/v1/integrations \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"resolver-1","type":"mock_resolver"}'

Ответ содержит поле token (показывается один раз, сохраните немедленно). Формат токена: mki_*.

Совет: Получите YOUR_API_TOKEN в Настройки > API Токены в веб-интерфейсе после входа как администратор.


Runner Agent

Подробные инструкции по настройке см. в Руководстве по интеграциям.

Runner-агенты выполняют нагрузочные тесты и коллекции API-тестов. Они подключаются к admin ноде через gRPC на порту 5773.

Запуск напрямую

export COORDINATOR_ADDR=mockarty:5773
export API_TOKEN="mki_your_runner_token"
export RUNNER_NAME="runner-1"
export SHARED=true
export CAPABILITIES="api_test,performance"

./mockarty-runner

Запуск с Docker

runner:
  image: mockarty/runner:latest
  environment:
    COORDINATOR_ADDR: mockarty:5773
    API_TOKEN: "mki_your_runner_token"
    RUNNER_NAME: "runner-1"
    SHARED: "true"
    MAX_CONCURRENT_TASKS: "3"
    CAPABILITIES: "api_test,performance"
  depends_on:
    - mockarty

Переменные окружения

Переменная Описание По умолчанию
COORDINATOR_ADDR gRPC-адрес admin ноды (host:port) (обязательно)
API_TOKEN Интеграционный токен (формат mki_*) (обязательно)
RUNNER_NAME Отображаемое имя runner mockarty-runner
SHARED Общий runner (получает задачи из всех неймспейсов) true
NAMESPACE Область неймспейса (когда не общий) (пусто)
MAX_CONCURRENT_TASKS Максимум параллельных задач 3
CAPABILITIES Возможности через запятую api_test,performance
LABELS Метки runner через запятую для маршрутизации задач (пусто)
UI_PORT Порт дашборда runner 6770
UI_ENABLED Включить дашборд runner true
HEARTBEAT_INTERVAL Интервал heartbeat к координатору 10s
PERF_ENABLED Включить возможность нагрузочного тестирования true
DASHBOARD_URL Публичный URL дашборда runner (автоопределяется если пусто) (пусто)
LOG_LEVEL Уровень логирования: debug, info, warn, error info

Создание интеграционных токенов

curl -X POST http://localhost:5770/api/v1/integrations \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"runner-1","type":"test_runner"}'

Ответ содержит поле token (показывается один раз, сохраните немедленно). Формат токена: mki_*.

Область видимости Runner

  • Общие runner-ы (SHARED=true) — получают задачи из всех неймспейсов
  • Runner-ы неймспейса (SHARED=false, NAMESPACE=sandbox) — получают задачи только из своего неймспейса

Возможности

Возможность Описание
api_test Выполнение коллекций API-тестов
performance Выполнение нагрузочных тестов

Server Generator

Генератор серверов может работать как CLI-инструмент или как сервер-оркестратор.

Запуск оркестратора

./mockarty-server-generator orchestrator \
  -api-token mk_your_token \
  -http-admin-base-url http://localhost:5770 \
  -port 8888

Запуск оркестратора с Docker

server-generator:
  image: mockarty/generator:latest
  command: ["orchestrator", "-api-token", "mk_your_token", "-http-admin-base-url", "http://mockarty:5770", "-port", "8888"]
  ports:
    - "8888:8888"
  depends_on:
    - mockarty

Подробное использование генератора серверов описано в Руководстве по генератору кода.


Настройка TLS

Автоматически сгенерированные сертификаты

По умолчанию Mockarty генерирует самоподписанные TLS-сертификаты при первом запуске:

# Прямой запуск
HTTPS_ENABLED=true HTTPS_TLS_DIR=/opt/mockarty/tls ./mockarty

# Docker
docker run -d \
  -e HTTP_BIND_ADDR=0.0.0.0 \
  -e HTTPS_ENABLED=true \
  -e HTTPS_TLS_DIR=/app/tls \
  -v mockarty-tls:/app/tls \
  mockarty/mockarty:latest

Пользовательские сертификаты

# Прямой запуск
HTTPS_ENABLED=true \
HTTPS_CERT_FILE=/path/to/server.crt \
HTTPS_KEY_FILE=/path/to/server.key \
./mockarty

# Docker
docker run -d \
  -e HTTP_BIND_ADDR=0.0.0.0 \
  -e HTTPS_ENABLED=true \
  -e HTTPS_CERT_FILE=/certs/server.crt \
  -e HTTPS_KEY_FILE=/certs/server.key \
  -v /path/to/certs:/certs:ro \
  mockarty/mockarty:latest

TLS для gRPC координатора

Для защиты gRPC-канала координатора между admin и resolver/runner нодами:

RUNNER_GRPC_TLS_ENABLED=true \
RUNNER_GRPC_TLS_CERT_FILE=/certs/grpc-server.crt \
RUNNER_GRPC_TLS_KEY_FILE=/certs/grpc-server.key \
RUNNER_GRPC_TLS_CLIENT_CA_CERT=/certs/ca.crt \
./mockarty

Резервное копирование и восстановление

Mockarty включает встроенную систему резервного копирования, доступную в Панель администратора > Резервное копирование. Для PostgreSQL используется pg_dump/pg_restore, для SQLite — копирование файлов.

Официальный Docker-образ включает postgresql-client (pg_dump, pg_restore, psql), поэтому резервное копирование работает из коробки.

Ключевые возможности:

  • Запланированные бэкапы — настраиваются через cron-выражение (по умолчанию: ежедневно в 2:00)
  • Ручные бэкапы — создание по требованию из Панели администратора
  • Несколько форматовcustom (рекомендуется), plain, tar, directory
  • Сжатие — опционально, уменьшает размер файла бэкапа
  • Политика хранения — автоматическое удаление старых бэкапов через N дней
  • Скачивание / Восстановление — из Панели администратора или через API

Примеры API:

# Создать бэкап
curl -X POST http://localhost:5770/api/v1/admin/backups/create \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"config_id": "your-config-id"}'

# Скачать бэкап
curl http://localhost:5770/api/v1/admin/backups/download?path=backup_file.dump \
  -H "Authorization: Bearer $TOKEN" -o backup.dump

# Восстановить из загруженного файла
curl -X POST http://localhost:5770/api/v1/admin/backups/restore-from-file \
  -H "Authorization: Bearer $TOKEN" -F "file=@backup.dump"

Для Docker-развёртываний монтируйте постоянный том для хранения данных:

docker run -v /host/path/data:/app/data mockarty/mockarty:latest

Подробности см. в Руководстве по администрированию.


Проверки здоровья

Все компоненты предоставляют эндпоинты здоровья:

Компонент Эндпоинт Порт по умолчанию
Admin нода /health/live 5770
Mock resolver /health 5780
Runner agent /health 6770
Генерированные серверы /health варьируется

Пример проверки:

curl http://localhost:5770/health/live

Рекомендации для продакшена

  1. Используйте PostgreSQL — SQLite предназначен только для разработки и небольших односерверных развёртываний
  2. Установите сильные секреты — измените FIRST_ADMIN_PASSWORD с значения по умолчанию
  3. Используйте reverse proxy (nginx/Traefik) перед Mockarty для терминации TLS и маршрутизации
  4. Используйте Redis с CACHE_TYPE=redis для лучшей производительности admin-ноды при масштабировании
  5. Включите резервное копирование — монтируйте постоянный том для хранения бэкапов
  6. Используйте resolver-ноды для высоконагруженного резолвинга моков (разделяет мок-трафик от admin UI)
  7. Используйте runner-агенты для распределённого выполнения тестов
  8. Установите COOKIE_SECURE=true — включено по умолчанию, обеспечивает отправку кук только по HTTPS
  9. Оставьте ALLOW_PROXY_TO_PRIVATE_IPS=false — по умолчанию, предотвращает SSRF через функцию проксирования
  10. Установите HTTP_BIND_ADDR=0.0.0.0 в Docker/продакшене для приёма внешних подключений (по умолчанию localhost)
  11. Включите контрактное тестирование для проверки соответствия моков спецификациям API. См. руководство Контрактное тестирование.
  12. Используйте хаос-инженерию для тестирования устойчивости системы с помощью контролируемых экспериментов по внедрению сбоев. См. руководство Хаос-инженерия (требуется PRO-лицензия).

Развёртывание в Kubernetes

Для продакшен-окружений Kubernetes Mockarty предоставляет Helm-чарты и CRD-оператор, управляющий полным жизненным циклом кластера – масштабирование, обновления, проверки здоровья и начальная настройка токенов.

Быстрая установка через Helm

# Добавьте Helm-репозиторий Mockarty
helm repo add mockarty https://charts.mockarty.com
helm repo update

# Создайте секреты для базы данных и лицензии
kubectl create namespace mockarty
kubectl -n mockarty create secret generic mockarty-db \
  --from-literal=dsn="postgres://mockarty:secret@postgres:5432/mockarty?sslmode=require"
kubectl -n mockarty create secret generic mockarty-license \
  --from-literal=key="YOUR_LICENSE_KEY"

# Установите с файлом значений для кластера
helm install mockarty mockarty/mockarty \
  -n mockarty \
  -f values.cluster.yaml \
  --set admin.image.tag=latest \
  --set resolver.replicas=2 \
  --set runner.replicas=1

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

Компонент Порт по умолчанию Роль
Admin Node 5770 Admin UI, API, управление моками, gRPC-координатор
Mock Resolver 5780 (HTTP), 4780 (gRPC) Выделенный резолвинг моков для продакшен-трафика
Runner Agent 6770 Распределённое выполнение тестов и нагрузочное тестирование
Orchestrator 8888 API и UI оркестратора для генерации серверов

Все компоненты регистрируются на Admin Node через gRPC-координатор (порт 5773) с использованием интеграционных токенов. Health-пробы (GET /health) предварительно настроены в Helm-шаблонах.

Управление кластером через CLI

CLI Mockarty предоставляет команды для управления кластерами Kubernetes без kubectl:

# Просмотр статуса кластера (ноды, версии, здоровье)
mockarty-cli cluster status

# Масштабирование resolver-нод
mockarty-cli cluster scale resolver --replicas 4

# Плавное обновление до нового image tag
mockarty-cli cluster upgrade --tag 1.3.0

# Перезапуск конкретного компонента
mockarty-cli cluster restart runner

# Потоковый просмотр логов компонентов кластера
mockarty-cli cluster logs resolver --follow

Хаос-оператор

Для тестирования устойчивости внутри Kubernetes установите Mockarty Chaos Operator:

mockarty-cli chaos operator install --namespace mockarty-chaos

Хаос-оператор интегрируется с функцией Хаос-инженерия для внедрения сбоев (задержки, ошибки, удаление подов) непосредственно в ваши Kubernetes-нагрузки. Требуется PRO-лицензия.

Подробнее о конфигурации на основе CRD, автомасштабировании HPA и топологиях с несколькими нодами см. руководство Архитектура масштабирования.


Смотрите также