Files
SRCmail/deploy/k8s/deployment.yaml
T
Bernd RodlerandClaude Opus 4.8 a3d551b640 feat(deploy): k8s manifests for microk8s (vncmail.sandbox.vnc.de)
Bulwark is stateful (local /app/data) — Vercel serverless (read-only fs)
crashes it. Deploy as a container with 4 persistent volumes on microk8s,
alongside bulwark.sandbox.vnc.de. Adds deploy/k8s/ (namespace, pvc, deployment,
service, ingress, secret template, runbook) + rewrites setup doc off Vercel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 17:09:54 +02:00

88 lines
2.6 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: vncmail-plus
namespace: vncmail
labels:
app: vncmail-plus
spec:
replicas: 1
selector:
matchLabels:
app: vncmail-plus
# RWO volumes can only mount to one pod — Recreate avoids a stuck rollout.
strategy:
type: Recreate
template:
metadata:
labels:
app: vncmail-plus
spec:
# The image runs as uid/gid 1001 (nextjs:nodejs) and the Dockerfile
# chowns /app/data to 1001. fsGroup makes the mounted PVCs writable by it.
securityContext:
fsGroup: 1001
runAsUser: 1001
runAsGroup: 1001
# ghcr package is private by default — see deploy/k8s/README.md to create
# this pull secret. Delete this block if you make the package public.
imagePullSecrets:
- name: ghcr-pull
containers:
- name: vncmail-plus
# dev image (built from the `dev` branch by CI). For production pin a
# digest: ghcr.io/brvncde-dotcom/vncmail-plus-dev@sha256:<digest>
image: ghcr.io/brvncde-dotcom/vncmail-plus-dev:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
envFrom:
- secretRef:
name: vncmail-env
env:
- name: HOSTNAME
value: "0.0.0.0"
- name: PORT
value: "3000"
readinessProbe:
httpGet:
path: /api/health
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
httpGet:
path: /api/health
port: 3000
initialDelaySeconds: 25
periodSeconds: 30
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: "1"
memory: 1Gi
volumeMounts:
- name: settings
mountPath: /app/data/settings
- name: admin
mountPath: /app/data/admin
- name: admin-state
mountPath: /app/data/admin-state
- name: telemetry
mountPath: /app/data/telemetry
volumes:
- name: settings
persistentVolumeClaim:
claimName: vncmail-settings
- name: admin
persistentVolumeClaim:
claimName: vncmail-admin
- name: admin-state
persistentVolumeClaim:
claimName: vncmail-admin-state
- name: telemetry
persistentVolumeClaim:
claimName: vncmail-telemetry