Инструменты

Инструменты — быстрое развёртывание Docker-сервисов на управляемые фабрики по шаблонам. Сервис (Postgres, Redis, nginx, что угодно) описывается один раз как шаблон, а затем разворачивается сколько угодно раз — каждый экземпляр со своими настройками. В библиотеке поставляются готовые встроенные инструменты — Dozzle, Watchtower, pgAdmin, Playwright, Redis и Prometheus — с реальными логотипами проектов.

Два уровня

  • Библиотека шаблонов (раздел «Инструменты») — глобальная, хранится на диске MultiAgent в папке AGENT_TOOLS и общая для всех фабрик. Шаблоны редактируются прямо в интерфейсе: манифест, файлы и compose.yml — как сырой текст;
  • Экземпляры на фабрике (страница фабрики → «Инструменты на этой фабрике») — развёрнутые копии: жизненный цикл, статусы, логи, файлы и переменные каждого экземпляра.

Структура шаблона

Каждый шаблон — папка со слагом из строчных букв, цифр и дефисов:

{AGENT_TOOLS}/
  redis/                     ← слаг шаблона = имя папки
    tool.json                ← название, описание, иконка, категория, переменные
    compose.yml              ← Scriban-шаблон
    redis.conf               ← произвольные дополнительные файлы
    init/
      01-init.sh             ← вложенные подпапки поддерживаются

Переменные описываются в tool.json со схемой типов:

  • string — текстовое поле;
  • secret — поле-пароль: значение шифруется в базе и маскируется в интерфейсе;
  • int — числовое поле;
  • choice — выпадающий список из заданных опций;
  • bool — переключатель да/нет.

Переменная может объявлять вариант SSO — опцию «вход через центральный вход фабрики». Когда центральный вход на целевой фабрике активен, диалог развёртывания подставляет именно этот вариант (без него — обычное значение по умолчанию), и экземпляр рождается уже защищённым «за центральным входом». Поля могут быть и скрыты условием (when): такая переменная не показывается и не проверяется ни при развёртывании, ни при редактировании.

Пример — встроенный шаблон Dozzle: способ входа выбирается переменной auth_provider (simple — собственный пароль Dozzle, forward-proxy — вход через центральный вход), а логин и пароль запрашиваются только в режиме собственного пароля — развёртывание через центральный вход не требует учётных данных. У pgAdmin так же устроен выбор auth_sources: internal — обычная форма с email и паролем, webserver — вход через центральный вход. Переключение способа входа обратно на пароль (например, у Dozzle на simple) снова потребует заполнить пароль в том же диалоге.

Все контейнеры, которые MultiAgent ставит на фабрику — агенты, приложения, инструменты и сами службы, — помечаются названием фабрики. Если вы смотрите несколько фабрик в одном Dozzle, контейнеры автоматически собираются в группы по фабрикам.

Если библиотека пуста, при первом запуске MultiAgent наполняет её примерами: redis, pgAdmin, dozzle и watchtower. Каждый шаблон несёт свой логотип (logo.svg/logo.png — настоящая эмблема проекта), который каталог показывает вместо значка-глифа. Примеры можно править — затирается библиотека только если она пуста.

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

  1. Выберите шаблон и фабрику — откроется форма с переменными шаблона;
  2. Заполните значения (секреты сразу шифруются) и посмотрите предпросмотр собранных файлов compose против введённых переменных;
  3. MultiAgent соберёт все файлы шаблона через Scriban, скопирует их в папку инструментов фабрики и выполнит docker compose up -d. Имя compose-проекта — короткое имя экземпляра, поэтому экземпляры изолированы по сетям и томам.

В шаблонах доступны значения переменных плюс встроенные подстановки: {{ instance_slug }}, {{ instance_name }}, {{ data_folder }}, {{ tools_folder }}, {{ temp_folder }} (папка временных файлов), {{ factory_server }} (адрес машины фабрики), {{ factory_name }} (имя фабрики) и другие. Используйте {{ instance_slug }} в container_name, чтобы два экземпляра одного шаблона сосуществовали на фабрике.

Инструмент, у шаблона которого объявлен веб-порт, становится публично доступным по подпапке фабрики {база}/{слаг}/ через Nginx — та же проекция маршрутов, что и для агентов (маршрут появляется вместе с экземпляром и исчезает с его удалением). Без веб-порта инструмент остаётся на прямом адресе http://{хост}:{порт}. Подробнее — Маршруты.

Порты нового экземпляра закрыты по умолчанию: снаружи он открыт только по подпапке фабрики, а прямой адрес хост:порт начинает работать после переключателя «Публичные порты» — в диалоге развёртывания или у самого экземпляра на странице фабрики. Маршрут через Nginx работает в обоих случаях: он ведёт к контейнеру внутри общей сети фабрики. Экземпляры, развёрнутые раньше, остались публичными — их это не затронуло.

Когда на фабрике включён центральный вход, инструмент с веб-интерфейсом можно закрыть «за центральным входом» — переключатель на экземпляре (страница фабрики → «Инструменты на этой фабрике»). В отличие от агентов и продуктов, которые закрыты по умолчанию, инструменты защищаются только по вашему выбору: посетитель один раз входит на странице входа фабрики, и инструмент открывается без собственного логина; прямой доступ по адресу host:port сохраняет собственный вход инструмента. Экземпляр, развёрнутый через SSO-вариант шаблона, рождается уже защищённым — без отдельного переключателя. Без активного центрального входа всё работает как раньше: собственные логины и пароли инструментов.

Жизненный цикл экземпляра

  • Запустить / Остановить / Перезапустить / Pull — управление контейнером, файлы не трогаются;
  • Пересоздать — единственная операция, пересобирающая файлы из шаблона с сохранёнными переменными. Ручные правки файлов будут перезаписаны — интерфейс предупреждает об этом заранее;
  • Удалить — останавливает и удаляет контейнер, его файлы и именованные тома.

После развёртывания файлы экземпляра на машине свободны для правок — через вкладку «Файлы» экземпляра или по SSH. Экземпляры — обычные Docker-контейнеры, поэтому переиспользуют знакомый UX агентов: кнопки жизненного цикла, бейджи статусов, просмотр логов и файловый браузер с прогрессом операций через SignalR.

Персистентность библиотеки

По умолчанию AGENT_TOOLS указывает на /project/tools — внутри контейнера, без сохранения при пересоздании. Чтобы шаблоны переживали пересборку контейнера, укажите AGENT_TOOLS=/data/tools: volume /data сохраняется между пересозданиями. Так же устроен и каталог продуктов — папка AGENT_PRODUCTS с шаблонами всех одиннадцати приложений: от Мультиагента до Портал-агента, включая Тест-агент, Новостной и Портал.

Prometheus: метрики фабрики

Встроенный шаблон Prometheus — база временных рядов и сборщик метрик. Она разворачивается в общей сети фабрики, открывается по своей подпапке домена и сразу собирает метрики приложения MultiAgent этой фабрики: адрес и учётные данные прописываются сами, вручную ничего настраивать не нужно. Если приложения на фабрике ещё нет, служба всё равно развернётся, а сборщик начнёт работать, когда оно появится.

Способ входа выбирается переменной auth_provider: basic — собственные логин и пароль Prometheus, которые запрашивает и его интерфейс, и его программный адрес; forward-proxy — центральный вход фабрики, при котором адрес запросов открыт приложениям этой фабрики. Приложения на фабрике получают адрес службы автоматически (у самого MultiAgent — только адрес, у Портал-агента — ещё и учётные данные, пока включён собственный пароль), так что графики и сводки в приложениях можно строить без ручной проводки.

Удаление службы ничего не ломает: строки связи уходят из настроек приложений при их следующем пересоздании, а сами данные и сеансы остаются. Подробнее о самом адресе метрик — на странице Аналитика и выгрузки.

← Оглавление документации