Федерация
Dockerfile
Docker Compose
Запуск бинаря
Mockarty — это набор компонентов. Тяните официальные образы из Docker Hub и собирайте нужную федерацию.
docker pull mockarty/mockarty:latest # Админ-нода + Web UI
docker pull mockarty/resolver:latest # Резолвер моков
docker pull mockarty/runner:latest # Нагрузка / функц. тесты
docker pull mockarty/generator:latest # Генератор серверов
docker pull mockarty/browser-runner:latest # UI / браузер (Playwright)
docker pull mockarty/mobile-runner:latest # Мобильные (нужно устройство/эмулятор)
docker pull mockarty/chaos-operator:latest # Хаос в Kubernetes
docker pull mockarty/redteam-runner:latest # Безопасность: red-team
docker pull mockarty/exploit-runner:latest # Безопасность: эксплойты
Серверная федерация — админ, резолвер и раннеры на общих PostgreSQL + Redis:
services:
postgres:
image: postgres:16-alpine
environment: { POSTGRES_DB: mockarty, POSTGRES_USER: mockarty, POSTGRES_PASSWORD: changeme }
volumes: [ pgdata:/var/lib/postgresql/data ]
healthcheck: { test: ["CMD-SHELL", "pg_isready -U mockarty"], interval: 5s }
redis:
image: redis:7-alpine
healthcheck: { test: ["CMD", "redis-cli", "ping"], interval: 5s }
mockarty: # admin node + Web UI + coordinator
image: mockarty/mockarty:${VERSION:-latest}
ports: ["5770:5770", "5772:5772", "5773:5773"]
environment:
DB_USE: pg
DB_DSN: postgres://mockarty:changeme@postgres:5432/mockarty?sslmode=disable
REPO_REDIS_HOST: redis
REPO_REDIS_PORT: "6379"
depends_on:
postgres: { condition: service_healthy }
redis: { condition: service_healthy }
resolver: # serves your mocks at scale
image: mockarty/resolver:${VERSION:-latest}
environment:
COORDINATOR_ADDR: mockarty:5773
API_TOKEN: ${RESOLVER_API_TOKEN} # create in admin UI -> API tokens
DB_DSN: postgres://mockarty:changeme@postgres:5432/mockarty?sslmode=disable
depends_on: [mockarty]
runner: # perf / functional tests
image: mockarty/runner:${VERSION:-latest}
environment:
COORDINATOR_ADDR: mockarty:5773
API_TOKEN: ${RUNNER_API_TOKEN} # create in admin UI -> API tokens
CAPABILITIES: api_test,performance
depends_on: [mockarty]
volumes: { pgdata: {} }
# 1) ядро — админ + БД + кеш
docker compose up -d postgres redis mockarty
# 2) откройте http://localhost:5770, создайте API-токены
# 3) поднимите раннеры с токенами
RESOLVER_API_TOKEN=... RUNNER_API_TOKEN=... docker compose up -d
Полная федерация со security-раннерами — docker-compose.distributed.yml в репозитории релизов .
Мобильные тесты — два пути. Реальные устройства (или эмулятор на вашей машине) подключаются через Device Console (карточка выше) — она одолжит телефон гриду. Для полностью автономного прогона в CI соберите образ с встроенным Android-эмулятором из нашего бинаря:
# положите рядом скачанный бинарь mockarty-mobile-runner-linux-amd64
FROM eclipse-temurin:17-jdk-jammy
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV PATH="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH"
RUN apt-get update && apt-get install -y --no-install-recommends \
curl unzip android-tools-adb libpulse0 libgl1 libnss3 libxcomposite1 libxcursor1 libxi6 \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p $ANDROID_SDK_ROOT/cmdline-tools \
&& curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o /tmp/c.zip \
&& unzip -q /tmp/c.zip -d $ANDROID_SDK_ROOT/cmdline-tools \
&& mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
RUN yes | sdkmanager --licenses >/dev/null \
&& sdkmanager "platform-tools" "emulator" "system-images;android-30;google_apis;x86_64" >/dev/null \
&& echo no | avdmanager create avd -n mockarty -k "system-images;android-30;google_apis;x86_64" --force
COPY mockarty-mobile-runner-linux-amd64 /app/mockarty-mobile-runner
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/mockarty-mobile-runner /app/entrypoint.sh
WORKDIR /app
ENTRYPOINT ["/app/entrypoint.sh"]
# ---- entrypoint.sh ----
#!/usr/bin/env bash
set -e
emulator -avd mockarty -no-window -no-audio -no-boot-anim -gpu swiftshader_indirect &
adb wait-for-device
until [ "$(adb shell getprop sys.boot_completed 2>/dev/null | tr -d '\r')" = "1" ]; do sleep 2; done
exec /app/mockarty-mobile-runner
docker build -t mockarty-mobile-emulator .
docker run -d --device /dev/kvm \
-e MOCKARTY_ADMIN_URL=http://YOUR_ADMIN:5770 \
-e MOCKARTY_RUNNER_TOKEN=YOUR_TOKEN \
mockarty-mobile-emulator
Эмулятору нужен /dev/kvm (аппаратное ускорение). GitHub-раннеры Linux это умеют — добавьте udev-права на /dev/kvm. Без эмулятора раннер берёт реальное устройство по локальному adb или удалённому: RUNNER_ADB_ENDPOINTS=tcp:host:5555.
Создайте Dockerfile рядом с загруженным бинарём:
FROM alpine:3.20
RUN apk add --no-cache ca-certificates tzdata curl
WORKDIR /app
COPY mockarty /app/mockarty
RUN chmod +x /app/mockarty
EXPOSE 5770 5772 5773
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost:5770/health/live || exit 1
ENTRYPOINT ["/app/mockarty"]
docker build -t mockarty .
docker run -d --name mockarty \
-p 5770:5770 -p 5772:5772 -p 5773:5773 \
-e DB_DSN="postgres://user:pass@host:5432/mockarty?sslmode=disable" \
-e HTTP_PORT=5770 \
mockarty
Полный стек с PostgreSQL и Redis:
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: mockarty
POSTGRES_USER: mockarty
POSTGRES_PASSWORD: changeme
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mockarty"]
interval: 5s
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
mockarty:
build: .
ports:
- "5770:5770" # HTTP / Web UI
- "5772:5772" # MCP
- "5773:5773" # Coordinator gRPC
environment:
DB_DSN: "postgres://mockarty:changeme@postgres:5432/mockarty?sslmode=disable"
REDIS_ADDR: "redis:6379"
REPO_TYPE: "composite"
HTTP_PORT: "5770"
depends_on:
postgres: { condition: service_healthy }
redis: { condition: service_healthy }
volumes:
pgdata:
Запуск бинаря напрямую (без Docker):
Web UI доступен на http://localhost:5770/ui/ после запуска