- Dankserver stack: RomM, Copyparty, Calibre-Web, node-exporter - Dankclaw stack: Gluetun VPN (SearXNG tunnel), SearXNG+Valkey, ComfyUI (CPU backend), OpenWebUI, Hermes, Gitea+Postgres (migrated), Caddy reverse proxy, Grafana+Prometheus+Loki+Alloy observability - Caddyfiles with .local hostname convention and basicauth homepage - bind-mount storage policy, no named volumes - deploy.sh mirroring vllmScripts git workflow (push -> pull -> restart -> health) - docs/ Obsidian vault: per-service docs from frank-default-small research subagents (promtail EOL -> Alloy; gitea SECRET_KEY preservation; ComfyUI --cpu) - bats test suite at 6 seams — 22 tests green
4.2 KiB
4.2 KiB
Service Research Brief
Consolidated research from the frank-default-small research subagents (2026-08-14) plus the pi agent knowledge base. This is the source material behind the per-service docs pages.
Method
Four parallel researchers fetched primary sources: official Docker docs, GitHub READMEs, container source (ComfyUI cli_args.py, OpenWebUI env.py), the Gluetun wiki, and Grafana/Loki/Prometheus docs. The first parallel run failed with 503 Loading model (llama.cpp on Dankserver reloading); the retry completed for three of four, and the infra brief completed solo.
Key Findings
Dankserver stack
- RomM —
ghcr.io/rommapp/romm:latest; FastAPI+React; SQLite data; needsROMM_USERNAME/ROMM_PASSWORD/ROMM_SECRET_KEYat first boot; volumes/romm/library+/romm/resources. - Copyparty —
ghcr.io/9001/copyparty:latest; single-file Python server; port 3923; per-folder.cpyauth;--resumablefor large uploads. - Calibre-Web —
lscr.io/linuxserver/calibre-web:latest(matches the live container);PUID=1000 PGID=1000 TZ=Etc/UTC;/config+/books; external binary pathsunrar/kepubify/ebook-convert; library path must be set in admin UI; DB path wrong ⇒ login succeeds but library empty. - Calibre — host tool, not a container; Calibre-Web points at its library directory.
Dankclaw stack
- SearXNG —
ghcr.io/searxng/searxng:latest;network_mode: service:gluetun(KB Pattern 2); Valkey cache replaces Redis;settings.ymlkeys:server.secret_key,base_url,limiter: true,valkey.url,outgoing.*,search.formats: [html, json]; JSON API rate-limited (4/h untrusted) — trusted-group the agent IP. - Gluetun —
qmcgaw/gluetun:latest;NET_ADMIN+/dev/net/tun; port publishing moves to gluetun;VPN_SERVICE_PROVIDER,VPN_TYPE,WIREGUARD_PRIVATE_KEY; DNS: preferdotupstreams, neverDNS_UPSTREAM_PLAIN_ADDRESSESto a LAN address (leaks); verify withpodman exec gluetun curl -s ifconfig.me. - ComfyUI — CPU backend required: ROCm wheels have no gfx1151 (Strix Halo) kernels;
--cpuflag confirmed incli_args.py("To use the CPU for everything (slow)"); do NOT use CUDA images; models/input/output persisted. - OpenWebUI —
ghcr.io/open-webui/open-webui:main(NOT:cudaon AMD); port 8080 in container; OpenAI-compatible endpoint tohost.containers.internal:7770/v1;/health. - Hermes — Nous Research self-improving agent; MIT; official image
docker.io/nousresearch/hermes-agent:latest(verified pullable 2026-08-14); TUI + Telegram/Discord/etc.; points at local llama.cpp:7770/v1; data volume for skills/memory. - Gitea — migrate live
/opt/gitea/podman-compose.yml(postgres:16-alpine + gitea + caddy); never change SECRET_KEY/INTERNAL_TOKEN after migration; keep bind mounts/opt/gitea/data/*; DB password must move to.env.
Infrastructure
- Caddy —
caddy:2-alpine; directive isbasicauth(renamed frombasic_authin v2.8+); hash withcaddy hash-password; homepage viaroot * /srv/http+file_server;admin offrecommended. - Grafana/Prometheus —
grafana/grafana:latest+prom/prometheus:latest; prometheus.yml scrapes node-exporters on both hosts (192.168.0.143/235:9100) + Gitea/Grafana/Loki metrics; Grafana datasource provisioningapiVersion: 1withaccess: proxy. - Node-Exporter —
prom/node-exporter:latest;network_mode: host,pid: host, read-only/proc /sys /mounts. - Logs — Promtail is EOL 2026-03-02 ⇒ use Grafana Alloy (
grafana/alloy:latest, River config) as the shipper; Lokigrafana/loki:latestsingle-binary mode, TSDB schema v13, filesystem storage, compactor retention 30d; health/ready.
Open Items
- VPN provider choice for Gluetun (
.envon Dankclaw). - Calibre library path (user-entered later).
- Caddy bcrypt hashes at deploy (
caddy hash-password). - B2 bucket/app key for Backblaze backups (deferred).
- Public DNS for
*.franksdank.clouddomains (pending).
See Also
- Per-service pages: SearXNG Gluetun ComfyUI OpenWebUI Hermes Gitea RomM Copyparty Calibre-Web Caddy Grafana Prometheus Loki Alloy Node-Exporter
- Observability — the stack this research feeds