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

Установка (Docker)

Agate спроектирован для запуска в Docker. Точка входа — бинарь agate-server — корень композиции, который связывает контексты proxy, audit и policy. Он настраивается смонтированным файлом agate.toml (см. Конфигурацию).

1. Предпосылки

  • Запущенный AG-UI-агент, перед которым ставится Agate (его URL становится [proxy].agent_endpoint).
  • База PostgreSQL для журнала прозрачности (её URL становится [audit].database_url). Миграции выполняются автоматически при старте.

2. Получите образ

Образы публикуются в GHCR автоматически через CI на каждый push в main и на теги релизов:

docker pull ghcr.io/c3equalzz/agate:latest

Доступные теги: latest (ветка по умолчанию), vX.Y.Z / vX.Y (теги релизов) и sha-<commit> (каждая сборка — для закрепления точного коммита).

Сборка из исходников

Если предпочитаете собрать локально: docker build -t agate -f crates/agate-server/Dockerfile .

3. Напишите agate.toml

Возьмите за основу agate.example.toml:

[proxy]
agent_endpoint = "http://your-agent:9000/run"
bind = "0.0.0.0:8080"

[audit]
database_url = "postgres://agate@db:5432/agate"  # пароль через env, ниже

[policy.tools]
mode = "allow-all"

4. Запустите

Смонтируйте файл и укажите на него AGATE_CONFIG; секреты передавайте переопределениями окружения AGATE__*:

docker run --rm \
  -p 8080:8080 \
  -v "$PWD/agate.toml:/etc/agate/agate.toml:ro" \
  -e AGATE_CONFIG=/etc/agate/agate.toml \
  -e AGATE__AUDIT__DATABASE_URL='postgres://agate:secret@db:5432/agate' \
  ghcr.io/c3equalzz/agate:latest

Направьте фронтенд на http://localhost:8080 вместо агента — Agate пересылает каждый запрос агенту после инспекции.

5. Закрепите журнал прозрачности

При первом старте Agate создаёт новый журнал прозрачности и печатает его id:

created transparency log 3f6c…; set AUDIT_LOG_ID=3f6c… to reuse it

Задайте переменную окружения AUDIT_LOG_ID равной этому UUID, чтобы перезапуски дописывали в тот же журнал, а не создавали новый (-e AUDIT_LOG_ID="3f6c…").

Пример: Docker Compose

services:
  db:
    image: postgres:17
    environment:
      POSTGRES_USER: agate
      POSTGRES_PASSWORD: agate
      POSTGRES_DB: agate

  agate:
    image: ghcr.io/c3equalzz/agate:latest
    depends_on: [db]
    ports:
      - "8080:8080"
    volumes:
      - ./agate.toml:/etc/agate/agate.toml:ro
    environment:
      AGATE_CONFIG: /etc/agate/agate.toml
      AGATE__AUDIT__DATABASE_URL: "postgres://agate:agate@db:5432/agate"
      # AUDIT_LOG_ID: "…"   # задайте после первого запуска, чтобы переиспользовать журнал

Корректное завершение (graceful shutdown)

По SIGTERM (его шлёт рантайм контейнера при остановке) или SIGINT (Ctrl+C) Agate перестаёт принимать новые соединения, даёт завершиться текущим запросам, а затем сбрасывает очередь аудита — оставшиеся записи дописываются в журнал до выхода процесса. Безопасно для rolling-restart и остановки подов Kubernetes.

Далее — Конфигурация для полного справочника по ключам.