Request Path
Intended Shape
obs.sydiolabs.comis the canonical hosted monitor origin- tool hostnames are flat subdomains under
sydiolabs.com, not nested underobs.sydiolabs.com Cloudflare Accesssits in front of the tunnel for private operator authenticationcloudflaredruns locally and forwards to theobs-proxycontainerobs-proxyis a hostname router, not a new application layer- backend services stay on the Docker network or host loopback, depending on the local stack shape
Routing Model
The proxy keeps the old local ports working while introducing stable hostnames:paperclip.localhost,obs.localhost, andobs.sydiolabs.com-> Paperclip monitor originlangfuse.localhostandlangfuse.sydiolabs.com-> Langfuseredash.localhostandredash.sydiolabs.com-> Redashchartdb.localhostandchartdb.sydiolabs.com-> ChartDBtelescope.localhostandtelescope.sydiolabs.com-> Telescopemindsdb.localhostandmindsdb.sydiolabs.com-> MindsDBbytebase.localhostandbytebase.sydiolabs.com-> Bytebasegigapipe.localhostandgigapipe.sydiolabs.com-> Gigapipeminio.localhostandminio.sydiolabs.com-> Langfuse MinIO APIminio-console.localhostandminio-console.sydiolabs.com-> Langfuse MinIO console
Cloudflare Contract
The minimum Cloudflare-side requirements are:- Create or reuse a named tunnel for the local host.
- Publish an exact tunnel hostname route for
obs.sydiolabs.com. - Publish exact tunnel hostname routes for any tool subdomains you want exposed.
- Point the DNS record at the tunnel target with a proxied
CNAMErecord to the tunnel UUID target. - Create a self-hosted Access application for the protected hostnames and attach at least one Allow policy for operators.
- Access policies do not replace tunnel publication.
- A policy on an app that is not bound to the hostname will not make the hostname work.
- A hostname that resolves to Cloudflare but is not pointed at the tunnel target will not reach
cloudflared. - If requests return
404/openrestyandcloudflaredsees no traffic, treat that as a routing or DNS problem first.
Local Operator Notes
- If port
80is unavailable, setOBS_PROXY_HTTP_PORTfor local-only access to the proxy. - Leave
CLOUDFLARE_TUNNEL_TOKENunset if you only want the local hostname router. - Set
OBS_ENABLE_CLOUDFLARE_TUNNEL=trueonly when you want to exercise the tunnel container without baking the token into your shell history. - Keep the old
localhost:portURLs documented until the hosted path has been fully adopted.
Troubleshooting
| Symptom | Likely layer | First check |
|---|---|---|
403 from Access | Access policy | Is the app present and does it allow your identity? |
1033 | Tunnel health | Is a connector healthy and is the tunnel publishing the hostname? |
404/openresty with no cloudflared logs | DNS / hostname binding | Is the DNS record a proxied CNAME to the tunnel target and does the hostname route exist? |
| Local origin healthy but public host stale | Tunnel or Cloudflare | Restart cloudflared and verify the exact published route |
Why This Shape
- it avoids changing the app code for ingress
- it keeps browser origins stable for auth and passkeys later
- it gives Cloudflare Tunnel a single origin to target
- it preserves local development fallbacks while making the hosted path explicit