Files
wild-directory/karrot/versions/1/deployment-backend.yaml
Paul Payne e25b07126c Bump 33 apps to latest upstream versions
Patch/minor bumps:
- akaunting: 3.1.21 -> 3.2.3
- aptly: 1.6.2 -> 1.6.3
- baserow: 2.2.2 -> 2.4.1
- crowdsec: v1.7.8 -> v1.8.1
- docker-registry: 3.0.0 -> 3.1.2
- etherpad: 2.2.7 -> 2.6.1
- headlamp: v0.42.0 -> v0.46.0
- headscale: 0.29.1 -> 0.29.5
- indico: 3.3.12 -> 3.3.14
- karrot: v17.4.1 -> v17.4.2
- keila: 0.17.1 -> 0.30.3
- lemmy: 0.19.15 -> 0.19.19
- loomio: 3.0.24 -> 3.12.0
- mastodon: 4.5.3 -> 4.7.3
- mautic: 7.1.2 -> 7.2.1
- memcached: 1.6.32 -> 1.6.45
- mobilizon: 5.2.3 -> 5.2.4
- nocodb: 2026.04.1 -> 2026.09.1
- open-webui: 0.9.5 -> 0.12.3
- outline: 1.8.1 -> 1.11.0
- peertube: 8.2.1 -> 8.2.4
- pixelfed: 0.12.7 -> 0.15.1
- pretix: 2026.5.1 -> 2026.8.0
- synapse: v1.144.0 -> v1.163.0
- traefik: v3.4.1 -> v3.7.16
- typebot: 3.17.1 -> 3.19.1
- vaultwarden: 1.37.1 -> 1.37.4
- writefreely: 0.15.1 -> 0.17.2

Multi-file updates for apps with workers/sidekiq/streaming:
- mastodon (5 files), indico (3 files), karrot (4 files),
  lemmy (2 files), loomio (2 files), typebot (2 files),
  pixelfed (2 files), synapse (2 refs), pretix (2 refs),
  aptly (2 refs)
2026-10-23 14:02:09 +00:00

175 lines
5.2 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: karrot-backend
namespace: {{ .namespace }}
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
component: backend
template:
metadata:
labels:
component: backend
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
initContainers:
- name: migrate
image: codeberg.org/karrot/karrot-backend:v17.4.2
command: ["/entrypoint.sh", "migrate"]
env:
- name: MODE
value: prod
- name: BASE_URL
value: https://{{ .domain }}
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: karrot-secrets
key: secretKey
- name: DATABASE_NAME
value: {{ .db.name }}
- name: DATABASE_USER
value: {{ .db.user }}
- name: DATABASE_HOST
value: {{ .db.host }}
- name: DATABASE_PORT
value: "{{ .db.port }}"
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: karrot-secrets
key: dbPassword
- name: REDIS_HOST
value: {{ .redis.host }}
- name: EMAIL_BACKEND
value: smtp
- name: EMAIL_FROM
value: {{ .smtp.from }}
- name: SMTP_HOST
value: {{ .smtp.host }}
- name: SMTP_PORT
value: "{{ .smtp.port }}"
- name: SMTP_USER
value: {{ .smtp.user }}
- name: SMTP_PASSWORD
valueFrom:
secretKeyRef:
name: karrot-secrets
key: smtp.password
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ALL]
readOnlyRootFilesystem: false
volumeMounts:
- name: karrot-uploads
mountPath: /app/uploads
containers:
- name: karrot-backend
image: codeberg.org/karrot/karrot-backend:v17.4.2
command: ["/entrypoint.sh", "server"]
ports:
- name: http
containerPort: 8000
protocol: TCP
env:
- name: MODE
value: prod
- name: BASE_URL
value: https://{{ .domain }}
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: karrot-secrets
key: secretKey
- name: DATABASE_NAME
value: {{ .db.name }}
- name: DATABASE_USER
value: {{ .db.user }}
- name: DATABASE_HOST
value: {{ .db.host }}
- name: DATABASE_PORT
value: "{{ .db.port }}"
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: karrot-secrets
key: dbPassword
- name: REDIS_HOST
value: {{ .redis.host }}
- name: EMAIL_BACKEND
value: smtp
- name: EMAIL_FROM
value: {{ .smtp.from }}
- name: SMTP_HOST
value: {{ .smtp.host }}
- name: SMTP_PORT
value: "{{ .smtp.port }}"
- name: SMTP_USER
value: {{ .smtp.user }}
- name: SMTP_PASSWORD
valueFrom:
secretKeyRef:
name: karrot-secrets
key: smtp.password
- name: LISTEN_HOST
value: "0.0.0.0:8000"
- name: ALLOWED_HOSTS
value: "{{ .domain }}"
- name: CSRF_TRUSTED_ORIGINS
value: "https://{{ .domain }}"
resources:
limits:
cpu: 1000m
ephemeral-storage: 1Gi
memory: 1Gi
requests:
cpu: 50m
ephemeral-storage: 50Mi
memory: 256Mi
volumeMounts:
- name: karrot-uploads
mountPath: /app/uploads
livenessProbe:
httpGet:
path: /api/
port: 8000
httpHeaders:
- name: Host
value: "{{ .domain }}"
initialDelaySeconds: 60
timeoutSeconds: 5
periodSeconds: 20
failureThreshold: 6
readinessProbe:
httpGet:
path: /api/
port: 8000
httpHeaders:
- name: Host
value: "{{ .domain }}"
initialDelaySeconds: 30
timeoutSeconds: 3
periodSeconds: 10
failureThreshold: 3
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ALL]
readOnlyRootFilesystem: false
volumes:
- name: karrot-uploads
persistentVolumeClaim:
claimName: karrot-uploads
restartPolicy: Always