2023-05-26 12:43:22 +00:00
|
|
|
---
|
|
|
|
|
apiVersion: v1
|
|
|
|
|
kind: ConfigMap
|
|
|
|
|
metadata:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
|
|
|
|
data:
|
|
|
|
|
APP_NAME: "${APP_APP_NAME}"
|
|
|
|
|
APP_ENV: "${APP_APP_ENV}"
|
|
|
|
|
APP_KEY: "${APP_APP_KEY}"
|
|
|
|
|
APP_DEBUG: "${APP_APP_DEBUG}"
|
2024-07-09 12:48:26 +00:00
|
|
|
APP_URL: "https://${REDIRECT}${APP_DOMAIN}"
|
2023-05-26 12:43:22 +00:00
|
|
|
LOG_CHANNEL: "k8s"
|
2026-01-22 11:10:19 +01:00
|
|
|
DB_HOST: "${APP_DB_HOST}"
|
2024-07-09 12:48:26 +00:00
|
|
|
DB_DATABASE: "${APP_DB_DATABASE}"
|
2026-07-23 11:09:05 +02:00
|
|
|
QUEUE_CONNECTION: "${APP_QUEUE_CONNECTION}"
|
2024-07-09 12:48:26 +00:00
|
|
|
DB_USERNAME: "${APP_DB_USERNAME}"
|
|
|
|
|
DB_PASSWORD: "${APP_DB_PASSWORD}"
|
|
|
|
|
MAIL_HOST: "${APP_MAIL_HOST}"
|
|
|
|
|
MAIL_PORT: "${APP_MAIL_PORT}"
|
|
|
|
|
MAIL_USERNAME: "${APP_MAIL_USERNAME}"
|
|
|
|
|
MAIL_PASSWORD: "${APP_MAIL_PASSWORD}"
|
|
|
|
|
MAIL_ENCRYPTION: "${APP_MAIL_ENCRYPTION}"
|
|
|
|
|
MAIL_FROM_ADDRESS: "${APP_MAIL_FROM_ADDRESS}"
|
|
|
|
|
MAIL_FROM_NAME: "${APP_APP_NAME}"
|
2024-03-26 16:36:53 +01:00
|
|
|
MAIL_CONTACT_REMARK: "${APP_MAIL_CONTACT_REMARK}"
|
|
|
|
|
MAIL_CONTACT_SPONSORING: "${APP_MAIL_CONTACT_SPONSORING}"
|
|
|
|
|
MAIL_CONTACT_SERVICE: "${APP_MAIL_CONTACT_SERVICE}"
|
|
|
|
|
MAIL_CONTACT_OTHER: "${APP_MAIL_CONTACT_OTHER}"
|
2024-03-26 16:10:33 +01:00
|
|
|
GOOGLE_RECAPTCHA_PRIVATE: "${APP_GOOGLE_RECAPTCHA_PRIVATE}"
|
|
|
|
|
GOOGLE_RECAPTCHA_PUBLIC: "${APP_GOOGLE_RECAPTCHA_PUBLIC}"
|
|
|
|
|
GOOGLE_RECAPTCHA_VERSION: "${APP_GOOGLE_RECAPTCHA_VERSION}"
|
2023-05-26 12:43:22 +00:00
|
|
|
SENTRY_LARAVEL_DSN: "${APP_SENTRY_LARAVEL_DSN}"
|
|
|
|
|
MATOMO_SITE_ID: "${APP_MATOMO_SITE_ID}"
|
2025-03-06 14:51:21 +00:00
|
|
|
SAML2_SP_CERT_x509: "${APP_SAML2_SP_CERT_x509}"
|
|
|
|
|
SAML2_SP_CERT_PRIVATEKEY: "${APP_SAML2_SP_CERT_PRIVATEKEY}"
|
|
|
|
|
SAML2_CONTACT_TECHNICAL_EMAIL: "${APP_SAML2_CONTACT_TECHNICAL_EMAIL}"
|
|
|
|
|
SAML2_CONTACT_SUPPORT_EMAIL: "${APP_SAML2_CONTACT_SUPPORT_EMAIL}"
|
2025-03-06 16:42:22 +00:00
|
|
|
SAML2_DEFAULT_TENANT_UUID: "${APP_SAML2_DEFAULT_TENANT_UUID}"
|
2026-01-12 16:05:00 +01:00
|
|
|
UWIL_ADMIN_SECURE_CIDR_LIST: "${APP_GLOBAL_UWIL_ADMIN_SECURE_CIDR_LIST}"
|
2026-03-03 10:16:19 +01:00
|
|
|
UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST: "${APP_UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST}"
|
2026-01-12 16:05:00 +01:00
|
|
|
|
2024-03-26 16:10:33 +01:00
|
|
|
---
|
|
|
|
|
apiVersion: v1
|
|
|
|
|
kind: PersistentVolumeClaim
|
|
|
|
|
metadata:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-pvc-storage
|
|
|
|
|
spec:
|
|
|
|
|
storageClassName: "csi-cinder-classic"
|
|
|
|
|
accessModes:
|
|
|
|
|
- ReadWriteOnce
|
|
|
|
|
resources:
|
|
|
|
|
requests:
|
|
|
|
|
storage: $APP_PVC_SIZE
|
|
|
|
|
|
2023-05-26 12:43:22 +00:00
|
|
|
---
|
|
|
|
|
apiVersion: apps/v1
|
|
|
|
|
kind: Deployment
|
|
|
|
|
metadata:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-deployment
|
|
|
|
|
spec:
|
|
|
|
|
replicas: 1
|
|
|
|
|
selector:
|
|
|
|
|
matchLabels:
|
|
|
|
|
app: ${CI_PROJECT_PATH_SLUG}-app
|
|
|
|
|
template:
|
|
|
|
|
metadata:
|
|
|
|
|
labels:
|
|
|
|
|
app: ${CI_PROJECT_PATH_SLUG}-app
|
|
|
|
|
spec:
|
|
|
|
|
containers:
|
|
|
|
|
- name: ${CI_PROJECT_PATH_SLUG}-container
|
|
|
|
|
image: $IMAGE_TAG
|
|
|
|
|
envFrom:
|
|
|
|
|
- configMapRef:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
2026-01-08 14:29:36 +01:00
|
|
|
resources:
|
|
|
|
|
limits:
|
|
|
|
|
cpu: "${APP_CI_CPU_LIMIT}"
|
|
|
|
|
memory: "${APP_CI_MEMORY_LIMIT}"
|
|
|
|
|
requests:
|
|
|
|
|
cpu: "${APP_CI_CPU_REQUEST}"
|
|
|
|
|
memory: "${APP_CI_MEMORY_REQUEST}"
|
2024-03-26 16:10:33 +01:00
|
|
|
volumeMounts:
|
|
|
|
|
- name: storage
|
|
|
|
|
mountPath: /app/srcs/storage
|
2026-07-23 11:09:05 +02:00
|
|
|
- name: ${CI_PROJECT_PATH_SLUG}-queue-worker
|
|
|
|
|
image: $IMAGE_TAG
|
|
|
|
|
lifecycle:
|
|
|
|
|
preStop:
|
|
|
|
|
exec:
|
2026-10-23 14:30:52 +02:00
|
|
|
command:
|
|
|
|
|
[
|
|
|
|
|
"/bin/sh",
|
|
|
|
|
"-c",
|
|
|
|
|
"kill -s TERM 1; while test $(ps ax | grep -v grep | grep bash | wc -l) -gt 0; do sleep 2s; done",
|
|
|
|
|
]
|
2026-07-23 11:09:05 +02:00
|
|
|
resources:
|
|
|
|
|
limits:
|
|
|
|
|
cpu: "${APP_CI_CPU_LIMIT}"
|
|
|
|
|
memory: "${APP_CI_MEMORY_LIMIT}"
|
|
|
|
|
requests:
|
|
|
|
|
cpu: "${APP_CI_CPU_REQUEST}"
|
|
|
|
|
memory: "${APP_CI_MEMORY_REQUEST}"
|
|
|
|
|
command:
|
2026-10-23 14:30:52 +02:00
|
|
|
- "bash"
|
2026-07-23 11:09:05 +02:00
|
|
|
args:
|
2026-10-23 14:30:52 +02:00
|
|
|
- "k8s-queues.sh"
|
2026-07-23 11:09:05 +02:00
|
|
|
envFrom:
|
2026-10-23 14:30:52 +02:00
|
|
|
- configMapRef:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
2026-07-23 11:09:05 +02:00
|
|
|
volumeMounts:
|
2026-10-23 14:30:52 +02:00
|
|
|
- name: storage
|
|
|
|
|
mountPath: /app/srcs/storage
|
2023-05-26 12:43:22 +00:00
|
|
|
imagePullSecrets:
|
|
|
|
|
- name: docker-registry-credentials
|
|
|
|
|
securityContext:
|
2026-10-23 14:30:52 +02:00
|
|
|
runAsUser: 82
|
|
|
|
|
runAsGroup: 82
|
|
|
|
|
fsGroup: 82
|
2023-05-26 12:43:22 +00:00
|
|
|
fsGroupChangePolicy: "OnRootMismatch"
|
2024-03-26 16:10:33 +01:00
|
|
|
volumes:
|
|
|
|
|
- name: storage
|
|
|
|
|
persistentVolumeClaim:
|
|
|
|
|
claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage
|
2023-05-26 12:43:22 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
apiVersion: v1
|
|
|
|
|
kind: Service
|
|
|
|
|
metadata:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-service
|
|
|
|
|
spec:
|
|
|
|
|
selector:
|
|
|
|
|
app: ${CI_PROJECT_PATH_SLUG}-app
|
|
|
|
|
ports:
|
|
|
|
|
- port: 80
|
2025-07-03 16:31:47 +02:00
|
|
|
targetPort: 80
|
2023-05-26 12:43:22 +00:00
|
|
|
|
|
|
|
|
---
|
2024-06-27 13:52:18 +00:00
|
|
|
apiVersion: traefik.io/v1alpha1
|
2023-05-26 12:43:22 +00:00
|
|
|
kind: IngressRoute
|
|
|
|
|
metadata:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-ingress-route
|
|
|
|
|
spec:
|
|
|
|
|
entryPoints:
|
|
|
|
|
- web
|
|
|
|
|
- websecure
|
|
|
|
|
routes:
|
2024-06-27 14:16:43 +00:00
|
|
|
- match: Host(`${APP_DOMAIN}`) || Host(`www.${APP_DOMAIN}`)
|
2023-05-26 12:43:22 +00:00
|
|
|
kind: Rule
|
|
|
|
|
services:
|
|
|
|
|
- name: ${CI_PROJECT_PATH_SLUG}-service
|
|
|
|
|
port: 80
|
|
|
|
|
middlewares:
|
|
|
|
|
- name: redirect-no-www-to-www
|
|
|
|
|
tls:
|
2024-06-27 13:52:18 +00:00
|
|
|
secretName: ${CRT_TLS_NAME}
|
2024-03-26 16:10:33 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
apiVersion: batch/v1
|
|
|
|
|
kind: CronJob
|
|
|
|
|
metadata:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-cronjob
|
|
|
|
|
spec:
|
|
|
|
|
schedule: "* * * * *"
|
2026-01-22 11:10:19 +01:00
|
|
|
successfulJobsHistoryLimit: 1
|
|
|
|
|
failedJobsHistoryLimit: 1
|
2025-01-13 12:00:12 +00:00
|
|
|
concurrencyPolicy: Forbid
|
2024-03-26 16:10:33 +01:00
|
|
|
jobTemplate:
|
|
|
|
|
spec:
|
|
|
|
|
template:
|
|
|
|
|
spec:
|
|
|
|
|
affinity:
|
|
|
|
|
podAffinity:
|
|
|
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
|
|
|
- labelSelector:
|
|
|
|
|
matchExpressions:
|
|
|
|
|
- key: app
|
|
|
|
|
operator: In
|
|
|
|
|
values:
|
|
|
|
|
- ${CI_PROJECT_PATH_SLUG}-app
|
|
|
|
|
topologyKey: "kubernetes.io/hostname"
|
|
|
|
|
namespaces: [$KUBE_NAMESPACE]
|
|
|
|
|
containers:
|
|
|
|
|
- name: ${CI_PROJECT_PATH_SLUG}-scheduled
|
|
|
|
|
image: $IMAGE_TAG
|
|
|
|
|
imagePullPolicy: IfNotPresent
|
|
|
|
|
command:
|
|
|
|
|
- "php"
|
|
|
|
|
args:
|
|
|
|
|
- "artisan"
|
|
|
|
|
- "schedule:run"
|
|
|
|
|
envFrom:
|
|
|
|
|
- configMapRef:
|
|
|
|
|
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
|
|
|
|
volumeMounts:
|
|
|
|
|
- name: storage
|
|
|
|
|
mountPath: /app/srcs/storage
|
|
|
|
|
imagePullSecrets:
|
|
|
|
|
- name: docker-registry-credentials
|
|
|
|
|
volumes:
|
|
|
|
|
- name: storage
|
|
|
|
|
persistentVolumeClaim:
|
|
|
|
|
claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage
|
|
|
|
|
securityContext:
|
2026-10-23 14:30:52 +02:00
|
|
|
runAsUser: 82
|
|
|
|
|
runAsGroup: 82
|
|
|
|
|
fsGroup: 82
|
2024-03-26 16:10:33 +01:00
|
|
|
fsGroupChangePolicy: "OnRootMismatch"
|
|
|
|
|
restartPolicy: OnFailure
|