Problem
Windows cannot resolve multi-label .local mDNS names (e.g., signalk.halos.local). This is a hard Windows DNS client limitation with no client-side workaround. All HaLOS subdomain URLs are broken for Windows users.
See halos-org/halos-mdns-publisher#37 for full analysis.
Solution
Replace subdomain-based routing with port-based routing. All services accessed via halos.local (2-label, works everywhere) on dedicated HTTPS ports. Traefik terminates TLS on each port and proxies to backend containers. Authelia served under PathPrefix /auth/ on port 443 as a special case.
URL Scheme
| Service |
URL |
Notes |
| Homarr |
https://halos.local |
Port 443, root domain |
| Authelia |
https://halos.local/auth/ |
Port 443, PathPrefix |
| Signal K |
https://halos.local:4430 |
Traefik TLS termination |
| Grafana |
https://halos.local:4431 |
Traefik TLS termination |
| Cockpit |
https://halos.local:9090 |
Native HTTPS, no Traefik |
| Other apps |
https://halos.local:44xx |
Dynamically assigned |
Path redirects on 443 for discoverability: https://halos.local/signalk-server/ → 302 to port URL.
Key Design Decisions
- Pre-allocated port range: Traefik ships with entrypoints 4430-4450. No static config regeneration. Port 4430 chosen as base — evokes 443 (HTTPS), not commonly used.
- Runtime port assignment: Apps don't declare ports.
configure-container-routing assigns from /etc/halos/port-registry at first start.
- OIDC via path redirects: Redirect URIs use stable path URLs (e.g.,
https://halos.local/signalk-server/...), so apps never need to know their port.
- Single TLS cert:
halos.local SAN covers all ports (certs are hostname-bound).
- SSO cookies:
halos.local domain shared across all ports.
- Migration: Homarr tiles auto-update via registry file changes. Old bookmarks break (acceptable given small user base).
Implementation Issues
Problem
Windows cannot resolve multi-label
.localmDNS names (e.g.,signalk.halos.local). This is a hard Windows DNS client limitation with no client-side workaround. All HaLOS subdomain URLs are broken for Windows users.See halos-org/halos-mdns-publisher#37 for full analysis.
Solution
Replace subdomain-based routing with port-based routing. All services accessed via
halos.local(2-label, works everywhere) on dedicated HTTPS ports. Traefik terminates TLS on each port and proxies to backend containers. Authelia served under PathPrefix/auth/on port 443 as a special case.URL Scheme
https://halos.localhttps://halos.local/auth/https://halos.local:4430https://halos.local:4431https://halos.local:9090https://halos.local:44xxPath redirects on 443 for discoverability:
https://halos.local/signalk-server/→ 302 to port URL.Key Design Decisions
configure-container-routingassigns from/etc/halos/port-registryat first start.https://halos.local/signalk-server/...), so apps never need to know their port.halos.localSAN covers all ports (certs are hostname-bound).halos.localdomain shared across all ports.Implementation Issues