feat: initialize serverAppConfigs with podman stacks for Dankserver and Dankclaw

- 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
This commit is contained in:
Frank
2026-08-13 20:19:41 -07:00
commit e3eb5334cb
57 changed files with 3033 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env bats
# Seam: Caddyfile validity.
# Each host must have a Caddyfile. Site blocks must reference services by the
# hostname convention (*.dankserver.local / *.dankclaw.local) and must proxy to
# reachable upstreams. When caddy(1) exists locally we run `caddy validate`;
# otherwise we do structural checks.
load helpers
@test "a Caddyfile exists for dankserver and dankclaw" {
[ -f "$REPO_ROOT/dankserver/Caddyfile" ]
[ -f "$REPO_ROOT/dankclaw/Caddyfile" ]
}
@test "Caddyfiles use the .local hostname convention" {
grep -qE '\.dankserver\.local' "$REPO_ROOT/dankserver/Caddyfile"
grep -qE '\.dankclaw\.local' "$REPO_ROOT/dankclaw/Caddyfile"
}
@test "Caddyfiles have balanced braces" {
for f in "$REPO_ROOT/dankserver/Caddyfile" "$REPO_ROOT/dankclaw/Caddyfile"; do
local open close
open=$(grep -o '{' "$f" | wc -l)
close=$(grep -o '}' "$f" | wc -l)
[ "$open" -eq "$close" ] || { echo "$f: unbalanced braces ($open vs $close)"; return 1; }
done
}
@test "caddy validate passes when caddy is available" {
if command -v caddy >/dev/null 2>&1; then
caddy validate --config "$REPO_ROOT/dankserver/Caddyfile" --adapter caddyfile
caddy validate --config "$REPO_ROOT/dankclaw/Caddyfile" --adapter caddyfile
else
skip "caddy binary not installed locally"
fi
}
@test "homepage basic auth exists in the Caddyfiles" {
grep -qiE 'basicauth|basic_auth' "$REPO_ROOT/dankserver/Caddyfile"
grep -qiE 'basicauth|basic_auth' "$REPO_ROOT/dankclaw/Caddyfile"
}