FrankBook-Pro becomes the only *arr/qBittorrent deployment. Every fleet container (qB + five arrs) now shares gluetun's netns, so all egress — torrent, indexer APIs, metadata lookups — exits the WireGuard tunnel by construction (AllowedIPs=0.0.0.0/0); the arrs' own ports publish on the gluetun unit, none on the arr units themselves. - dankserver/compose.yaml: remove the six arr services (the Aug 20 compose copy — never healthy, superseded; config dirs trashed on the host) - dankclaw/Caddyfile + shared/homepage/services.json: arr vhosts and probes repoint 192.168.0.235 -> 192.168.0.112 (FrankBook-Pro) - frankbook-pro units: five arrs join gluetun netns (Wants/After/Network); gluetun publishes 9696/8989/7878/8686/8787 alongside 8080/6881 - tests/frankbook_quadlet.bats: new VPN egress seam — every arr+qB unit must share gluetun's netns and publish no port; gluetun must publish the whole fleet's ports - deploy-plan.py: gluetun changes carry the whole netns family (a gluetun recreation kills all six joiners); dankserver compose set loses the arrs - AGENTS.md: deployment is complete only when unit tests AND the Playwright E2E suite both pass
334 lines
7.3 KiB
JSON
334 lines
7.3 KiB
JSON
[
|
|
{
|
|
"name": "SearXNG",
|
|
"category": "user",
|
|
"description": "AI-free, VPN-routed search engine, fully hosted on Frank's server.",
|
|
"url": "http://search.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:8081",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "OpenWebUI",
|
|
"category": "user",
|
|
"description": "AI Chat/Search interface",
|
|
"url": "http://ai.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:3005",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Gitea",
|
|
"category": "user",
|
|
"description": "Git code hosting and review platform.",
|
|
"url": "http://gitea.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:3000",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Calibre-Web",
|
|
"category": "user",
|
|
"description": "E-book library.",
|
|
"url": "http://books.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:8083",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "RomM",
|
|
"category": "user",
|
|
"description": "ROM and emulator library.",
|
|
"url": "http://romm.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:8085",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Copyparty",
|
|
"category": "user",
|
|
"description": "Direct downloads from Frank's server.",
|
|
"url": "http://files.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:3923",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Plex",
|
|
"category": "user",
|
|
"description": "Closed source media server with apps for everything.",
|
|
"url": "http://plex.franksdank.cloud/web/index.html",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:32400",
|
|
"method": "tcp",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Jellyfin",
|
|
"category": "user",
|
|
"description": "Open source media server.",
|
|
"url": "http://jelly.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:8096",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Seerr",
|
|
"category": "user",
|
|
"description": "Download Requests",
|
|
"url": "http://seerr.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:5055",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Sonarr",
|
|
"category": "user",
|
|
"description": "TV series library and automation.",
|
|
"url": "http://sonarr.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.112:8989",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
|
|
{
|
|
"name": "Hermes",
|
|
"category": "admin",
|
|
"description": "The agent gateway.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:8787",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "Grafana",
|
|
"category": "admin",
|
|
"description": "Dashboards.",
|
|
"url": "http://grafana.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:3002",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Prometheus",
|
|
"category": "admin",
|
|
"description": "Metrics collection.",
|
|
"url": "http://prometheus.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:9090",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Loki",
|
|
"category": "admin",
|
|
"description": "Log storage.",
|
|
"url": "http://loki.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:3100",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "node-exporter",
|
|
"category": "admin",
|
|
"description": "Host metrics.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:9100",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "alloy",
|
|
"category": "admin",
|
|
"description": "Log shipping.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:12345",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "Caddy",
|
|
"category": "admin",
|
|
"description": "The reverse proxy.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:80",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "dnsmasq",
|
|
"category": "admin",
|
|
"description": "LAN name resolution.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:53",
|
|
"method": "tcp",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "Gluetun",
|
|
"category": "admin",
|
|
"description": "The outbound VPN tunnel.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:51820",
|
|
"method": "tcp",
|
|
"wip": true,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "frank-large",
|
|
"category": "admin",
|
|
"description": "The large LLM (27B) on Dankclaw.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:7770",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "frank-small",
|
|
"category": "admin",
|
|
"description": "The small LLM (35B MoE) on Dankserver.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:7770",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "mariadb",
|
|
"category": "admin",
|
|
"description": "The media-stack database.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "192.168.0.235:3306",
|
|
"method": "tcp",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "valkey",
|
|
"category": "admin",
|
|
"description": "The SearXNG cache.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:6379",
|
|
"method": "tcp",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "Prowlarr",
|
|
"category": "admin",
|
|
"description": "Indexer manager.",
|
|
"url": "http://prowlarr.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.112:9696",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Radarr",
|
|
"category": "admin",
|
|
"description": "Movie library and automation.",
|
|
"url": "http://radarr.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.112:7878",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Readarr",
|
|
"category": "admin",
|
|
"description": "Book library and automation.",
|
|
"url": "http://readarr.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.112:8787",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Lidarr",
|
|
"category": "admin",
|
|
"description": "Music library and automation.",
|
|
"url": "http://lidarr.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.112:8686",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "qBittorrent",
|
|
"category": "admin",
|
|
"description": "Torrent client.",
|
|
"url": "http://qbittorrent.franksdank.cloud",
|
|
"docs": "",
|
|
"probe": "192.168.0.112:8080",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": true
|
|
},
|
|
{
|
|
"name": "Postgres",
|
|
"category": "admin",
|
|
"description": "The Gitea database.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:5432",
|
|
"method": "tcp",
|
|
"wip": false,
|
|
"showLink": false
|
|
},
|
|
{
|
|
"name": "ComfyUI",
|
|
"category": "admin",
|
|
"description": "Node-based image generation.",
|
|
"url": "",
|
|
"docs": "",
|
|
"probe": "127.0.0.1:8188",
|
|
"method": "http",
|
|
"wip": false,
|
|
"showLink": false
|
|
}
|
|
]
|