Размещение и данные

«Прокси-агент» — это один контейнер: внутри него и приложение, и интерфейс. Рядом обязательно нужна база PostgreSQL — в ней живут журнал запросов, журнал прокси-службы и суточные суммы расхода по ключам. Ничего сверх этого не требуется, поэтому развернуть продукт можно на своём сервере за несколько минут.

Один контейнер и одна база

Контейнер обслуживает и страницы интерфейса, и адреса /api/*, к которым обращаются программы. База — внешняя: её можно поставить на том же сервере или на отдельном. При первом запуске база создаётся сама, если её ещё нет, — вручную ничего готовить не нужно. Эта база — единственная обязательная настройка: без неё приложение не стартует.

В образе есть ядро Xray — на нём работают каналы по подписке Happ. В своей сборке без ядра такие каналы просто считаются недоступными, а путь к своему ядру задаётся переменной PROXY_APP_XRAY_PATH. Обычные каналы — HTTP-прокси, SOCKS5, VPN — от ядра не зависят.

Продукт выходит двумя сборками. В русской сборке (maxpastukhov/proxy-agent, переменная PROXY_APP_BRAND=pastukhov) интерфейс по умолчанию открывается на русском, пока язык не выбран вручную; ручной выбор всегда побеждает. В остальном сборки совпадают.

Порты и публикация

  • Основной порт — страницы интерфейса и адреса моделей. В примерах установки он публикуется как 5000:80 — снаружи 5000, внутри 80.
  • Порты прокси-службы — по одному на каждый канал, которому вы задали порт слушателя на странице «HTTP-прокси». Пока порт не задан, ничего не слушает. Каждый такой порт публикуется отдельной строкой в файле запуска — только тогда он будет доступен снаружи; подпапка на эти порты не влияет.

Размещение в подпапке

Если продукт должен жить не в корне домена, а в первой подпапке — например, по адресу ваш-домен/proxy, — есть два способа.

  • Переменной окружения. Укажите PROXY_APP_BASE_PATH=/proxy — и всё внутри будет работать от этой папки. Обращения по неверному адресу продукт перенаправит сам, чтобы адрес был один и тот же, а не два разных.
  • Передним прокси. Прокси перед приложением сам снимает папку и передаёт продукту заголовок X-Forwarded-Prefix. При этом продукт остаётся доступен и напрямую, по своему порту в корне домена, — это удобный путь для диагностики.

Три адреса в любом случае всегда живут в корне домена и подпапке не подчиняются: /api/ (к нему обращаются программы), проверка состояния и проверка сертификатов. Так задумано: клиенты указывают адрес от корня, и ломать это подпапкой нельзя.

HTTPS настраивается снаружи

Сам контейнер говорит только по простому HTTP. Защищённое соединение (HTTPS) настраивается перед ним — на переднем прокси или на стороне облака. Так проще менять сертификаты и не пересобирать продукт.

Что важно для переднего прокси

Передний прокси должен пропускать живые соединения (иначе чат сам перейдёт на менее удобный режим), не копить ответ в буфере и не обрывать длинные ответы. Практические значения: таймауты до 3600 секунд и предел размера запроса 100 мегабайт. Если этого не сделать, потоковые ответы моделей и чат будут рваться, а большие запросы — отклоняться.

Где лежат данные

Данные разложены по трём местам, и путать их не стоит.

  • Конфигурация — файлы settings.yml, models.yml, http-providers.yml, keys.yml и anonymization.yml в папке /project/apps/proxy. Здесь настройки, модели, каналы, ключи доступа и правила скрытия секретов. Это единственный источник правды: файлы правят руками, из интерфейса или через управление по API. Правка руками подхватывается примерно за 300 мс, а ошибка разбора не ломает работу — остаётся последнее удачное состояние. Папку хранят в системе контроля версий: перенос её на другой сервер переносит всю конфигурацию. Секретные поля можно записывать ссылкой на переменную окружения вида $ИМЯ_ПЕРЕМЕННОЙ.
  • Рабочее состояние — том /apps/proxy: ключи защиты данных (auth/), ключ подписи сессий входа (appdata/.jwt-secret), сохранённые «размышления» DeepSeek (reasoning_cache.sqlite3), хранилище скрытия секретов (anonymizer/), конфигурации VPN (vpn/) и рабочие файлы каналов-подписок Happ (happ/). Без тома теряются «размышления» и соответствия секретов, а без постоянного JWT_SECRET_KEY — все выданные сессии входа. Рабочие файлы happ/ восстанавливаются сами: подписка запрашивается заново при следующем обращении.
  • Журналы и расходы — PostgreSQL: журнал запросов, журнал прокси-службы и суточные суммы расхода по ключам.

Вывод простой: подключите оба тома, а ключ подписи задайте переменной окружения — тогда пересоздание контейнера проходит незаметно.

Резервные копии

Для полной копии нужны три вещи: дамп PostgreSQL (журналы и расходы), папка конфигурации и том рабочего состояния. Первые две легко переносятся на другой сервер и хранятся в системе контроля версий; в томе — соответствия секретов, «размышления» и конфигурации VPN. Рабочее состояние подписок Happ копировать не обязательно: оно восстанавливается из самой подписки.

Дальше: как устроен доступ и что стоит сделать для безопасности — в разделе Доступ и безопасность.

← Оглавление документации