docs(self-hosting): correct Grafana exposure claim, document Caddy/Tailscale TLS profiles - #3295
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
gittensory-ui | 0170668 | Commit Preview URL Branch Preview URL |
Jul 05 2026, 01:53 AM |
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-07-05 01:53:26 UTC
⏸️ Suggested Action - Manual Review
Review summary Nits — 6 non-blocking
Concerns raised — review before merging
Review context
Contributor next steps
Signal definitions
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
58e64cd to
f00d6f8
Compare
f00d6f8 to
bd953e3
Compare
…ilscale TLS profiles security.tsx claimed Grafana's port was private by default alongside Prometheus/Qdrant/Ollama, but its compose entry publishes 3000:3000 on every interface, unlike Qdrant's confirmed 127.0.0.1-only binding -- correct the claim and note the mitigation. The caddy and tailscale compose profiles each had exactly one line of documentation anywhere; add a full TLS termination walkthrough (Caddyfile contents, DNS prerequisites, removing the app's own port mapping, bring-your-own reverse proxy, Tailscale's network_mode: host and tailnet reachability) and cross-link it from github-app.tsx's PUBLIC_API_ORIGIN/relay-mode/webhook-check sections and from quickstart's profile table. Also name and explain docker-proxy, the read-only Docker-socket proxy that isolates Promtail's service discovery from the raw socket.
Unlike Caddy, Tailscale's sidecar (network_mode: host) doesn't replace the app's listener -- it adds a new interface the existing 0.0.0.0 port-publish becomes reachable through. Telling operators to remove the ports mapping, as for Caddy, makes the app unreachable everywhere, tailnet included. Also corrects the Caddy TLS section: the shipped Caddyfile has no fallback directive, so ACME failure for a real domain does not silently substitute a self-signed cert -- only recognized non-public hostnames like localhost get that automatically.
…ale satisfies GitHub webhook delivery The earlier Caddy port-removal callout still named Tailscale as an alternative, directly contradicting the Tailscale section's own correction that keeping the mapping is required there. Also corrects docs.self-hosting-github-app.tsx: PUBLIC_API_ORIGIN and the wizard's webhook checks previously implied a Tailscale tailnet address could satisfy GitHub's webhook delivery requirement, which it cannot -- GitHub's servers can't reach a private tailnet address. A Tailscale- only instance needs brokered pull mode instead.
The FeatureRow summary, the section heading, its intro paragraph, the Grafana-exposure note, and the quickstart page's profile pointer all still claimed Tailscale removes public reachability on its own -- an exhaustive grep found and corrected every instance, matching the detailed explanation already added: the default port mapping keeps the app reachable on every host interface until you additionally firewall the host or use tailscale serve.
bd953e3 to
0170668
Compare
…ilscale TLS profiles (#3295) * docs(self-hosting): correct Grafana exposure claim, document Caddy/Tailscale TLS profiles security.tsx claimed Grafana's port was private by default alongside Prometheus/Qdrant/Ollama, but its compose entry publishes 3000:3000 on every interface, unlike Qdrant's confirmed 127.0.0.1-only binding -- correct the claim and note the mitigation. The caddy and tailscale compose profiles each had exactly one line of documentation anywhere; add a full TLS termination walkthrough (Caddyfile contents, DNS prerequisites, removing the app's own port mapping, bring-your-own reverse proxy, Tailscale's network_mode: host and tailnet reachability) and cross-link it from github-app.tsx's PUBLIC_API_ORIGIN/relay-mode/webhook-check sections and from quickstart's profile table. Also name and explain docker-proxy, the read-only Docker-socket proxy that isolates Promtail's service discovery from the raw socket. * fix(docs): correct Tailscale port-mapping and Caddy TLS-fallback claims Unlike Caddy, Tailscale's sidecar (network_mode: host) doesn't replace the app's listener -- it adds a new interface the existing 0.0.0.0 port-publish becomes reachable through. Telling operators to remove the ports mapping, as for Caddy, makes the app unreachable everywhere, tailnet included. Also corrects the Caddy TLS section: the shipped Caddyfile has no fallback directive, so ACME failure for a real domain does not silently substitute a self-signed cert -- only recognized non-public hostnames like localhost get that automatically. * fix(docs): scope the Caddy port-removal rule and stop implying Tailscale satisfies GitHub webhook delivery The earlier Caddy port-removal callout still named Tailscale as an alternative, directly contradicting the Tailscale section's own correction that keeping the mapping is required there. Also corrects docs.self-hosting-github-app.tsx: PUBLIC_API_ORIGIN and the wizard's webhook checks previously implied a Tailscale tailnet address could satisfy GitHub's webhook delivery requirement, which it cannot -- GitHub's servers can't reach a private tailnet address. A Tailscale- only instance needs brokered pull mode instead. * fix(docs): remove remaining no-public-port claims about Tailscale The FeatureRow summary, the section heading, its intro paragraph, the Grafana-exposure note, and the quickstart page's profile pointer all still claimed Tailscale removes public reachability on its own -- an exhaustive grep found and corrected every instance, matching the detailed explanation already added: the default port mapping keeps the app reachable on every host interface until you additionally firewall the host or use tailscale serve.
Summary
docs.self-hosting-security.tsxclaimed Grafana's port was private by default alongside Prometheus/Qdrant/Ollama, butdocker-compose.yml'sgrafanaservice publishesports: ["3000:3000"](every interface), unlike Qdrant's confirmed127.0.0.1:6333:6333binding. Corrected the claim and added the mitigation (bind it yourself, or front it with Caddy/Tailscale).caddyandtailscalecompose profiles, which previously had exactly one line of documentation each (a table entry on the quickstart page): the shippedcaddy/Caddyfilecontents, DNS prerequisites for Let's Encrypt, the requirement to remove thegittensoryservice's ownports:mapping when fronting it with either profile (per the compose file's own comments at lines 72 and 349), bringing your own certs, running behind an existing reverse proxy/load balancer, and Tailscale'sTS_AUTHKEY/network_mode: host/tailnet-:8787reachability as the no-public-port alternative.docker-proxy, the read-only Docker-socket proxy inside theobservabilityprofile that isolates Promtail's container-log service discovery from the raw Docker socket — previously never named on any docs page.docs.self-hosting-github-app.tsx'sPUBLIC_API_ORIGINsetup, its pull/push relay-mode explanation, and its webhook-checkcurlexample (all of which assumed ahttps://reviews.example.comorigin already exists), and from the quickstart profile table.Advances #1819.
Scope
type(scope): short summaryConventional Commit format.apps/gittensory-ui/src/routes/.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run actionlint— not applicable, no workflow changesnpm run typecheck(rannpm run ui:typecheck; no backend/src/**changes)npm run test:coverage— not applicable, docs-only change with nosrc/**lines touched (no Codecov obligation)npm run test:workers— not applicable, no worker code changednpm run build:mcp— not applicable, no MCP changesnpm run test:mcp-pack— not applicable, no MCP changesnpm run ui:openapi:check— not applicable, no API/schema changesnpm run ui:lint(plusnpm --workspace @jsonbored/gittensory-ui run formatto fix prettier prose wrapping)npm run ui:typechecknpm run ui:buildnpm run docs:drift-checknpm audit --audit-level=moderate— not applicable, no dependency changesIf any required check was skipped, explain why:
apps/gittensory-ui/src/routes/*.tsxprose/JSX content. Nosrc/**, worker, MCP, API, or dependency files changed, so the backend/coverage/audit/openapi/actionlint checks don't apply. Ran the full applicable subset (lint, typecheck, build, docs-drift-check) plusgit diff --check, all green.Safety
UI Evidencesection — this is docs prose/code-sample content on existing pages using existing components (Callout,CodeBlock,FeatureRow,Link), not a new visual surface; verified locally vianpm run ui:build(clean SSR+client build) and a rendered dev-server check confirming the new "TLS termination" section and its subheadings appear correctly in the page's auto-generated on-this-page navigation.Notes
docker-compose.yml:419-420(ports: ["3000:3000"]) vs. Qdrant'sdocker-compose.yml:277(127.0.0.1:6333:6333).caddy/Caddyfileverbatim rather than inventing an example.docker-proxyrationale is drawn from the compose file's own comment atdocker-compose.yml:517-526, not paraphrased from an external source.