heather: add pi-web service + Caddy vhost pi.iscg.dev with basicauth
pi-web (agegr/pi-web, npm @agegr/pi-web) — web UI для pi coding agent. systemd service на 127.0.0.1:30141, Caddy pi.iscg.dev терминирует TLS + basicauth (bcrypt, пароль в pass iscg.dev/pi-web/auth). nodejs в systemPackages; pi и pi-web ставятся в ~/.npm-global вручную.
This commit is contained in:
parent
78c39d6f5d
commit
87faa84104
3 changed files with 63 additions and 0 deletions
|
|
@ -19,6 +19,14 @@ let
|
|||
# (на heather: nix-shell -p caddy --run 'caddy hash-password ...')
|
||||
# Защищает syncthing GUI снаружи (GUI слушает только 127.0.0.1:8384,
|
||||
# Caddy проксирует sync.iscg.dev + basicauth).
|
||||
# pi-web basicauth. Пароль в pass iscg.dev/pi-web/auth (plaintext).
|
||||
# Hash сгенерить на heather: nix-shell -p caddy --run 'caddy hash-password --plaintext ...'
|
||||
piBasicAuth = ''
|
||||
basicauth {
|
||||
mikl $2a$14$yqYiMGLvtPs0sLRZhu1/VOfiRO.CARIBcGGrFpo4iwOd9s4o4IVCy
|
||||
}
|
||||
'';
|
||||
|
||||
syncBasicAuth = ''
|
||||
basicauth {
|
||||
mikl $2a$14$ozHN9/aa4VhPX43NN8MKdODKvOoJ5MBpOUFhzkxwvb58ZI5b6eqEK
|
||||
|
|
@ -93,6 +101,12 @@ in {
|
|||
"home.iscg.dev".extraConfig = ''
|
||||
reverse_proxy 127.0.0.1:3002
|
||||
'';
|
||||
|
||||
# pi-web (web UI для pi coding agent)
|
||||
# basicauth защищает весь vhost включая SSE /api/agent — leak нет.
|
||||
"pi.iscg.dev".extraConfig = piBasicAuth + ''
|
||||
reverse_proxy 127.0.0.1:30141
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
./caddy.nix # edge proxy, TLS, роутинг по доменам
|
||||
./syncthing.nix # sync + relay
|
||||
./tuwunel-admin.nix # matrix admin web UI (systemd, статический бинарник)
|
||||
./pi-web.nix # pi-web (web UI для pi coding agent, systemd + npm global)
|
||||
];
|
||||
|
||||
# Arion-проект как systemd-сервис: arion-compose.nix → docker-compose → up.
|
||||
|
|
|
|||
48
hosts/heather/pi-web.nix
Normal file
48
hosts/heather/pi-web.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# heather — pi-web (web UI для pi coding agent).
|
||||
#
|
||||
# https://github.com/agegr/pi-web, npm-пакет @agegr/pi-web
|
||||
# Next.js 16 + lobehub-ui. Читает ~/.pi/agent/sessions/*.jsonl напрямую,
|
||||
# общается с pi через RPC (spawn бинаря pi). НЕ демон — запускается как
|
||||
# systemd-сервис, который держит next-server на 127.0.0.1.
|
||||
#
|
||||
# Слушает 127.0.0.1:30141 → Caddy pi.iscg.dev терминирует TLS + basicauth
|
||||
# (см. caddy.nix, piBasicAuth). Auth-пароль в pass iscg.dev/pi-web/auth.
|
||||
#
|
||||
# Установка pi и pi-web — ручная (npm global в ~/.npm-global, НЕ в nix store):
|
||||
# npm config set prefix ~/.npm-global
|
||||
# npm i -g @earendil-works/pi-coding-agent @agegr/pi-web
|
||||
# Это разовая операция на хосте (как tuwunel-admin бинарник вне nix-store).
|
||||
# nodejs ставим через systemPackages — нужен и для npm, и для next-server.
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
# Node.js: нужен для pi-web (next-server) и для spawn'а pi из pi-web.
|
||||
environment.systemPackages = [ pkgs.nodejs ];
|
||||
|
||||
systemd.services.pi-web = {
|
||||
description = "pi-web (web UI for pi coding agent)";
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
# PATH: nodejs (node/npm) + ~/.npm-global/bin (где лежат pi и pi-web).
|
||||
path = [ pkgs.nodejs "/home/mikl/.npm-global/bin" ];
|
||||
|
||||
environment = {
|
||||
# Где pi-web ищет sessions/pi-конфиг. Совпадает с ~/.pi/agent на heather.
|
||||
PI_CODING_AGENT_DIR = "/home/mikl/.pi/agent";
|
||||
HOME = "/home/mikl";
|
||||
NODE_ENV = "production";
|
||||
};
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "mikl";
|
||||
Group = "users";
|
||||
ExecStart = "/home/mikl/.npm-global/bin/pi-web --hostname 127.0.0.1 --port 30141";
|
||||
WorkingDirectory = "/home/mikl";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 5;
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Reference in a new issue