v0.327.1: files.<domain> reaches FileBrowser again — a file route by name, not Docker labels
gates / gates (push) Successful in 43s

v0.327.0's box walk: files.<domain> timed out on demo-hp and the N100. With labels, Traefik kept the address it chose at
container start (on felhom-filebrowser, before the gate joined traefik-public). FileBrowser now carries no Traefik
labels; dynamic/filebrowser.yml routes files.<domain> to http://filebrowser:80 by name, resolved per connection and
only while the gate keeps it on traefik-public. Test extended, red-proved.

Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-17 13:56:45 +02:00
parent 0c6ce9500c
commit 71fbef6bbe
5 changed files with 85 additions and 15 deletions
+29 -8
View File
@@ -245,13 +245,11 @@ services:
timeout: 5s
retries: 3
start_period: 15s
labels:
- "traefik.enable=true"
- "traefik.http.routers.filebrowser.rule=Host(`+"`"+`files.%s`+"`"+`)"
- "traefik.http.routers.filebrowser.entrypoints=websecure"
- "traefik.http.routers.filebrowser.tls=true"
- "traefik.http.services.filebrowser.loadbalancer.server.port=80"
- "traefik.docker.network=traefik-public"
# No Traefik labels (v0.327.1): the route is a file-provider route (RenderFileBrowserRoute) to http://filebrowser:80
# BY NAME. Docker labels made Traefik pick FileBrowser's address once, at container start — on its own network,
# before the box joined it to traefik-public — and a later "network connect" did not refresh it (demo-hp and the
# N100 timed out after v0.327.0). By name, the address is resolved per connection, and only while FileBrowser is on
# traefik-public.
volumes:
filebrowser_data:
@@ -259,7 +257,30 @@ volumes:
networks:
%s:
name: %s
`, domain, FileBrowserImage, groupSection, storageSection, FileBrowserNetwork, domain, FileBrowserNetwork, FileBrowserNetwork)
`, domain, FileBrowserImage, groupSection, storageSection, FileBrowserNetwork, FileBrowserNetwork, FileBrowserNetwork)
}
// RenderFileBrowserRoute is the traefik file-provider route for files.<domain> → http://filebrowser:80 by NAME (R-1126,
// v0.327.1). The name resolves only while FileBrowser is on traefik-public, which the box allows only after this run's
// default login was checked — so the route can stay in place and still never reach an unchecked FileBrowser (502 then).
// TLS as the old Docker label had it (`tls: {}`, the default certificate store / the wildcard).
func RenderFileBrowserRoute(domain string) string {
return fmt.Sprintf(`# Traefik dynamic route for FileBrowser (files.<domain>) — managed by felhom-controller (R-1126).
# WARNING: auto-generated at base-infra bring-up. Manual edits are overwritten.
http:
routers:
filebrowser:
rule: "Host(`+"`"+`files.%s`+"`"+`)"
entryPoints:
- websecure
service: filebrowser
tls: {}
services:
filebrowser:
loadBalancer:
servers:
- url: "http://filebrowser:80"
`, domain)
}
// RenderControllerRoute returns a traefik file-provider dynamic config routing the controller's own