Агент на VPS рядом с проектом: как я подключил Claude Code к своему реле
Реле переехало с моего десктопа на VPS за уже работающий nginx, а агент поселился рядом с кодом проекта. Рассказываю по шагам: почему без своего Caddy, почему адрес через sslip.io и на каких трёх грабля�� я наступил.
Зачем выносить агента с ноутбука
Пока Claude Code крутится на десктопе, он привязан к моей сессии: закрыл крышку — агент исчез из канала. Гипотеза пилота простая: агент живёт на своей машине, приходит в общий чат как участник и имеет собственный доступ к проекту. Тогда его можно показать другу, и друг приведёт своего — каждый со своим харнессом и своей базой знаний.
Реле Buzz здесь работает транспортом. Дальше — как я его перевёз и что при этом сломалось.
Реле переехало на VPS
Раньше реле поднималось на моём компьютере. Теперь оно на VPS NeonMailer (64.188.57.113) и доступно снаружи по wss://64-188-57-113.sslip.io. Трафик закрыт настоящим сертификатом, самоподписанных костылей нет.
Почему без своего Caddy на 80/443
Порты 80 и 443 на сервере держит neonmailer-nginx-1 — он обслуживает два боевых домена, neonmailer.neon.boutique и zadrotometr.ru. Порт 3000 занят самим NeonMailer.
Вариант «поставить рядом Caddy» отпал сразу: два процесса на один порт не встанут; переселять боевой трафик ради пилота — плохая идея. Поэтому реле подселено за существующий nginx отдельным виртуальным хостом:
- один TLS-терминатор на сервере;
- один certbot и один набор сертификатов;
- чужие конфиги не тронуты, боевые домены работают как раньше.
Практический вывод: если на VPS уже живёт что-то боевое, сначала смотрите, кто занимает порты. Второй reverse-proxy почти всегда лишний.
sslip.io вместо своего домена
Ждать делегирование и прогрев DNS не хотелось. sslip.io отдаёт IP прямо из имени: 64-188-57-113.sslip.io резолвится в 64.188.57.113 без единой записи в зоне. Certbot такому имени сертификат выдаёт, WebSocket по нему живёт.
Адрес временный. Появится нормальный домен — виртуальный хост переписывается за пять минут.
Агент рядом с проектом
Вторая половина затеи: агент должен видеть код. На VPS поднята служба buzz-acp, которая запускает Claude Code через ACP-мост с рабочей директорией /opt/steam-psycho (репозиторий ragastar/steam-psycho, тот самый сайт zadrotometr.ru).
Что я проверил на сервере до старта:
| Проверка | Результат |
|---|---|
claude auth status |
loggedIn: true, подписка claude.ai, cobakaars@gmail.com |
| node / npm | v20.20.1 / 10.8.2 |
claude |
установлен глобально |
Важная деталь: агент работает по подписке claude.ai через CLI, без отдельного API-ключа. Для пилота это принципиально — стоимость остаётся предсказуемой.
Три грабли, на которые я наступил
404 при подключении. Первое, что сделал агент после переезда, — не подключился. Мост стучался в реле и получал 404. Починка ушла отдельным коммитом (cffa321). Пока маршрут был сломан, любые настройки агента не имели смысла: 404 промптами не лечится.
Смена адреса реле ломает десктоп. Адрес переехал — и десктопный клиент с мостом пришлось онбордить заново (91b3e41). Адрес реле прописан в нескольких местах; держите под рукой список, где именно.
Засвеченный ключ владельца. В том же коммите зафиксировано: ключ владельца попал куда не следует. Это моя ошибка и урок на будущее — при переносе инфраструктуры секреты уезжают вместе с конфигами, и проверять их надо до пуша. Инфраструктурный репозиторий ragastar/buzz-lab приватный именно по этой причине.
После всего этого агент вышел в рабочий режим и начал отвечать в канале (d738632).
Порядок действий, если повторять
- Посмотреть, кто занимает 80, 443 и 3000 на сервере, и встроиться в существующий прокси.
- Взять адрес, которому не нужен DNS, чтобы не ждать делегирование.
- Получить сертификат тем certbot, что уже настроен на сервере.
- Проверить
claude auth status, версии node и npm, наличие бинаряclaude. - Поднять службу моста с рабочей директорией проекта.
- Убедиться, что подключение к реле проходит, и только потом трогать логику агента.
- Пройтись по секретам до первого пуша.
Что это дало
Агент больше не зависит от моего ноутбука: он на сервере, рядом с кодом проекта, и присутствует в общем канале как участник. Следующий шаг — тот же рецепт для агента друга: своя машина, свой доступ, общий канал. Ради этой проверки пилот и затевался.