Commit Graph
13 Commits
Author SHA1 Message Date
TZGyn 437a2e447e Issue real certificates via ACME DNS-01
Tunnels now get a per-tunnel certificate from the configured ACME CA
(Let's Encrypt by default) with DNS-01 through Porkbun, keeping the
client's CSR and key. Issuance is asynchronous (issuing/ready/failed);
the account persists in the store, renewals run in a 30-day window with
retries, and a failed renewal keeps the old certificate serving.
Switching from the local CA reissues existing tunnels automatically,
and the admin dashboard shows the issuer and certificate state.

Verified against Pebble and Let's Encrypt staging.
2026-10-25 23:33:52 +08:00
TZGyn 05d326f47f Dashboard: link each route to its public URL 2026-10-25 16:40:35 +08:00
TZGyn bc52af33cf Rebuild the admin dashboard as a Svelte 5 + TypeScript app
Frontend in web/ (Vite via bun, pure CSS, no component libraries),
built to internal/dashboard/dist and embedded into the binary; the
Dockerfile builds it in a bun stage. Old static dashboard.html removed.
2026-10-25 16:34:21 +08:00
TZGyn f5fcdd7bbb Add admin dashboard at / with bearer-token overview API 2026-10-25 15:12:33 +08:00
TZGyn 4acf226455 Document the real webhook root causes (hook secret edits ignored, SHA tip fetch) 2026-10-25 15:03:33 +08:00
TZGyn 9c1680deb3 chore: webhook test 2 2026-10-25 14:59:34 +08:00
TZGyn 3780c672f1 chore: webhook deploy test 2026-10-25 14:55:27 +08:00
TZGyn 7dc2eaab29 Note the per-app webhook secret gotcha 2026-10-25 14:45:46 +08:00
TZGyn 89a4a3991b Document Gitea webhook verification details 2026-10-25 14:43:02 +08:00
TZGyn cbd367373e Document Coolify deployment facts (app uuid, labels, webhook) 2026-10-25 14:40:06 +08:00
TZGyn 94bdce6809 Track cmd/tunneld; scope gitignore to the built binary
The bare 'tunneld' ignore pattern also matched the cmd/tunneld
directory, so the server's main.go was never committed and the
Coolify build failed on COPY cmd. Also update deploy docs for the
Coolify/Traefik topology (API via HTTPS router, tunnel traffic via
TCP SNI passthrough).
2026-10-25 14:36:32 +08:00
TZGyn 4dc3d14a06 Add Dockerfile for Coolify deployment
Static non-root alpine image; tunneld must own host ports 443/80
directly since visitor TLS is SNI-routed and never proxy-terminated.
2026-10-25 13:53:58 +08:00
TZGyn 682a341010 M1: single-node OpenTunnel-compatible server
HTTP API per the recorded contract, bridge WebSocket, SNI relay with
pass-through tunnel TLS, local CA issuance, JSON store. Verified
end-to-end with the official opentunnel CLI.
2026-10-25 11:52:45 +08:00