From b8c23f0dc91e34cb3cb9384bfca4604bf77d9e54 Mon Sep 17 00:00:00 2001 From: librelad Date: Wed, 19 Aug 2026 21:14:21 +0100 Subject: [PATCH] fix(stoat): name compose services, not containers, in the port descriptors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Ports page showed no service selected for Stoat, and the app's URL never appeared anywhere, so there was no way to learn which port it is on. Field 1 of a PORT descriptor is the parent SERVICE: db_list_installed_app matches it against each compose service name to attach the app's access URL. Stoat named containers instead — "stoat-caddy" and "stoat-livekit", whose services are "caddy" and "livekit". It is the only app in the catalogue that did; rocketchat says rocketchat-service, matrix says matrix-synapse, and both are real service names. Nothing matched, so no URL was ever associated and the Ports page had nothing to select. The port itself was always allocated correctly — Caddy publishes 4210 — which is why the app worked for anyone who already knew the number. The live config had also lost the 11th field (the Traefik subdomain, "stoat") that the template carries, so restore that at the same time. Not a Caddy problem: Stoat's Caddy is its internal path router, doing prefix stripping and Location rewrites across api, events, autumn, january, gifbox and web plus file-serving /.well-known/stoat. Traefik is the edge in front of it — the same split Nextcloud uses with its nginx sidecar — and Traefik cannot serve that .well-known file at all. Co-Authored-By: Claude Opus 5 --- containers/stoat/stoat.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/containers/stoat/stoat.config b/containers/stoat/stoat.config index 3b65d4b..2004b5f 100644 --- a/containers/stoat/stoat.config +++ b/containers/stoat/stoat.config @@ -91,12 +91,12 @@ CFG_STOAT_NETWORK=default # # Only one HTTP port: Caddy fronts the entire stack internally, so /api, /ws, # /autumn and the rest all arrive on this single host. -CFG_STOAT_PORT_1="stoat-caddy|webui|random:80|public|tcp|false|true|true|Web Interface||stoat" +CFG_STOAT_PORT_1="caddy|webui|random:80|public|tcp|false|true|true|Web Interface||stoat" # LiveKit's TCP fallback. Pinned rather than random on purpose: LiveKit # advertises this exact port number to clients from livekit.yml, so a randomised # external port would be advertised wrongly and voice would fail to connect. # Not Traefik-managed — WebRTC is not HTTP. -CFG_STOAT_PORT_2="stoat-livekit|voice-tcp|7881:7881|public|tcp|false|false|false|LiveKit voice/video (TCP fallback)|" +CFG_STOAT_PORT_2="livekit|voice-tcp|7881:7881|public|tcp|false|false|false|LiveKit voice/video (TCP fallback)|" # Stoat exposes no safe way to set a password or grant a role from outside the # app, so these tools list and enable/disable only — see scripts/stoat_auth.sh.