Быстрый старт
Запустить Voxagent за несколько минут
Voxagent поставляется бандлом — docker-compose.yml и
эталонный .env.example — прямо с этого сайта документации. Образы лежат
в приватном container registry registry.nodul.ru — доступ выдаётся по
read-only токену (см. ниже).
1. Скачать бандл
mkdir Voxagent && cd Voxagent
curl -O https://docs.voxagent.ru/cdn/docker-compose.yml
curl -O https://docs.voxagent.ru/cdn/.env.example
mkdir -p env-gen caddy
curl -o env-gen/generate.sh https://docs.voxagent.ru/cdn/env-gen/generate.sh
curl -o caddy/Caddyfile https://docs.voxagent.ru/cdn/caddy/Caddyfiledocker-compose.yml— полный стек сервисов (включает одноразовый сервисpostgres-init, который создаёт дополнительные БД/пользователей после того как Postgres становится healthy).env.example— эталонные переменные окруженияenv-gen/generate.sh— скрипт one-shot контейнера который генерирует готовый.envпод вашPUBLIC_HOST(см. шаги 4b и 4c)caddy/Caddyfile— конфиг Caddy reverse-proxy для опционального TLS-режима (используется только в 4c)
2. Запросить токен для реестра
Образы из registry.nodul.ru/voxagent/nodevoice/* требуют read-only токен. Токены выдаются
каждому клиенту по запросу — напишите нам на help@mail.voxagent.ru, и
мы пришлём токен.
После этого залогиньтесь на хосте — docker сам спросит логин и пароль:
docker login registry.nodul.ru/voxagent/nodevoice3. Настроить
cp .env.example .envБазовый .env.example уже содержит всё необходимое для локального запуска —
можно оставить как есть и поднимать стек. Ключи LLM/STT/TTS-провайдеров,
SMTP для Keycloak, биллинг, телефония и прочие интеграции — опциональны и
нужны только для соответствующего функционала.
Полный референс переменных — в Конфигурации.
4. Запустить стек
Apple Silicon / ARM64. Образы собраны под linux/amd64. Чтобы Docker
гарантированно использовал именно эту платформу (на Apple M1/M2/M3 — через
Rosetta), команды ниже используют префикс DOCKER_DEFAULT_PLATFORM=linux/amd64.
На системах с архитектурой x86_64 префикс не влияет на поведение и может
быть оставлен.
Подтяните актуальные образы, чтобы не использовать устаревший :latest,
закешированный при прошлом docker login:
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker compose pullДальше — три сценария запуска. Выберите тот, который соответствует вашей инфраструктуре.
4a. Локальная разработка (по умолчанию)
Сценарий: Compose запущен на той же машине, с которой вы открываете приложение в браузере. Стек работает «из коробки» — никаких дополнительных настроек не требуется.
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker compose up -dПриложение будет доступно по адресу http://localhost:4200.
4b. Удалённый хост, доступ по IP
Сценарий: Compose запущен на удалённой машине (cloud-инстанс, on-premise сервер, машина в локальной сети), а вы открываете приложение в браузере с другого устройства.
В этой конфигурации браузер по умолчанию обращается к localhost своего
устройства, а не к удалённому хосту. Чтобы публичные URL стека указывали
на правильный адрес, необходимо перегенерировать файл .env с указанием
адреса удалённого хоста:
# 1. На удалённом хосте — определите его IP-адрес:
curl -4 https://ifconfig.me # публичный IP (cloud-инстансы)
hostname -I | awk '{print $1}' # адрес в локальной сети (Linux)
# 2. Сгенерируйте .env с указанием этого адреса:
DOCKER_DEFAULT_PLATFORM=linux/amd64 PUBLIC_HOST=10.0.0.5 \
docker compose run --rm env-gen
# 3. Запустите стек:
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker compose up -denv-gen — служебный одноразовый контейнер, который генерирует .env
из шаблона .env.example. При обычном docker compose up он не
запускается (находится за профилем tools) — вызывается только явной
командой.
4c. Удалённый хост, доступ по доменному имени с TLS
Сценарий: стек обслуживается через настоящий домен с HTTPS, например
https://app.dev.voxagent.ru, https://api.dev.voxagent.ru
и т. д.
Настройка DNS
Все поддомены должны указывать на один и тот же IP — публичный адрес вашего хоста. Маршрутизацию между сервисами выполняет Caddy внутри стека. Доступны два варианта DNS-конфигурации.
Вариант A. Wildcard-запись (рекомендуется)
| Тип | Имя | Значение |
|---|---|---|
| A | *.dev.voxagent.ru | <IP хоста> |
| A | dev.voxagent.ru | <IP хоста> (опционально, для корневого домена) |
Вариант B. Отдельные A-записи для каждого поддомена
| Тип | Имя | Сервис |
|---|---|---|
| A | app.dev.voxagent.ru | Angular Client (фронтенд приложения) |
| A | widget.dev.voxagent.ru | Angular Widget (встраиваемый виджет) |
| A | api.dev.voxagent.ru | ASP.NET Backend (REST API) |
| A | identity.dev.voxagent.ru | Keycloak (аутентификация / OAuth) |
| A | livekit.dev.voxagent.ru | LiveKit (WebRTC + WebSocket) |
| A | docs.dev.voxagent.ru | Документация |
| A | s3.dev.voxagent.ru | MinIO S3 API |
| A | s3-console.dev.voxagent.ru | MinIO Web Console |
| A | lago.dev.voxagent.ru | Lago Billing UI |
| A | lago-api.dev.voxagent.ru | Lago Billing API |
| A | webhooks.dev.voxagent.ru | Webhook Receiver |
| A | kafka-ui.dev.voxagent.ru | Kafka UI (опционально, для администрирования) |
После создания записей дождитесь распространения DNS (обычно 5-30 минут).
Проверить можно командой dig +short app.dev.voxagent.ru — должен
вернуться указанный IP-адрес.
Конфигурация TLS
Caddy поддерживает два режима выпуска сертификатов:
- Let's Encrypt — публично-доверенные сертификаты, без предупреждений
в браузере. Используется по умолчанию, если
PUBLIC_HOSTуказан как реальный домен. Требует, чтобы порт80хоста был доступен из интернета (для HTTP-01 challenge). - Локальный CA Caddy — Caddy выпускает собственный root CA и
сертификаты от него. Используется автоматически для
PUBLIC_HOST=localhost. На каждом устройстве, с которого открывается приложение, root CA необходимо добавить в системное хранилище доверенных сертификатов командойdocker compose exec caddy caddy trust(выполняется в контейнере; для хост-системы потребуется извлечь и установить сертификат вручную).
Запуск стека
# 1. Сгенерируйте .env (env-gen автоматически переключит Caddy на Let's
# Encrypt при указании реального домена):
DOCKER_DEFAULT_PLATFORM=linux/amd64 PUBLIC_HOST=dev.voxagent.ru PUBLIC_MODE=tls \
CADDY_LE_EMAIL=admin@dev.voxagent.ru \
docker compose run --rm env-gen
# 2. Запустите стек с профилем tls (включает Caddy):
DOCKER_DEFAULT_PLATFORM=linux/amd64 COMPOSE_PROFILES=tls docker compose up -dПараметр CADDY_LE_EMAIL — email-адрес, на который Let's Encrypt будет
присылать уведомления об истечении срока сертификатов. Если он не задан,
env-gen использует значение admin@${PUBLIC_HOST}.
После запуска приложение доступно по адресам:
https://app.dev.voxagent.ru, https://identity.dev.voxagent.ru,
https://api.dev.voxagent.ru и т. д.
Полный процесс выпуска сертификатов для всех поддоменов занимает 5-10
минут на первом запуске. За прогрессом можно следить в логах:
docker compose logs -f caddy.
Первый запуск занимает несколько минут — Postgres инициализируется, Keycloak импортирует realm, Lago накатывает миграции и сидит биллинг-организацию.
5. Дождаться angular-client
Проверить статус сервисов:
docker compose ps -a --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}"Как только строка angular-client покажет Up ... (healthy) —
приложение готово, открывайте
http://localhost:4200.
6. Создать пользователя
На странице входа нажмите Регистрация и создайте учётную запись.
В поставке для docker compose подтверждение email по умолчанию
отключено (KEYCLOAK_VERIFY_EMAIL=false), регистрация моментальная.
Включить подтверждение email
Если хотите, чтобы пользователи подтверждали почту перед первым входом,
в .env:
- Включите флаг:
KEYCLOAK_VERIFY_EMAIL=true - Заполните SMTP-реквизиты Keycloak (с них уходят письма
верификации и сброса пароля):
KEYCLOAK_SMTP_HOST=smtp.example.com KEYCLOAK_SMTP_PORT=465 KEYCLOAK_SMTP_FROM=no-reply@example.com KEYCLOAK_SMTP_USER=<smtp-логин> KEYCLOAK_SMTP_PASSWORD=<smtp-пароль> KEYCLOAK_SMTP_SSL=true # 465 KEYCLOAK_SMTP_STARTTLS=false # переключите на true для порта 587 - Перезапустите Keycloak, чтобы применить:
docker compose up -d --force-recreate keycloak
Другие точки входа
Когда стек полностью поднялся:
| Сервис | URL |
|---|---|
| Voxagent app | http://localhost:4200 |
| Keycloak admin | http://localhost:8081 |
| Backend Swagger | http://localhost:8040/swagger |
| Lago billing UI | http://localhost:4203 |
| MinIO console | http://localhost:9001 |
| Kafka UI | http://localhost:8084 |
Порты настраиваются в .env в секции HOST PORTS — меняйте любой, если
на вашей машине он уже занят.
Что дальше
- Требования — подобрать хост под ожидаемую нагрузку.
- Конфигурация — полный референс переменных.
- Установка — другие варианты развёртывания (managed, Kubernetes).