Что упало и кто от этого зависит?
Клик по нездоровому контейнеру подсвечивает зависимые ноды; unhealthy, exited и restarting пульсируют — без ручного обхода десятков inspect.
Self-hosted · без агентов · WebSocket
Digraph показывает контейнеры, сети и тома в реальном времени, считает трафик на рёбрах, разбирает образы и стеки с AI и управляет окружением — из одного браузера, без установки агентов внутрь контейнеров.
Проблема
docker inspect, инцидент уже идётТопология Docker живёт в головах и в выводе терминала. Digraph превращает её в общую картину, которую видно с первого взгляда.
Клик по нездоровому контейнеру подсвечивает зависимые ноды; unhealthy, exited и restarting пульсируют — без ручного обхода десятков inspect.
Трафик анимирован на рёбрах и окрашен по загрузке канала. CPU, RAM и I/O видны прямо на нодах, рядом — спарклайн за последние 30 сэмплов.
Исторические срезы и дифф показывают добавленные, удалённые и изменённые контейнеры, сети и тома. Логи среза сохраняются даже после compose down.
Возможности
Не только «посмотреть», но и понять, объяснить и починить: от живого графа до AI-заключения по слоям образа.
WebSocket и инкрементальные diff-обновления: изменения видны мгновенно, без поллинга. Кластеры проектов, миникарта, поиск, фильтры и drag & drop.
Анимированные «пакеты» на рёбрах, цвет по загрузке канала, CPU/RAM и скорость I/O текстом на ноде. Исторические метрики хоста — отдельной серией.
Срезы состояния с таймлайном, серия метрик между изменениями, сравнение срезов и хвосты логов каждого контейнера — доступны и после удаления стека.
Заключение по всей топологии, узлу или слоям образа: базовый образ, установленные пакеты, entrypoint, env, монтирования. Trivy-скан с CVE подключается автоматически.
Единая панель инфраструктуры: контуры (dev/stg/prod) и серверы плитками, граф с drag & drop, нагрузка CPU/RAM и состояние подключения каждого сервера.
Плитки контуров (dev / stage / prod) с серверами, подключение по токену и единая точка входа для нескольких Docker-хостов. Ключи контуров шифруются на портале.
CRUD compose-файлов, up/down/restart/pull как фоновые задачи с выводом, визуальный редактор с drag & drop и экспорт docker-compose.yml из запущенных контейнеров.
AES-256-GCM и envelope-шифрование с мастер-ключом, авто-push при старте контейнера. Перед записью Digraph сверяет путь с mount'ами и честно сообщает, куда файл доставить нельзя.
Правила по unhealthy, stopped, restarting, CPU/RAM хоста и устаревшему сбору. HMAC-подпись, retry-очередь, а также каналы Slack, PagerDuty и SMTP на портале.
Веб-контейнер без docker.sock: только типизированный агент. PRIVILEGES, redaction логов, аудит вызовов, TLS и OIDC SSO. Fail-closed авторизация.
Архив SQLite и project_data с манифестом и SHA-256, расписание и ретенция. Двухфазный restore с проверкой архива и явным подтверждением.
xterm.js прямо в браузере, live-логи с фильтром и подсветкой, дерево файлов тома и скачивание как .tar.gz. Опасные действия — с подтверждением.
Как это работает
Контур — это лёгкий API-only сервис с собственной SQLite. Портал хранит инвентарь, ключи и сессии, проксирует REST и WebSocket и не требует доступа к Docker.
Без агентов внутри workload'ов. Digraph читает Docker API снаружи, через отдельный прокси. Ничего не устанавливается в ваши контейнеры.
Sidecar'ы по назначению. Сканер томов, Trivy, метрики хоста и compose-runner вынесены в отдельные контейнеры с минимальными правами.
История локально. Состояние и метрики живут в SQLite контура — без внешней базы и обязательного SaaS.
Безопасность
Инструмент наблюдения не должен становиться самой опасной частью инфраструктуры. Поэтому доступ к Docker идёт через типизированный агент, а опасные действия выключены по умолчанию.
PRIVILEGES=read-only; exec, actions, push и compose включаются осознанно.docker-api с allow-list путей и аудитом.PRIVILEGES = read-only
ALLOWED_ORIGINS = https://digraph.example
SECRET_MASTER_KEY = ••••••••••••••••
AUDIT = on
DOCKER_SOCKET = не монтируется
Редакции
Community — всё для одного Docker-сервера: живой граф, история, compose, секреты, бэкапы и Trivy. Enterprise добавляет AI-анализ, SSO, мониторинг доступности контуров и мультихост-дашборд. Одна сборка, редакция — по офлайн-лицензии.
| Возможность | Community | Enterprise |
|---|---|---|
| Граф, история, compose, секреты, бэкапы | ✓ | ✓ |
| AI-анализ графа и стека | — | ✓ |
| Мультихост-дашборд и несколько контуров | один сервер | ✓ |
| OIDC SSO | — | ✓ |
| Мониторинг доступности и дежурные каналы | — | ✓ |
| Поддержка и SLA | community | ✓ |
Состав и условия редакций ещё формируются: всё, что отмечено в Community, уже реализовано в self-hosted-версии. Enterprise-функции — направление развития и предмет отдельного соглашения.
Быстрый старт
Нужен только Docker. Образы уже собраны и опубликованы в registry, на сервере остаются compose-файлы и секреты. Полное руководство — установка из образов.
# 1. релизные образы
docker pull hub.docker-infra.ru/digraph/contour:v0.1.0
# 2. контур: конфиг и секреты
cd deploy/contour
cp .env.example .env
./init-secrets.sh
# 3. в .env: VERSION=v0.1.0 и HOST_IP
docker compose up -d
# 4. открыть в браузере
http://<host>:9090 # контур
#!/usr/bin/env sh
# Generate the contour bootstrap secrets once.
#
# The app runs as uid 100 / gid 101 inside the image, so plain `chmod 600`
# files owned by the deploy user are unreadable in the container. The helper
# container fixes ownership without requiring root on the host.
set -eu
cd "$(dirname "$0")"
mkdir -p project_data secrets
for name in auth_token jwt_signing_key secret_master_key internal_token; do
if [ ! -s "secrets/$name" ]; then
openssl rand -hex 32 > "secrets/$name"
fi
done
docker run --rm -v "$PWD/secrets:/s" alpine \
sh -c 'chown -R 100:101 /s && chmod 700 /s && chmod 600 /s/*'
echo "contour secrets ready in $PWD/secrets"
Портал: cd deploy/portal && ./init-secrets.sh && docker compose up -d.
Проверка: curl <host>:9090/api/ready.
hub.docker-infra.ru/digraph/*; версия фиксируется в VERSION. Обновление — сменить версию, docker compose pull && up -d.
./init-secrets.sh создаёт auth_token, jwt_signing_key, secret_master_key и internal_token с нужным владельцем. SECRET_MASTER_KEY не теряйте.
deploy/portal слушает loopback; поставьте его за TLS-прокси и добавьте контур в UI по адресу и токену.
Дальше
Разверните Digraph на стенде и откройте /#/app — дальше всё видно.