feat: deploy to Frostmoln production #391

Merged
argoyle merged 2 commits from feat/frostmoln-production into main 2026-10-15 21:16:08 +00:00
Owner

Moves the production deploy from AWS to the Frostmoln production cluster (namespace schemas), with unboundsoftware/schemas.

  • deploy-prod (AWS, failing since CI left AWS) → deploy-prod-frostmoln: deploy prod-frostmoln -n schemas.
  • Restricted Pod Security: nginxinc/nginx-unprivileged (uid 101, port 8080; 1.31.7 isn't published for it yet, so 1.31.6). nginx.conf: no user, pid and temp paths under /tmp, listen 8080. Configs copied with --chmod=644. Service is ClusterIP.
  • autoscale-prod/pdb-prod → -prod-frostmoln; the ALB ingress → a Traefik one for / on schemas.unbound.se (the API's /query ingress wins on the longer path).

Checked locally (amd64): as uid 101 with all capabilities dropped, /health, / and SPA routes 200, security headers present.

Merge with the schemas PR, after infra#1878 is applied.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ma8eHhW59hLAJuLzBnLvUu

Moves the production deploy from AWS to the Frostmoln production cluster (namespace `schemas`), with unboundsoftware/schemas. - `deploy-prod` (AWS, failing since CI left AWS) → `deploy-prod-frostmoln`: `deploy prod-frostmoln -n schemas`. - Restricted Pod Security: `nginxinc/nginx-unprivileged` (uid 101, port 8080; 1.31.7 isn't published for it yet, so 1.31.6). `nginx.conf`: no `user`, pid and temp paths under `/tmp`, `listen 8080`. Configs copied with `--chmod=644`. Service is ClusterIP. - `autoscale-prod`/`pdb-prod` → `-prod-frostmoln`; the ALB ingress → a Traefik one for `/` on `schemas.unbound.se` (the API's `/query` ingress wins on the longer path). Checked locally (amd64): as uid 101 with all capabilities dropped, `/health`, `/` and SPA routes 200, security headers present. **Merge with** the schemas PR, after infra#1878 is applied. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Ma8eHhW59hLAJuLzBnLvUu
argoyle added 2 commits 2026-10-14 20:26:34 +00:00
The AWS deploy-prod job has failed since CI left AWS (no k8s.unbound.se
context on the runners). Deploys now go to the Frostmoln production
cluster (namespace schemas), the way the sites do.

Frostmoln enforces restricted Pod Security: the pod runs as the image's
non-root user with a matching securityContext. The prod-only manifests
move to the prod-frostmoln target; the ALB ingress becomes a Traefik one
with a Let's Encrypt certificate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ma8eHhW59hLAJuLzBnLvUu
fix: make the nginx config readable by the unprivileged user
schemas-app / build (pull_request) Successful in 4m9s
schemas-app / deploy-prod-frostmoln (pull_request) Skipped
0f7610d03f
COPY keeps the source file's mode; a 600 file (local checkouts) left
uid 101 unable to read it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ma8eHhW59hLAJuLzBnLvUu
argoyle merged commit b6812b9d55 into main 2026-10-15 21:16:08 +00:00
argoyle deleted branch feat/frostmoln-production 2026-10-15 21:16:09 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unboundsoftware/schemas-app#391