Настройка своего сервера
Переменные окружения открытого ядра Eggent, обратный прокси с HTTPS для VPS, Telegram-вебхук, исходящий прокси и правила безопасности.
Почти всё настраивается в интерфейсе Eggent, и файл .env не обязателен. Переменные окружения нужны для того, что должно быть известно до запуска: адрес, порт, запасные ключи.
Переменные окружения
Полный список — в .env.example в репозитории. Основные:
| Переменная | По умолчанию | Для чего |
|---|---|---|
APP_BIND_HOST |
127.0.0.1 |
На каком адресе хоста слушает Docker. 0.0.0.0 — только осознанно |
APP_PORT |
3000 |
Порт на хосте |
APP_BASE_URL |
http://localhost:3000 |
Публичный адрес — для вебхуков и ссылок |
EGGENT_AUTH_SECRET |
создаётся в data/settings/ |
Секрет подписи сессий |
EXTERNAL_API_TOKEN |
не задан | Запасной токен для внешнего API |
TELEGRAM_BOT_TOKEN |
не задан | Токен бота, если не хочешь вводить его в интерфейсе |
TELEGRAM_WEBHOOK_SECRET |
не задан | Секрет вебхука Telegram |
TELEGRAM_DEFAULT_PROJECT_ID |
не задан | Проект по умолчанию для Telegram |
OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, OPENROUTER_API_KEY |
не заданы | Запасные ключи провайдеров |
EGGENT_STT_ENABLED, EGGENT_STT_MODEL, EGGENT_STT_LANGUAGE |
1, base, auto |
Распознавание речи |
HTTPS_PROXY, HTTP_PROXY, NO_PROXY |
не заданы | Исходящий трафик через прокси |
EGGENT_LEARNING |
включено | off не даёт агенту сохранять заметки и навыки из разговоров (см. «Память»); уже сохранённое тоже перестаёт читаться |
EGGENT_LEARNING_MODEL |
модель чата | Модель для фонового взгляда назад: провайдер/id или просто id — хватит и более дешёвой |
EGGENT_LEARNING_DAILY_CAP, EGGENT_LEARNING_MIN_GAP_SECONDS, EGGENT_LEARNING_EVERY_TURNS |
40, 60, 6 |
Сколько раз в сутки агент оглядывается, пауза между двумя взглядами и как часто смотрит разговор, в котором ничего не отмечено |
EGGENT_TURN_WATCHDOG |
включено | off отключает проверку, которая останавливает «замолчавший» ход (см. «Чаты»). Стоит отключить, если ты запускаешь медленную локальную модель, которая может думать дольше лимитов ниже |
EGGENT_TURN_SILENCE_SOFT_SECONDS, EGGENT_TURN_SILENCE_START_SECONDS, EGGENT_TURN_SILENCE_MODEL_SECONDS, EGGENT_TURN_SILENCE_TOOL_SECONDS |
90, 180, 360, 1200 |
Сколько ход может молчать, прежде чем чат скажет, что он ещё идёт, и прежде чем его остановят: пока он запускается, пока модель не ответила, пока выполняется команда. Команда, которая идёт рядом с другой, сохраняет весь свой запас |
EGGENT_TURN_QUESTION_WAIT_SECONDS |
86400 |
Сколько вопрос к тебе может ждать ответа, прежде чем ход остановят (см. «Чаты»). 0 или off — вопрос ждёт сколько угодно |
EGGENT_VISITS_MAX, EGGENT_VISIT_TIMEOUT_MINUTES, EGGENT_VISIT_STOP_GRACE_SECONDS |
2, 10, 20 |
Обращение к проекту через @: сколько их может идти одновременно, сколько может занять одно и сколько ему дают на остановку, прежде чем его отпускают |
EGGENT_BOARD |
включено | off — доска задач перестаёт запускать карточки; сама доска и карточки остаются |
EGGENT_BOARD_MAX_RUNNING, EGGENT_BOARD_MAX_PER_PROJECT |
3, 1 |
Сколько карточек работают одновременно на всей доске и в одном проекте. Карточки одного проекта работают в одной папке |
EGGENT_BOARD_RETRY_SECONDS |
60 |
Сколько упавшая карточка ждёт своего единственного автоматического повтора |
EGGENT_ZIP_MAX_MB, EGGENT_ZIP_MAX_FILES, EGGENT_ZIP_IDLE_SECONDS |
1024, 10000, 120 |
Размер и число файлов одного архива и сколько он может простоять, когда его никто не забирает, прежде чем его бросят |
EGGENT_VERSIONS |
включено | off — версии файлов больше не сохраняются; то, что уже сохранено, можно смотреть |
EGGENT_VERSIONS_KEEP_DAYS, EGGENT_VERSIONS_DAILY_DAYS, EGGENT_VERSIONS_MAX_PER_FILE, EGGENT_VERSIONS_MAX_FILE_MB |
30, 90, 200, 10 |
Сколько каждая версия хранится после того, как её заменили, до какого срока хранится по одной в день, сколько версий держит один файл и с какого размера у файла нет истории |
EGGENT_VERSIONS_SCAN_SECONDS |
120 |
Как часто файлы с историей проверяются на изменения, сделанные в обход Eggent: синхронизация, терминал, другая программа |
EGGENT_VERSIONS_MAX_TOTAL_MB, EGGENT_VERSIONS_DISK_SHARE |
1024, 0.25 |
Сколько может занимать вся история и какую долю диска, если развёртывание сообщает его размер; сверх этого первыми уходят версии, заменённые раньше всех |
EGGENT_WEB_SEARCH_DEFAULTS |
включено | off — Eggent не записывает при старте порядок бесплатных поисковиков в data/pi-agent/web-search.json (см. Инструменты агента) |
EGGENT_CLOUD_PROMO |
включено | 0 убирает короткую карточку про Eggent Cloud внизу страницы Настройки → Модели |
EGGENT_VERSION |
latest |
Тег образа для docker-compose.ghcr.yml |
После изменения .env пересоздай контейнер:
docker compose up -d --force-recreate
Обратный прокси и HTTPS
На VPS держи Eggent на 127.0.0.1 и ставь перед ним прокси с HTTPS. HTTPS нужен не только для безопасности: без него браузер не даст доступ к микрофону, а Telegram не примет вебхук.
Caddy (сертификат получит сам):
eggent.example.com {
request_body {
max_size 100MB
}
reverse_proxy 127.0.0.1:3000
}
Nginx:
server {
server_name eggent.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_read_timeout 600s;
}
}
После настройки прокси пропиши публичный адрес в APP_BASE_URL.
Telegram на своём сервере
Бот подключается в Настройки → Мессенджеры, как описано в «Telegram». Режим:
- Long Polling — работает без публичного адреса. Подходит для домашней машины. Сообщения обрабатываются по очереди, поэтому то, что ты отправляешь, пока агент занят, — включая
/resetи «стоп», — прочитывается, когда этот ход закончится; «замолчавший» ход завершают лимитыEGGENT_TURN_SILENCE_*выше. - Webhook — нужен публичный HTTPS-адрес (
APP_BASE_URL). Быстрее и надёжнее на VPS.
Режим Auto сам выберет вебхук, когда публичный HTTPS-адрес задан.
Исходящий прокси
Если сервер выходит в интернет только через прокси, задай HTTPS_PROXY (и при необходимости HTTP_PROXY, NO_PROXY). Нужен Node.js 22.23 или новее; в Docker-образе он уже такой.
Безопасность
- Не открывай порт Eggent в интернет без HTTPS. По умолчанию он слушает только
127.0.0.1— так и оставь, если стоит прокси. - Сразу смени логин и пароль по умолчанию.
- Относись к токену внешнего API как к паролю и не используй его в коде браузера.
- Защищай и резервируй папку
data/: там чаты, файлы, память, настройки и ключи. - У агента есть терминал внутри контейнера. Не монтируй в контейнер папки, к которым агенту не нужен доступ.