7afd0192150a3e84acdb99bb9c329acfefa32a5f
Apps and phones reach services through the instance, so only one port per instance needs to be open and the service answers its own 401. Add handlers/dataplane: one allowlist (/api/{service}/action/{action}, /auth/{path...}, /ws[/...]) and one dispatcher that chooses HTTP or WebSocket by upgrade presence, outside the owner gate because callers hold no Maestro session. Both it and the legacy action proxy resolve through lib/serviceproxy, so the two edges cannot disagree about a service address.
Maestro
Dcntrlized project coordinator service
Access & transport
The dashboard ships session cookies (instance-owner gate), so the deployment
default is loopback-only: docker-compose.yaml binds
127.0.0.1:8080:8080, making the listener unreachable from the LAN unless you
deliberately opt out. Maestro itself stays plaintext HTTP; TLS terminates in a
reverse proxy (D6 — no TLS machinery inside the process).
Single host
Reach the UI over SSH from your workstation:
ssh -L 8080:127.0.0.1:8080 <host>
# then open http://localhost:8080
Reverse proxy (LAN / public)
Put Caddy, Traefik or nginx in front of http://127.0.0.1:8080 and terminate
TLS there:
maestro.example.org {
reverse_proxy 127.0.0.1:8080
}
- WebSocket: the UI uses
/api/ws. Caddy and Traefik proxy upgrades automatically; nginx needs explicit headers:location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } - Cookies behind the proxy: set
COOKIE_SECURE=truein Maestro's environment so both session cookies (maestro_access/maestro_refresh) are markedSecure. - Host header: mutating requests carry an Origin/Referer CSRF check that
compares hosts. A proxy that preserves
Hostworks unchanged; if you rewrite the host, keep forwardingX-Forwarded-*and serve the UI on the same host you proxy to.
Languages
Go
63.9%
TypeScript
32.3%
CSS
3.3%
HTML
0.3%
Dockerfile
0.2%