Не хотите читать всё это?
Просто скиньте в любой ИИ-чат (Claude, ChatGPT и т.д.) ссылку на https://pastukhov.com/agents/proxy/install.md или на https://pastukhov.com/llms.txt и попросите сгенерировать конфигурационные файлы и команды. Он прочитает документацию, задаст несколько вопросов о вашей настройке и выдаст готовую конфигурацию. Экономьте время — пусть модель читает за вас.
Вы также можете связаться со мной через Telegram — я всегда рад помочь. И это не просто вежливость — мне действительно нравится общаться с единомышленниками, особенно если вы так же увлечены программированием, как и я.
«Прокси-агент» — это одна точка входа ко всем моделям, которыми пользуется ваша команда. Программа живёт на вашем сервере и разворачивается одним контейнером Docker, а рядом нужна база PostgreSQL — это единственная обязательная настройка. После установки все ваши программы обращаются не к десятку поставщиков по отдельности, а к адресу вашего сервера: ключи поставщиков, лимиты расхода и журнал запросов остаются у вас, а не расходятся по компьютерам сотрудников.
Что понадобится
- Сервер или компьютер с Docker — подойдёт Windows, Linux или macOS, а для постоянной работы достаточно недорогого сервера.
- База PostgreSQL — отдельная и обязательная. Внутри контейнера базы нет: без строки подключения приложение не запустится. Проще всего поднять базу рядом в том же файле запуска, как показано ниже.
- Один свободный порт для интерфейса и запросов (в примерах — 5000) и, если понадобится прокси для обычного трафика, ещё один отдельный порт (5001).
- По желанию — адрес и ключ вашего Pastukhov Agent: без них работает всё, кроме чата с ИИ-агентом внутри продукта.
Установка через Docker Compose
Создайте файл compose.yml с таким содержимым. Здесь две службы: база и само приложение.
services:
postgres:
image: postgres:17
container_name: proxyagent-postgres
environment:
- POSTGRES_DB=proxyagent
- POSTGRES_USER=proxyagent
- POSTGRES_PASSWORD=смените-этот-пароль
volumes:
- proxyagent-db:/var/lib/postgresql/data
restart: unless-stopped
proxyagent:
image: maxpastukhov/proxy-agent:main-latest
container_name: proxyagent
ports:
- "5000:80"
# раскомментируйте, если нужен прокси для обычного трафика (HTTP + SOCKS5)
# - "5001:5001"
volumes:
- proxyagent-state:/tmp/proxyagent
environment:
- ASPNETCORE_ENVIRONMENT=Production
- PROXYAGENT_DATABASE=Host=postgres;Port=5432;User Id=proxyagent;Password=смените-этот-пароль;Database=proxyagent;
- PROXYAGENT_ADMIN_LOGIN=admin
- PROXYAGENT_ADMIN_PASSWORD=<сумма SHA-256 от пароля, строчными буквами>
- JWT_SECRET_KEY=<случайная строка не короче 32 знаков>
restart: unless-stopped
volumes:
proxyagent-db:
proxyagent-state:
Образ maxpastukhov/proxy-agent:main-latest — русская сборка с русским интерфейсом. Затем запустите:
docker compose up -d
Интерфейс появится на порту 5000: http://<адрес-сервера>:5000. Пароль базы замените на свой и подставьте его же в строку PROXYAGENT_DATABASE — это одна и та же пара значений. Лицензионный ключ в файле не нужен: встроенной проверки лицензии в продукте нет.
Запуск без Compose
Можно обойтись и одной командой docker run — базу в этом случае поднимите отдельно:
docker run -d \
--name proxyagent \
-p 5000:80 \
-v proxyagent-state:/tmp/proxyagent \
-e PROXYAGENT_DATABASE="Host=адрес-базы;Port=5432;User Id=proxyagent;Password=ваш-пароль;Database=proxyagent;" \
-e PROXYAGENT_ADMIN_LOGIN=admin \
-e PROXYAGENT_ADMIN_PASSWORD=ваша-сумма-sha256 \
-e JWT_SECRET_KEY=ваша-случайная-строка-не-короче-32-знаков \
--restart unless-stopped \
maxpastukhov/proxy-agent:main-latest
Остальные переменные удобно передать файлом через флаг --env-file .env — так их проще менять, не переписывая длинную команду.
Основные переменные окружения
Настройки задаются переменными окружения — их прописывают один раз в compose.yml и меняют без правки кода. Почти все имена начинаются с PROXYAGENT_.
| Переменная | Что задаёт | По умолчанию |
PROXYAGENT_DATABASE | строка подключения к PostgreSQL — единственная обязательная настройка | нет; без неё приложение не запускается |
PROXYAGENT_ADMIN_LOGIN, PROXYAGENT_ADMIN_PASSWORD | вход администратора; пароль — сумма SHA-256, записанная строчными буквами (в форме входа есть встроенный генератор) | не заданы — показывается «первоначальная настройка» |
JWT_SECRET_KEY | подпись сессий входа (не короче 32 знаков); с ним сессии переживают пересоздание контейнера | генерируется и сохраняется в файле |
PROXYAGENT_AGENT_API_URL, PROXYAGENT_AGENT_API_KEY | чат с ИИ-агентом внутри продукта (подключение Pastukhov Agent); читаются один раз при запуске | не заданы — чат скрыт |
PROXYAGENT_BASE_PATH | размещение в первой подпапке (например, /proxy) | не задано — работа в корне домена |
PROXYAGENT_TUNNEL_PORT | порт прокси-службы, если в настройках не сохранён свой | 5001 |
PROXYAGENT_ANONYMIZER_DB | папка хранилища скрытия секретов: правила, соответствия и события утечек | /tmp/proxyagent/anonymizer |
PROXYAGENT_CLICKHOUSE_URL | отправка статистики в ClickHouse; при заданном значении в аналитике появляется кнопка восстановления пропущенных дней | не задано — выключено |
ASPNETCORE_URLS | адрес прослушивания внутри контейнера | http://+:80 |
ASPNETCORE_ENVIRONMENT | Production включает защиту и строгую страницу ошибок | Production |
Где хранятся данные
Деловые данные — модели, ключи доступа, журналы запросов, журнал обычного трафика, настройки, расходы — лежат в вашей базе PostgreSQL и переживают что угодно. Всё остальное живёт во временной папке контейнера /tmp/proxyagent:
- сохранённые «размышления» моделей DeepSeek — заполняются заново по мере работы;
auth/— ключи защиты данных;appdata/.jwt-secret— файл подписи сессий входа;- хранилище скрытия секретов — правила, соответствия и события утечек.
Если эту папку не подключить томом, при пересоздании контейнера произойдёт вот что: «размышления» заполнятся заново, хранилище секретов обнулится (а значит, уже отправленные в модель обозначения перестанут возвращаться на место), а все выданные сессии входа перестанут действовать. Поэтому в примере выше подключён том proxyagent-state, а JWT_SECRET_KEY задан постоянным значением — тогда вход не придётся выполнять заново.
Первый вход
Откройте интерфейс в браузере. Логин и пароль администратора задаются переменными PROXYAGENT_ADMIN_LOGIN и PROXYAGENT_ADMIN_PASSWORD; если они не заданы, продукт честно сообщает о «первоначальной настройке» и работать не даст. В переменной хранится не сам пароль, а его необратимая сумма SHA-256 — при входе вы вводите пароль, приложение считает сумму от введённого и сравнивает с заданной. Готовую сумму удобно получить встроенным генератором прямо в форме входа. Сессия входа живёт 90 дней, и переменные читаются на каждом запросе, поэтому пароль можно поменять без перезапуска контейнера.
Что сделать после запуска
Когда интерфейс открылся, до первого запроса остаётся несколько шагов:
- Заведите первую модель в разделе «Ключи → Модели»: публичное имя, адрес и ключ поставщика, цены за миллион «порций текста» (токенов). Подробнее — в разделе Модели и цены.
- Нажмите «Проверить» у модели — продукт сходит к поставщику настоящим путём и скажет, отвечает ли связь.
- Создайте ключ доступа для первой программы. Ключ показывается ровно один раз — сохраните его сразу.
- Подключите программу: вместо адреса поставщика укажите адрес вашего сервера, вместо ключа поставщика — ключ доступа. Как именно — в разделе Подключение программ.
- Отправьте первый запрос и убедитесь, что он появился в журнале запросов: там видно модель, ключ, токены и стоимость.
Прокси для обычного трафика
Кроме работы с моделями продукт умеет быть обычным прокси-сервером для браузеров и программ, не связанных с ИИ. По умолчанию эта возможность выключена: включите её в «Настройках», и порт начнёт слушать.
- Порт берётся из настроек, а если там пусто — из переменной
PROXYAGENT_TUNNEL_PORT(по умолчанию5001). - Вход по ключу доступа включён по умолчанию: без ключа в интернет никто не выйдет. Отключать проверку стоит только внутри закрытой сети.
- Если нужен канал связи через VPN, контейнеру потребуются права
NET_ADMINи установленный WireGuard внутри образа: готовый образ их не содержит.
Такой трафик считается в объёме, но не в деньгах и не расходует лимиты ключей. Подробнее — в разделе Прокси для обычного трафика.
Установка через Pastukhov MultiAgent
Если у вас несколько серверов, удобнее ставить продукт из Pastukhov MultiAgent: он сам поднимает контейнер, выдаёт постоянный адрес и HTTPS, подключает базу. «Прокси-агент» есть в каталоге продуктов (порт 6040), база прописывается той же переменной PROXYAGENT_DATABASE, а связанный Pastukhov Agent подключается к чату. Подробнее о самом MultiAgent — на странице MultiAgent.
Лицензия и обновления
Скажем честно: ключ активации в продукт не встроен — он работает сразу после установки и сам ничего не ограничивает. Лицензия — это право использования, 12 месяцев бесплатных обновлений и поддержка. Цены те же, что у соседних продуктов: персональная —
Дальше стоит заглянуть в Начало работы — там коротко о том, как продукт устроен изнутри.