---
title: "Установка MultiAgent в Docker"
id: "1300"
type: "page"
slug: "docker"
published_at: "2026-08-15T21:46:31+00:00"
modified_at: "2026-10-04T03:50:50+00:00"
url: "https://pastukhov.com/agents/multiagent/docker"
markdown_url: "https://pastukhov.com/agents/multiagent/docker.md"
excerpt: "Pastukhov MultiAgent — центральный пульт управления флотом агентов. Он разворачивается одним Docker-контейнером, а управляемые серверы…"
---

# Установка MultiAgent в Docker

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

Не хотите читать всё это? Просто скиньте в любой ИИ-чат (Claude, ChatGPT и т.д.) ссылку на [https://pastukhov.com/agents/multiagent/docker.md](https://pastukhov.com/agents/multiagent/docker.md)
 или на [https://pastukhov.com/llms.txt](https://pastukhov.com/llms.txt)
 и попросите сгенерировать конфигурационные файлы и команды. Он прочитает документацию, задаст несколько вопросов о вашей настройке и выдаст готовую конфигурацию. Экономьте время — пусть модель читает за вас.

 Вы также можете связаться со мной через Telegram — я всегда рад помочь. И это не просто вежливость — мне действительно нравится общаться с единомышленниками, особенно если вы так же увлечены программированием, как и я.

 Pastukhov MultiAgent — центральный пульт управления флотом агентов. Он разворачивается одним Docker-контейнером, а управляемые серверы подключаются по SSH: MultiAgent сам установит на них Docker и всё необходимое. Ничего настраивать на серверах вручную не требуется. Приложения каждого сервера раздаются по подпапкам одного домена — например, `https://ваш-домен/agent1/`, `https://ваш-домен/research/` — благодаря Nginx-контейнеру (`agents-nginx`) на самом сервере: отдельные домены, сертификаты и веб-сервер под каждое приложение не нужны (см. [Nginx-роутинг](/agents/multiagent/docs/routes)
).

## Минимальные требования

Сам контейнер MultiAgent лёгкий: по умолчанию он использует встроенный SQLite, а PostgreSQL подключается опционально через переменную окружения. Достаточно любого Docker-хоста с 1 ГБ RAM.

Для каждого управляемого сервера требуется:

- Linux (Ubuntu/Debian) с SSH-доступом;
- доступ root или sudo — Docker и зависимости установит сам MultiAgent;
- подключение по паролю или приватному PEM-ключу.

## Docker Compose

Создайте файл `compose.yml` и запустите `docker compose up -d`:

```
services:
  multiagent:
    image: maxpastukhov/multiagent:min-latest
    container_name: multiagent
    ports:
      - "3990:80"
    volumes:
      - multiagent-data:/data
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=http://+:80
      - MULTIAGENT_BRAND=pastukhov
      - MULTIAGENT_DATA=/data
# опционально: собственный ассистент (Own Agent) и программный API
# - AGENT_API_URL=https://agents.example.com/my-agent
# - AGENT_API_KEY=your-agent-key
# - MULTIAGENT_HASH=<sha256 hex of the same key>
# опционально: архив аналитики в ClickHouse
# - MULTIAGENT_CLICKHOUSE_URL=http://clickhouse:8123
    restart: unless-stopped

volumes:
  multiagent-data:
```

После запуска интерфейс будет доступен на порту `3990`: `http://localhost:3990`.

## Переменные окружения

- **MULTIAGENT_DATABASE** — путь к SQLite-файлу или строка подключения PostgreSQL. По умолчанию `/data/data.db`. Если строка начинается с `Host=` или `Server=`, используется PostgreSQL.
- **MULTIAGENT_DATA** — корень постоянных данных (по умолчанию `/data`): база, ключи шифрования, лицензия, шаблоны инструментов.
- **MULTIAGENT_BRAND** — брендинг интерфейса: `pastukhov` для русской версии (значение по умолчанию в RU-образе).
- **MULTIAGENT_BASE_PATH** — подпапка, в которой размещён MultiAgent (например, `/multiagent`), когда верхний прокси передаёт путь как есть. Нужна только для размещения в подпапке; пусто — работа в корне домена. Второй способ — заголовок `X-Forwarded-Prefix` от прокси, когда подпапкой управляет он сам (см. [Nginx-роутинг](/agents/multiagent/docs/routes) ).
- **AGENT_LICENSE** — ключ лицензии (та же переменная, что у агентов). 30-дневный пробный ключ уже встроен в образ, а свою лицензию можно ввести сразу или позже — в диалоге лицензии в приложении.
- **AGENT_API_URL** / **AGENT_API_KEY** — подключение собственного ассистента (Own Agent): базовый адрес внешнего Xedant Agent и ключ, который агент принимает как `X-API-Key`.
- **MULTIAGENT_HASH** — отпечаток ключа программного API `/api/agent/*` (Agent API): сумма SHA-256 ключа строчными буквами. Сам ключ на сервере не хранится — сервер сравнивает отпечатки.
- **AGENT_TOOLS** — папка библиотеки шаблонов инструментов. Для сохранения при пересоздании контейнера рекомендуется `/data/tools`.
- **AGENT_PRODUCTS** — папка каталога продуктов (по умолчанию `/project/products`): одиннадцать готовых шаблонов — от самого MultiAgent до «Портала». Их список с портами — на странице [Продукты](/agents/multiagent/docs/products) .
- **MULTIAGENT_ERROR_REPORTING** — отправка отчётов об ошибках в службу сбора ошибок Errex. Установите `0`, чтобы выключить: тогда ничего не отправляется ни с сервера, ни из браузера.
- **ASPNETCORE_URLS** — порт внутри контейнера (по умолчанию `http://+:80`).
- **MULTIAGENT_CLICKHOUSE_URL** — опциональный адрес ClickHouse для архива аналитики (см. [Аналитика](/agents/multiagent/docs/analytics) ). Если задан, раз в минуту статистика чатов дописывается в архив, а внизу отчёта появляется кнопка «Дозагрузить статистику в ClickHouse».

MultiAgent можно разместить не только в корне домена, но и в подпапке — например, `https://ваш-домен/multiagent/`. Для этого задайте `MULTIAGENT_BASE_PATH=/multiagent` (со слэшем впереди и без слэша в конце): адреса страниц и команд API пересчитаются сами, а прежние ссылки без подпапки один раз перенаправятся в новое место. Если подпапкой управляет верхний прокси, переменная не нужна — он сообщает её заголовком `X-Forwarded-Prefix`. Подробнее — на странице [Nginx-роутинг](/agents/multiagent/docs/routes)
.

## Файл .env в корне проекта

Настройки можно менять, не трогая файл развёртывания: положите рядом с приложением файл `.env` со строками вида `КЛЮЧ=значение`. Мультиагент читает его сам — в образе это корень проекта, папка `/app` (её адрес задаёт переменная `MULTIAGENT_PROJECT_PATH`). Это удобно, когда не хочется править `compose.yml` или длинную команду `docker run`, например чтобы дописать адрес и ключ собственного ассистента.

- файл читается при запуске и **перечитывается на лету**: правки подхватываются без перезапуска. Исключение — то, что считывается один раз при старте (например, строка подключения к базе): для таких значений нужен перезапуск;
- значения из файла **важнее** переменных, заданных при развёртывании;
- файл держат вне репозитория: при первом появлении Мультиагент сам дописывает `.env` в `.gitignore`, потому что в нём обычно лежат секреты;
- `MULTIAGENT_PROJECT_PATH` в файле указывать нельзя: эта переменная определяет, где сам файл искать. Такое значение игнорируется, а в журнал пишется предупреждение.

Формат простой: строки `КЛЮЧ=значение`, комментарии с `#`, пустые строки; значение можно взять в кавычки. Это **не** тот `.env`, что передают флагу `--env-file` у `docker run` (см. ниже): тот файл читает Docker на вашей машине, а этот — сам Мультиагент.

## Свой агент (Own Agent)

MultiAgent может вести собственного ассистента — внешний Xedant Agent, подключаемый парой переменных окружения. Его интерфейс встроен в каждую страницу: блок в боковой панели, глобальная панель чата, очередь промптов и голосовой ввод. Настройка — это только переменные, никакого экрана в интерфейсе и ничего в базе:

- **AGENT_API_URL** / **AGENT_API_KEY** — исходящее направление (MultiAgent → агент): через них работает встроенный чат (запросы агент пересылает агенту и отдаёт события чатов). Ключ прикрепляется только на сервере и никогда не попадает в браузер;
- **MULTIAGENT_HASH** — входящее направление (агент → MultiAgent): отпечаток ключа программного API `/api/agent/*`, через который ассистент управляет серверами, агентами и инструментами. На стороне самого агента адрес Мультиагента приходит переменной `MULTIAGENT_URL`, а сам ключ — `MULTIAGENT_KEY`.

Направления работают независимо. Когда MultiAgent сам развёрнут как продукт, обе пары переменных проставляются автоматически (см. [Продукты](/agents/multiagent/docs/products)
). Подробнее — на странице [Собственный ассистент](/agents/multiagent/docs/own-agent)
.

## Хранение данных

Все постоянные данные живут в volume `/data` и переживают пересоздание контейнера. Volume обязателен — без него вы потеряете базу, ключи шифрования и активированную лицензию при первом же `docker compose down`.

- `/data/data.db` — база SQLite (если не используется PostgreSQL);
- `/data/keys/` — ключ подписи JWT и ключ управления, которым шифруются сохранённые ключи лицензий и учётные данные агентов;
- `/data/auth/` — ключи ASP.NET Data Protection;
- `/data/tools/` — шаблоны инструментов (при `AGENT_TOOLS=/data/tools`);
- `/data/ssl/` — сертификаты: самоподписанный (при `MULTIAGENT_SSL=auto`) и служебный ключ Let’s Encrypt;
- `/data/<бренд>/license.txt` — активированная лицензия.

## Первый вход

Первый пользователь регистрируется прямо в веб-интерфейсе: откройте `http://localhost:3990` и нажмите «Регистрация» на странице входа. Последующие аккаунты создаются так же — в интерфейсе. Того же можно добиться переменными `MULTIAGENT_LOGIN` и `MULTIAGENT_PASSWORD` (пароль — SHA256-хеш): при запуске MultiAgent создаст такого пользователя или обновит ему пароль. Вход работает через JWT-токены сроком 90 дней — снова входить придётся редко.

## Добавление первого сервера

После входа добавьте первый сервер: имя, хост, SSH-порт, пользователь и пароль или приватный ключ. MultiAgent проверит подключение, предложит установить Docker и проведёт сервер через onboarding-проверки. Подробнее — в разделе [Серверы](/agents/multiagent/docs/servers)
.

## Установка на Windows

Мастер установки ставит MultiAgent на Windows как **службу Windows**: она запускается с загрузкой системы, продолжает управлять серверами без входа пользователя и открывает веб-интерфейс по адресу `http://localhost:3991`. Нужны права администратора, а среда выполнения .NET не требуется. Подробнее — на странице [Установка на Windows](/agents/multiagent/docs/windows)
.

## Docker CLI с флагом —env-file

Можно запустить MultiAgent и без compose — командой `docker run`, сохранив переменные окружения в файле, который передаётся флагу `--env-file`:

```
# .env
ASPNETCORE_ENVIRONMENT=Production
ASPNETCORE_URLS=http://+:80
MULTIAGENT_BRAND=pastukhov
MULTIAGENT_DATA=/data
# опционально: собственный ассистент (Own Agent) и программный API
# AGENT_API_URL=https://agents.example.com/my-agent
# AGENT_API_KEY=your-agent-key
# MULTIAGENT_HASH=<sha256 hex of the same key>
# опционально: каталог продуктов
# AGENT_PRODUCTS=/data/products
# опционально: размещение в подпапке (когда прокси передаёт путь как есть)
# MULTIAGENT_BASE_PATH=/multiagent
# опционально: PostgreSQL вместо встроенного SQLite
# MULTIAGENT_DATABASE=Host=postgres;Port=5432;User Id=multiagent;Password=secret;Database=multiagent;
# опционально: архив аналитики в ClickHouse
# MULTIAGENT_CLICKHOUSE_URL=http://clickhouse:8123
# опционально: лицензионный ключ, если он у вас есть
# AGENT_LICENSE=
```

```
docker run -d \
  --name multiagent \
  --env-file .env \
  -p 3990:80 \
  -v multiagent-data:/data \
  --restart unless-stopped \
  maxpastukhov/multiagent:min-latest
```

Флаг `--env-file` считывает все переменные из файла. Отдельные значения можно переопределить дополнительными флагами `-e` после него, например `-e AGENT_LICENSE=your-key`.

[← Вернуться на главную раздела MultiAgent](/agents/multiagent)
