Сервис на удаленной машине (вопрос) #1
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Сейчас уже можно например подключить systemd сервис на linux машине, а смотреть данные (UI) на своей Windows машине?
Да, уже можно — всё для этого в проекте готово.
Как это устроено сейчас
watcherenish— обычное веб-приложение (Node.js ≥ 20, без внешних зависимостей). Сам сервис ставится на Linux-машину, где работает агент pi, а UI открывается в браузере — на Windows-машине ничего устанавливать не нужно.Перед этим поправьте в юните
User=,WorkingDirectory=иSESSIONS_DIR=под своего пользователя (по умолчанию тамpiи/home/pi/.pi/agent/sessions).ssh -L 8787:127.0.0.1:8787 user@linux-host, затем в браузере открытьhttp://localhost:8787. Сервис по умолчанию слушает только127.0.0.1и наружу не торчит. Альтернатива — Tailscale.BIND=0.0.0.0и раскомментироватьAUTH_TOKEN=<секрет>. Без токена сервер на0.0.0.0сознательно откажется стартовать (проверка вsrc/config.js). Токен вводится один раз в UI. Внимание: транскрипты содержат содержимое файлов и вывод команд — выставлять UI в интернет нельзя, только доверенная сеть.Суть: Linux нужен только на машине, где пишет агент (там лежат
~/.pi/agent/sessionsиgate.log, сервис их читает); Windows — просто «тонкий клиент» с браузером.Если хотите что-то изменить под этот сценарий (например, задокументировать его в README или упростить настройку туннеля) — скажите, оформлю отдельной задачей. Пока вопрос содержательный ответа не требует кода, перевожу в
blockedдо вашей реакции.А можем ли мы это разделить концептуально? То есть должен быть UI независимый, в нем я хочу иметь возможность подключить агента. Например я запускаю UI на своей Windows машине, там выбираю пункт - подключить агента. Мне предлагает ввести какие то данные, например, ip адрес, название, описание и так далее (только нужное). После подтверждения, проверяется что на указанной машине подключен systemctl service (банальный healthcheck) и если все ок, то я начинаю видеть его на своем UI. Я могу "провалиться" в него и посмотреть все данные, которые есть сейчас.
Да, разделить можно — текущая архитектура к этому уже почти готова.
Что уже есть
Сервер — монолит из двух слабо связанных половин: статический UI (
public/) и REST API (/api/*вsrc/server.js) с Bearer-авторизацией. UI данные не хранит — всё берёт из API. То есть «независимый UI + сервис на машине агента» уже фактически работает (systemd-юнит вdeploy/, страница открывается откуда угодно). Сейчас они просто живут на одном origin, протокольной связки нет.Целевая схема — как вы описали
host:port, токен (в localStorage, как сейчас хранится токен одного сервера).GET /api/healthна стороне агента (сейчас его нет). Тот же Bearer-токен: тогда подключение различает три состояния — «машина/порт недоступны» (сетевая ошибка), «сервис есть, токен неверный» (401), «OK» (200: процесс жив,SESSIONS_DIRсуществует). Анонимный health-эндпоинт делать не предлагаю — он палит существование сервиса.ALLOWED_ORIGINSна агенте (либо хаб продолжит раздаваться каждым агентом, как сейчас, а «хаб» — просто отдельная страница/приложение).AUTH_TOKEN+ рестарт юнита.Разбивка на этапы
GET /api/health+ALLOWED_ORIGINS(CORS) + тесты. Обратно совместимо, текущий сценарий «UI с того же origin» не ломается.Со своей стороны для старта жду подтверждения: делаем по этапам A → B (C пока не трогаем)? Если да — оформлю подзадачами и начну с этапа A. Пока жду реакции, оставляю issue в
blocked.Можешь создать issues с Этапом A и B? Если да, сделай это. Назначь себя в качестве исполнителя
Готово:
/api/health+ CORS (ALLOWED_ORIGINS), исполнитель — я.Берусь за Этап A, ветка
feature/5_api_health_and_cors. #1 оставляю зонтичной задачей плана хаба и перевожу вin_progress— прогресс буду отражать в #5/#6.