Configure Caddy reverse proxy for palinks.app on edge-proxy #425
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/pal-e-platform#425
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
Related to
ldraney/pal-e-platform #435(DNS A record must be set first before Caddy can serve traffic).Repo
ldraney/pal-e-platformUser Story
As a platform operator
I want Caddy on the edge node to reverse-proxy palinks.app with automatic TLS
So that public traffic reaches the k8s service without manual certificate management
Context
Caddy is installed on the edge-proxy VPS (178.156.129.142) via cloud-init but has no site blocks configured yet. The edge VPS serves as the public ingress point — DNS A records point domains here, and Caddy reverse-proxies traffic over Tailscale to internal k8s services.
Decision: Salt state management (not manual SSH). All Caddy configuration will be managed through Salt states so that changes are reproducible, auditable, and recoverable. Manual SSH edits to
/etc/caddy/Caddyfileare explicitly rejected.The Caddyfile pattern for palinks.app:
palinks.appblock withreverse_proxytopalinks.tail5b443a.ts.net:443usingtls_server_nametransportwww.palinks.appblock with permanent redirect topalinks.appFile Targets
Files the agent should create:
salt/states/caddy/init.sls-- Salt state for Caddy package, service, and Caddyfile deploymentsalt/states/caddy/Caddyfile.j2-- Jinja2 template for the Caddyfile with palinks.app site blocksFiles the agent should NOT touch:
salt/states/cloud-init/-- Caddy install is handled there already; this ticket only adds site config#435Feature Flag
none
Acceptance Criteria
salt/states/caddy/init.slsapplies successfully on edge-proxycurl -I https://palinks.appreturns HTTP 200curl -I https://www.palinks.appreturns HTTP 301 redirect tohttps://palinks.apppalinks.tail5b443a.ts.net:443with correcttls_server_nametransportTest Expectations
curl -I https://palinks.appreturns 200 with valid TLScurl -I https://www.palinks.appreturns 301 tohttps://palinks.appsalt 'edge-proxy' state.apply caddyConstraints
pal-e-platform #435) — Caddy cannot obtain a TLS certificate until DNS resolves to the edge VPScaddy validate) before reload.Checklist
Related
pal-e-platform-- project this affectsldraney/pal-e-platform #435-- DNS A record prerequisiteScope Review: NEEDS_REFINEMENT
Review note:
review-1465-2026-06-14Issue body contains all necessary information but is written as free-form prose instead of following the
template-issue-featurestructure. Traceability is mostly complete but the backing architecture note is missing.Issues found:
template-issue-feature-- needs restructuring into standard sections (Type, Lineage, Repo, User Story, File Targets, Acceptance Criteria, etc.)salt/states/caddy/Caddyfile.j2template if Option B is chosen[SCOPE]Missing architecture notearch-pal-e-platformin pal-e-docsScope Review: APPROVED
Review note:
review-1465-2026-06-14-v2Re-review after refinement. All 5
[BODY]recommendations from initial review are resolved. Issue now follows fulltemplate-issue-featurestructure with all 12 required sections present.Key findings:
salt/states/caddy/init.slsandCaddyfile.j2follow existingfirewall/patternNote for implementing agent: Salt minion is not currently installed on edge-proxy (cloud-init only installs Tailscale + Caddy). Bootstrap Salt minion before applying states.