Commit Graph

8 Commits

Author SHA1 Message Date
Leopere 4a9a210aed
ci: re-deploy after generating tunnel_host_key on remote
ci/woodpecker/push/woodpecker Pipeline was successful Details
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:48:06 -05:00
Leopere 42893cf7e7
Replace Docker secrets with host bind mounts for SSH keys
ci/woodpecker/push/woodpecker Pipeline failed Details
Keys are now mounted directly from /root/.ssh/ on the host node
instead of using Docker Swarm secrets. CI deploy step simplified
to verify key files exist and clean up leftover secrets.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:45:56 -05:00
Leopere 443e077e46
ci: trigger pipeline rebuild
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:41:05 -05:00
Leopere f6b40d2432
Fix SSH to ingress: port 65522, auto-load companion cert
- keyutil.go / client ssh.go: if <key>-cert.pub exists next to
  the private key, load it automatically (mirrors openssh behavior)
- stack.production.yml: TRAEFIK_SSH_HOST uses port 65522

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:38:31 -05:00
Leopere 39fe9bc40c
Add docker-compose.override.yml to gitignore
Local dev override mounts real SSH keys for testing the tunnel
server and client without needing Swarm secrets.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:27:03 -05:00
Leopere b2820ed47f
Rework for Swarm deploy on ingress.nixc.us
- labels.go: use `docker service update --label-add/rm` via SSH to
  dynamically manage Traefik labels on the Swarm service itself,
  matching how traefik-http discovers routes from Docker swarm labels
- stack.production.yml: constrain to ingress.nixc.us, host-mode port
  2222, base traefik.enable labels, SWARM_SERVICE_NAME env
- cmd/server/main.go: SWARM_SERVICE_NAME replaces TRAEFIK_CONFIG_DIR
- .woodpecker.yml: hardcode stack name better-argo-tunnels, update
  smoke test env vars

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:24:13 -05:00
Leopere ccead8733a
Add Woodpecker CI, production stack, and compose files
- .woodpecker.yml: test, build+push x86 images, smoke test, deploy to Swarm
- docker-compose.production.yml: CI build targets for server + client images
- stack.production.yml: Swarm stack with secrets, Traefik TCP labels, port range
- docker-compose.yml: simplified to minimal build+image (matches smsbridge pattern)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:18:54 -05:00
Leopere d5a805853a
Initial commit: reverse SSH tunnel server for Traefik
Go binary pair (server + client) that establishes reverse SSH tunnels
and dynamically registers Traefik routes by SSHing into the ingress
host to write file-provider config. Clients need only a private key,
server address, domain, and local port as envvars.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 18:16:41 -05:00