stack.basicstack.de/apps/vikunja/vikunja-deployment.yaml
CTO 2ec560e090 feat(vikunja): enable mailer via port-25 in-cluster relay (DEV-563)
Vikunja now sends reminder/notification emails through
`stalwart-smtp.stalwart.svc.cluster.local:25` using unauthenticated
relay from the pod-network CIDR that Stalwart already trusts. The
`vikunja@basicstack.de` principal exists in Stalwart but its password
is unknown and admin API access to reset it is currently broken
(admin/andreas/paperclip password auth returns `{"type":"failure"}` per
`stalwart-oidc-only-admin` note). Verified end-to-end: message from
`vikunja@basicstack.de` sent via port-25 relay arrived in the passbolt
mailbox.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-05 10:03:07 +00:00

141 lines
4 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: vikunja
namespace: vikunja
labels:
app: vikunja
component: app
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: vikunja
component: app
template:
metadata:
labels:
app: vikunja
component: app
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: csi.hetzner.cloud/location
operator: In
values:
- fsn1
initContainers:
- name: wait-for-postgres
image: postgres:16-alpine
command:
- sh
- -c
- |
until pg_isready -h vikunja-postgres -U vikunja; do
echo "Waiting for PostgreSQL..."
sleep 2
done
securityContext:
fsGroup: 1000
containers:
- name: vikunja
image: vikunja/vikunja:2.6.0
ports:
- name: http
containerPort: 3456
env:
- name: VIKUNJA_SERVICE_PUBLICURL
value: https://vikunja.basicstack.de/
- name: VIKUNJA_SERVICE_SECRET
valueFrom:
secretKeyRef:
name: vikunja-app-secrets
key: jwt-secret
- name: VIKUNJA_SERVICE_ENABLEREGISTRATION
value: "false"
- name: VIKUNJA_SERVICE_TIMEZONE
value: Europe/Berlin
- name: VIKUNJA_DATABASE_TYPE
value: postgres
- name: VIKUNJA_DATABASE_HOST
value: vikunja-postgres
- name: VIKUNJA_DATABASE_PORT
value: "5432"
- name: VIKUNJA_DATABASE_DATABASE
value: vikunja
- name: VIKUNJA_DATABASE_USER
value: vikunja
- name: VIKUNJA_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: vikunja-db-credentials
key: postgres-password
- name: VIKUNJA_DATABASE_SSLMODE
value: disable
- name: VIKUNJA_FILES_BASEPATH
value: /app/vikunja/files
- name: VIKUNJA_AUTH_LOCAL_ENABLED
value: "false"
- name: VIKUNJA_AUTH_OPENID_ENABLED
value: "true"
- name: VIKUNJA_AUTH_OPENID_PROVIDERS_BASICSTACK_NAME
value: BasicStack SSO
- name: VIKUNJA_AUTH_OPENID_PROVIDERS_BASICSTACK_AUTHURL
value: https://auth.basicstack.de
- name: VIKUNJA_AUTH_OPENID_PROVIDERS_BASICSTACK_SCOPE
value: openid profile email vikunja_scope
- name: VIKUNJA_AUTH_OPENID_PROVIDERS_BASICSTACK_CLIENTID
valueFrom:
secretKeyRef:
name: vikunja-oidc-secret
key: client-id
- name: VIKUNJA_AUTH_OPENID_PROVIDERS_BASICSTACK_CLIENTSECRET
valueFrom:
secretKeyRef:
name: vikunja-oidc-secret
key: client-secret
- name: VIKUNJA_MAILER_ENABLED
value: "true"
- name: VIKUNJA_MAILER_HOST
value: stalwart-smtp.stalwart.svc.cluster.local
- name: VIKUNJA_MAILER_PORT
value: "25"
- name: VIKUNJA_MAILER_FORCESSL
value: "false"
- name: VIKUNJA_MAILER_SKIPTLSVERIFY
value: "true"
- name: VIKUNJA_MAILER_FROMEMAIL
value: vikunja@basicstack.de
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: "1"
memory: 512Mi
livenessProbe:
httpGet:
path: /api/v1/info
port: 3456
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /api/v1/info
port: 3456
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
volumeMounts:
- name: files
mountPath: /app/vikunja/files
volumes:
- name: files
persistentVolumeClaim:
claimName: vikunja-files