Установка (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 и на
теги релизов:
Доступные теги: 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:
Задайте переменную окружения 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.
Далее — Конфигурация для полного справочника по ключам.