Сервер — управляемая Linux-машина, на которой MultiAgent разворачивает агентов и инструменты. Всё управление идёт по SSH: MultiAgent выполняет команды, передаёт файлы и читает статусы контейнеров, не требуя на сервере ничего, кроме базовой системы.
Добавление сервера
Кнопка «Добавить сервер» открывает форму: имя, хост, SSH-порт, пользователь и аутентификация — пароль или приватный PEM-ключ. Для соединений через бастион настраивается proxy jump: отдельные хост, порт, пользователь и учётные данные прыжка.
После сохранения доступен статус соединения: не проверено, OK или ошибка. Кнопка «Проверить подключение» проверяет ровно одно — доступ по SSH: получилось ли открыть сессию на сервере. Готовность сервера к развёртыванию показывает чек-лист проверок: он называет всё, чего не хватает, и предлагает исправление.
Onboarding-проверки
Кнопка «Проверить и исправить» (Check) на странице сервера открывает карточку-чек-лист: каждая проверка — отдельная строка с зелёной галочкой (готово), жёлтым предупреждением, красным крестом (ошибка) или серой пометкой «пропущено», а внизу — итог «Все проверки пройдены» либо «n из m проверок требуют внимания».
Строки чек-листа названы по роли службы, а не по имени продукта:
- Подключение по SSH — доступность соединения;
- Docker — установлен ли и запущен ли демон, корректен ли
daemon.json; - Папки на сервере — наличие папок для агентов, данных, домашних файлов, проектов, инструментов и временных файлов;
- Пользователь агента (agent, 999:999) — есть ли учётная запись с нужным uid/gid;
- Nginx — веб-сервер для маршрутизации;
- SSL-сертификат — выдан ли и не истекает ли (если защищённое соединение обеспечивает верхний прокси, проверка предложит указать публичный адрес сервера);
- Домашняя страница — панель карточек приложений в корне сервера (проверяется после Nginx и пропускается, если Nginx нет);
- Центральный вход (Authelia) — обязательная служба единого входа;
- База данных (Postgres) — общий экземпляр Postgres для агентов: установлен ли и запущен ли;
- Git-сервис (Forgejo) — встроенный Git-сервер;
- Сервис резервных копий (rsyncd) — контейнер для резервного копирования.
Если проверка даёт ссылку «Нажмите здесь, чтобы установить» (или «создать» / «заказать») — это исправление в один клик: оно запускает ту же одношаговую установку, что и соответствующая вкладка (Docker, папки, пользователь агента, Nginx, сертификат Let’s Encrypt, Postgres, Forgejo, бэкапы, домашняя страница, центральный вход). После успешного исправления проверки автоматически перезапускаются, и строка зеленеет. Проверка, чьи предпосылки отсутствуют (например, нет Docker или Nginx), помечается «пропущено» — она не считается, и ссылку исправления не предлагает. Кнопка центрального входа не трогает сертификат и порт HTTPS — только саму службу.
Некоторые строки ждут вашего ввода или простого действия. Строка «SSL-сертификат» без сертификатов предложит указать публичный адрес сервера вида https://ваш-домен/{слаг}, когда защищённое соединение обеспечивает верхний прокси, — или запросить сертификат Let’s Encrypt. Установленный, но остановленный Postgres чинится кнопкой запуска, а не переустановкой: данные при этом не трогаются.
Что MultiAgent умеет проверять и чинить:
- SSL-сертификат — нет сертификата → предупреждение со ссылкой, которая предлагает два пути: указать публичный адрес сервера, когда TLS снимает верхний прокси, или заказать сертификат Let’s Encrypt (если хост похож на домен; иначе — совет сделать самоподписанный); истекающий в течение 30 дней или истёкший — предупреждение без действия, достаточно обновить на вкладке Nginx; пока не задан порт HTTPS, сертификаты сохранены, но не раздаются;
- Центральный вход — обязательная служба: не установлен → предупреждение со ссылкой установки; установлен, но не запущен → предупреждение и переразвёртывание;
- Forgejo — внешний экземпляр (адрес не нашего вида) проверяется по учётным данным и установку не предлагает; для собственной установки адрес выводится сам — публичная подпапка
/forgejo/; пустая карточка заполняется автоматически (логинagents, автосоздание репозиториев, пароль генерируется); поле «Компания» задаёт организацию, в которой создаются и из которой видны репозитории агентов; - Сервис резервных копий — проверка пройдена, только когда контейнер запущен и отдаёт все семь модулей.
- Postgres — установленный, но остановленный экземпляр — это предупреждение с кнопкой запуска (а не «не установлен»); после запуска проверка сама убедится, что сохранённые учётные данные подходят.
Установка Docker
Если Docker на сервере отсутствует, MultiAgent установит его сам — одной кнопкой, с потоковым выводом команд в интерфейс. Там же можно отредактировать /etc/docker/daemon.json (например, зеркала реестра или логирование) — MultiAgent применит файл и перезапустит демон.
Для образов из частного реестра на сервере настраивается Registry Auth: пользователь и токен реестра, которые MultiAgent использует при pulling образов агентов и инструментов.
Папки сервера
MultiAgent хранит файлы агентов в нескольких папках сервера — все настраиваются, значения по умолчанию:
- Папка агентов —
/root/agents/docker: по подпапке на каждого агента с егоcompose.yml; - Папка данных —
/root/agents/data: данные агентов, у каждого своя подпапка, монтируется внутрь контейнера в/data; - Домашняя папка —
/root/agents/home: домашний каталог агента внутри контейнера,/home/agent; - Папка проектов —
/root/agents/projects: git-репозитории агентов, монтируются в/project; - Папка инструментов —
/root/agents/tools: файлы сервисов, развёрнутых из библиотеки инструментов; - Папка временных файлов —
/root/agents/tmp: черновая папка агента внутри контейнера (/tmp/agent) — сюда попадают кэши моделей и всё, что можно пересоздать; в резервные копии она намеренно не входит.
Единая структура папок упрощает бэкапы: все данные всех агентов сервера лежат в одном дереве каталогов. Уже созданные серверы сохраняют свои прежние пути — MultiAgent ничего не переносит на хосте.
Общие переменные окружения сервера
Если одну и ту же переменную окружения нужно задать всем развёртываниям сервера (например, часовой пояс или уровень подробности в журналах), её задают один раз в настройках сервера — она попадёт в конфигурацию каждого агента и приложения этого сервера. Значение, заданное у конкретного агента, всегда важнее общего: так можно сделать исключение для одного развёртывания. Подробнее — на странице Агенты.
Общий Postgres
Вместо отдельной SQLite-базы у каждого агента можно поднять общий Postgres на сервере: MultiAgent развернёт контейнер docker-compose (по умолчанию порт 5436), сохранит пароль и проверит соединение. Для агентов с включённым Postgres в их окружение автоматически подставляется строка подключения AGENT_DATABASE.
Git-сервер Forgejo
MultiAgent разворачивает на сервере Forgejo — собственный Git-сервер (внутренний порт 3200). Он доступен по подпапке /forgejo/ на том же домене сервера, а адрес MultiAgent выводит сам — вводить его вручную не нужно. Для каждого агента можно привязать существующий репозиторий или создать новый; SSH-ключи для доступа MultiAgent выпускает и хранит сам. Если в поле «Компания» указать организацию, все новые репозитории агентов создаются в ней (при отсутствии она создаётся автоматически), а списки репозиториев показывают её содержимое. Подробнее — в разделе Агенты.
Резервное копирование
Onboarding устанавливает на сервер rsyncd-контейнер с семью read-only модулями, покрывающими все папки сервера: docker, home, data, projects, tools, а также два dump-модуля — postgres и forgejo. Модуль tools забирает то, что не отдаёт ни один другой модуль: сертификаты nginx, состояние центрального входа и compose инструментов; его же подпапки postgres/backup и forgejo/backup исключены из выгрузки — эти дампы отдаются своими модулями, чтобы при полном скачивании они не копировались дважды. Дампы Postgres и Forgejo формируются на самом сервере (сторонние контейнеры складывают их в папки резервного копирования). Бэкапы забираются с сервера вашими клиентскими машинами по rsync — например, nightly-заданием на машине с бэкап-хранилищем:
rsync -avz rsync://backup@server-host:873/data/ /backups/server-host/data/
Готовые команды для скачивания всех семи модулей (Linux и Windows) собраны во вкладке Backup страницы сервера — их можно запускать без изменений. Пройти проверку бэкапа сервер может только когда контейнер запущен и отдаёт все семь модулей; если какого-то не хватает, проверка укажет на переустановку.
Nginx-роутинг и сертификаты
MultiAgent сам никогда не маршрутизирует запросы: на каждом сервере свой Nginx-контейнер (agents-nginx, образ nginx:alpine), который устанавливается и обновляется из вкладки Nginx страницы сервера. Конфигурация маршрутов — проекция базы: она пересобирается и применяется автоматически при каждом изменении (создали агента, продукт или инструмент — он сразу получил свою подпапку). Применение проходит без обрыва соединений: конфигурация проверяется и перезагружается внутри уже работающего веб-сервера, поэтому открытые страницы и живые чаты не рвутся.
- Пять видов маршрутов — агенты и продукты (read-only), инструменты с веб-интерфейсом (read-only), дополнительные ссылки агентов и продуктов (read-only: подпапка с портом со вкладки «Ссылки»), пользовательские маршруты на любой http(s)-адрес (единственный вид с ручным управлением: редактирование, отключение, удаление) и, когда установлен центральный вход, его производный маршрут
auth(read-only, без переключателя защиты); - Единое пространство имён — слаг первого уровня
[a-z0-9-]+на сервер для всех видов; системные пути MultiAgent (api, agents, servers, data и другие) зарезервированы; - Внутренняя сеть контейнеров — приложения адресуются по именам контейнеров в общей docker-сети; упавший сервис отдаёт 502 только на своей подпапке, остальные маршруты работают.
Сертификаты — три вида из той же вкладки: самоподписанный (становится запасным сертификатом), собственная пара PEM и Let’s Encrypt (ACME через сам Nginx, тестовая и рабочая CA, один запрос за раз). Подписи и ключи хранятся только на сервере — в базе лишь метаданные. Просрочка отслеживается при каждом обновлении конфигурации (renew за 30 дней до истечения). HTTPS-порт опционален: пока он пуст, сертификаты сохранены, но не раздаются и публикуется только HTTP. Запрос Let’s Encrypt при пустом порте сам включает его (443), так что выпущенный сертификат сразу обслуживается; выбранный вами порт или явно выключенный HTTPS не переопределяется. В локальном защищённом режиме весь HTTP (включая подпапки маршрутов) автоматически перенаправляется на HTTPS, кроме пути проверки ACME; когда сервер стоит за верхним обратным прокси, который снимает TLS, HTTP-слушатель продолжает отдавать маршруты как обычно. Сразу правее вкладки Nginx находится вкладка Авторизация — установка центрального входа (см. ниже).
Домашняя страница сервера
В корне сервера можно поднять домашнюю страницу — панель карточек, с которой открываются все приложения сервера. Это статичная панель: MultiAgent сам собирает её файл и загружает на сервер, а nginx отдаёт его в корне. Отдельный контейнер для неё не нужен — достаточно установленного Nginx; собственного входа у страницы нет, а при включённом центральном входе она закрывается вместе с остальными приложениями.
Карточки MultiAgent ведёт из своей базы: по карточке на каждого агента, продукт и инструмент с адресом — с реальными логотипами проектов, а у агентов и приложений в углу карточки выводятся значки их дополнительных ссылок (вкладка «Ссылки»). Когда на сервере установлен Forgejo, на панели появляется карточка Git, а последней всегда идёт карточка «Выйти»: она завершает сессию центрального входа, выходит из всех агентов и продуктов (их токены удаляются) и из самой страницы. Панель обновляется сама при каждом изменении — развернули агента или инструмент, и его карточка появилась; вкладка предлагает и ручное применение. Язык надписей на странице выбирается во вкладке: английский или русский, по умолчанию — язык самого MultiAgent.
Подробнее — на странице Домашняя страница сервера.
Центральный вход (вкладка «Авторизация»)
Чтобы посетитель входил один раз и получал доступ к любому защищённому приложению сервера, на сервере можно установить центральный вход — это вкладка «Авторизация» (Authelia), расположенная сразу правее вкладки Nginx. Вход — это служба-контейнер agents-auth с фиксированным слагом auth и адресом портала /auth/; собственный порт не публикуется, поэтому сначала устанавливается Nginx. Логин — agents, пароль генерируется автоматически и виден на вкладке; установка никогда не трогает сертификат и порт HTTPS.
Когда центральный вход активен, агенты и продукты закрываются «за центральным входом» по умолчанию, а инструменты с веб-интерфейсом и свои маршруты — по вашему выбору (переключатель). Один вход на странице входа открывает все защищённые приложения сервера — повторные логины не нужны.
Защита работает только при защищённом соединении (HTTPS): либо локальный сертификат и порт HTTPS из вкладки Nginx, либо шаблон адреса вида https://{база}/{слаг}, когда TLS снимает верхний обратный прокси (тогда свой сертификат не нужен). Иначе установленный вход остаётся неактивным. Обращение напрямую по адресу host:port в обход nginx не закрывается — у приложения сохраняется собственный вход. Служебные машинные пути /{слаг}/api/… и /{слаг}/svelteChatHub тоже остаются открытыми (у них своя авторизация по JWT или API-ключу). Приложения получают заголовки личности и секрет X-SSO-Token (сверяется с SSO_PROXY_TOKEN в окружении агента), поэтому подделать их извне нельзя.
Слаг auth зарезервирован на каждом сервере — нельзя создать агента, инструмент или маршрут с таким именем. Forgejo можно подключить к центральному входу (переключатель на вкладке Forgejo): на его странице входа появляется кнопка входа через центральный вход, а новые пользователи регистрируются автоматически из личности центрального входа; выключается так же обратно. Удаление центрального входа открывает защищённые маршруты, а его данные и секреты сохраняются — повторная установка их переиспользует. Подробнее о маршрутах и защите — в разделе Nginx-роутинг.
Шаблон URL агентов
Для адресации агентов используется шаблон URL с плейсхолдерами {slug}, {host} и {port}. Если шаблон имеет вид {база}/{slug}, его база становится публичной базой сервера — и публичный адрес каждого приложения выводится как {база}/{slug}/ (схема берётся из шаблона, поэтому сервер за внешним прокси получает https-ссылки без собственного сертификата). Прямой доступ http(s)://{хост}[:{порт}] остаётся запасным путём. Изменение шаблона URL или имени сервера запускает фоновый пересбор маршрутов nginx и заодно синхронизирует конфигурацию центрального входа с новым адресом.
https://apps.example.com/{slug}
Файловый менеджер
У каждого сервера есть встроенный файловый менеджер: просмотр дерева каталогов, чтение и редактирование файлов, загрузка и скачивание, переименование на месте, подсчёт размера и токенов текстовых файлов. Это позволяет поправить конфиг или посмотреть логи на сервере, не покидая MultiAgent.
Отдельная страница «Файловый менеджер» показывает две панели — каждая со своим сервером и своей папкой. Отметьте файлы и папки галочками в левой панели и нажмите «Копировать» — они перенесутся в папку правой панели. Панели могут смотреть на один сервер или на два разных: MultiAgent сам передаст файлы между серверами по своим сохранённым доступам, ничего настраивать между серверами не нужно. Перенос идёт в фоне, процент выполнения виден прямо в кнопке, а процесс можно отменить; одноимённые файлы заменяются, папки при совпадении имён объединяются. Пока копирование идёт, правая панель сама обновляется, так что прибывающие файлы видно на месте.
Рядом — кнопка «Терминал»: она открывает командную строку в папке, где вы сейчас находитесь. Команды выполняются на сервере, вывод идёт на экран построчно, история команд и прерывание работают привычно. Это удобно, чтобы быстро посмотреть состояние сервиса или разобраться с правами на файлы.
Передача сервера клиенту
Если сервер принадлежит клиенту, управление можно передать ему: на сервере разворачивается его собственный MultiAgent, и записи переезжают к нему — агенты, приложения, инструменты, маршруты и ключи доступа. Передача — разовая операция: она запускается со вкладки «Передача» на странице сервера, а предпросмотр заранее показывает, что переедет и что останется у вас. Запущенные приложения при этом не трогаются: ничего не останавливается и не переустанавливается.
После передачи маршрутизацией управляет экземпляр клиента, а у вас остаётся сам сервер: доступ по SSH, проверки, папки и очистка Docker. Заглянуть в экземпляр клиента можно кнопкой «Управление» в шапке страницы — вход выполняется сам, без пароля. Подробнее — на странице Передача сервера.