4a679fce801277609df70ab2a6f74c252fe82939
Per user direction, Caddy runs only on dankclaw. It fronts every service on both hosts: local services by container name, quadlet services by published LAN port, dankserver services by published LAN port (192.168.0.235:PORT). - dankclaw/Caddyfile: merged vhost list (was: two Caddyfiles, one per host). gitea's single vhost moves in from the retired gitea-caddy quadlet (option B). Upstreams fixed to live reality: gitea :3000, search :8081 (gluetun), chat :3005 (open-webui quadlet), media services via 192.168.0.235. Retired: llms (open-webui on dankserver is removed; chat is its successor), the dankserver homepage (302 to the shared one). - dankserver/Caddyfile, dankclaw/gitea/Caddyfile: deleted (git rm). - dnsmasq addn-hosts: every name -> 192.168.0.143 (the one Caddy host); no .235 records, no llms. - compose.yaml: removed the openwebui/postgres/gitea services (they are quadlets now); caddy service mounts the rendered Caddyfile from /home/dank/Containers/caddy, healthcheck probes the bare-IP catch-all (302). - deploy.sh: per-target logic (dankserver = pull-only, health via the shared Caddy at 192.168.0.143); renders CADDY_BASICAUTH_HASH from the host .env into the mounted Caddyfile. - .env.example: CADDY_BASICAUTH_HASH on dankclaw; Porkbun block dropped from dankserver (its Caddy is gone); SEARXNG_BASE_URL to the flat name; stale OPENAI_* block dropped (quadlet is self-contained). - tests: caddyfile.bats now asserts the single-Caddyfile invariant; dnsmasq.bats cross-checks vhosts -> .143 and the retired names.
Server App Configs
Podman deployment configuration for two homelab servers: Dankserver and Dankclaw.
Targets
| Host | User | IP | Stack |
|---|---|---|---|
| dankclaw | dank | 192.168.0.143 | AI, search, development, observability |
| dankserver | dank | 192.168.0.235 | media and library |
Active Services
| Service | Host | Hostname | Port |
|---|---|---|---|
| RomM | dankserver | romm.dankserver.local | 8085 |
| Copyparty | dankserver | files.dankserver.local | 3923 |
| Calibre-Web | dankserver | books.dankserver.local | 8083 |
| SearXNG | dankclaw | search.dankclaw.local | 8081 |
| ComfyUI | dankclaw | comfyui.dankclaw.local | 8188 |
| OpenWebUI | dankclaw | chat.dankclaw.local | 3000 |
| Hermes | dankclaw | hermes.dankclaw.local | 8090 |
| Gitea | dankclaw | gitea.dankclaw.local | 3001 |
| Grafana | dankclaw | grafana.dankclaw.local | 3002 |
| Prometheus | dankclaw | prometheus.dankclaw.local | 9090 |
Structure
dankserver/— compose.yaml + Caddyfile + .env.example for the Dankserver stackdankclaw/— compose.yaml + Caddyfile + .env.example for the Dankclaw stackshared/— homepage, prometheus config, deploy helpersscripts/— deploy.sh and stack control scriptsdocs/— project knowledge base (Obsidian vault, wikilinks)tests/— bats test suite (see Testing Policy)
Deployment
See [docs/Architecture/Deployment Flow.md](docs/Architecture/Deployment Flow.md). Run ./scripts/deploy.sh <dankclaw|dankserver> after pushing committed changes.
Knowledge Base
The docs/ directory is an Obsidian vault. Start at docs/index.md.
Testing
Run ./tests/run.sh before every push. See [docs/Architecture/Testing Policy.md](docs/Architecture/Testing Policy.md).
Also See
- vllmScripts (local:
../vllmScripts) — the model-serving scripts this stack consumes:frank-default-large(llama.cpp PP head,:7770, backend of OpenWebUI) andfrank-default-small(FastFlowLM NPU,:52625)
Languages
Shell
60.4%
Python
21%
HTML
6.2%
Jinja
3.9%
C++
3.9%
Other
4.6%