---
title: "Размещение и данные"
id: "2027"
type: "page"
slug: "hosting"
published_at: "2026-09-20T18:37:35+00:00"
modified_at: "2026-10-28T18:13:31+00:00"
url: "https://pastukhov.com/agents/proxy/docs/hosting/"
markdown_url: "https://pastukhov.com/agents/proxy/docs/hosting.md"
excerpt: "«Прокси-агент» — это один контейнер: внутри него и приложение, и интерфейс. Рядом обязательно нужна база…"
---

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

[https://pastukhov.com/agents/proxy/docs/hosting/.md](https://pastukhov.com/agents/proxy/docs/hosting/.md)

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

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

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

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

Есть две сборки продукта. В русской (переменная `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 копировать не обязательно: оно восстанавливается из самой подписки.

Дальше: как устроен доступ и что стоит сделать для безопасности — в разделе [Доступ и безопасность](/agents/proxy/docs/security)
.

[← Оглавление документации](/agents/proxy/docs)
