feat: deploy to Frostmoln production
lingonpaj-site / build (pull_request) Successful in 2m28s
lingonpaj-site / deploy-prod-frostmoln (pull_request) Skipped

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 sites), the way Shiny deploys to Frostmoln staging.

Frostmoln enforces restricted Pod Security, so the image is
nginx-unprivileged (uid 101, port 8080) with a matching securityContext.
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
This commit is contained in:
argoyleandClaude Opus 5.5 committed 2026-10-14 19:32:45 +02:00
1 parent 0b066ee2a4
commit c6191756c5
6 files changed
+53 -33

No files matched your search

+12 -4
View File
@@ -22,6 +22,11 @@ spec:
labels:
app.kubernetes.io/name: lingonpaj-site
spec:
securityContext:
runAsNonRoot: true
runAsUser: 101
seccompProfile:
type: RuntimeDefault
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -39,14 +44,18 @@ spec:
readinessProbe:
httpGet:
path: /health
port: 80
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
imagePullPolicy: Always
image: ${IMAGE}
ports:
- containerPort: 80
- containerPort: 8080
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
resources:
requests:
cpu: 5m
@@ -64,9 +73,8 @@ metadata:
labels:
app.kubernetes.io/name: lingonpaj-site
spec:
type: NodePort
selector:
app.kubernetes.io/name: lingonpaj-site
ports:
- port: 80
targetPort: 80
targetPort: 8080
+20
View File
@@ -0,0 +1,20 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: lingonpaj-site
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
spec:
ingressClassName: traefik
rules:
- host: "lingonpaj.com"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: lingonpaj-site
port:
number: 80
-23
View File
@@ -1,23 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: lingonpaj-site-ingress
annotations:
kubernetes.io/ingress.class: "alb"
alb.ingress.kubernetes.io/group.name: default
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: "443"
spec:
rules:
- host: "lingonpaj.com"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: lingonpaj-site
port:
number: 80