---
title: "Инструменты"
id: "1313"
type: "page"
slug: "tools"
published_at: "2026-08-15T21:48:58+00:00"
modified_at: "2026-10-04T10:26:43+00:00"
url: "https://pastukhov.com/agents/multiagent/docs/tools"
markdown_url: "https://pastukhov.com/agents/multiagent/docs/tools.md"
excerpt: "Инструменты — быстрое развёртывание Docker-сервисов на управляемые серверы по шаблонам. Сервис (Postgres, Redis, nginx, что…"
---

# Инструменты

[https://pastukhov.com/agents/multiagent/docs/tools.md](https://pastukhov.com/agents/multiagent/docs/tools.md)

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

## Два уровня

- **Библиотека шаблонов** (раздел «Инструменты») — глобальная, хранится на диске 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 }}` (папка временных файлов), `{{ server_host }}`, `{{ server_name }}` (имя сервера) и другие. Используйте `{{ instance_slug }}` в `container_name`, чтобы два экземпляра одного шаблона сосуществовали на сервере.

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

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

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

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

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

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

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

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

[← Оглавление документации](/agents/multiagent/docs)
