nix-config/hosts/heather/pi-web.nix
mikl 87faa84104 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 вручную.
2026-07-13 13:21:34 +03:00

48 lines
2 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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;
};
};
}