ldc-volena/manifest.yaml

210 lines
6.1 KiB
YAML
Raw Permalink Normal View History

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"
DB_HOST: "${APP_DB_HOST}"
2024-07-09 12:48:26 +00:00
DB_DATABASE: "${APP_DB_DATABASE}"
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}"
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
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
- 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",
]
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"
args:
2026-10-23 14:30:52 +02:00
- "k8s-queues.sh"
envFrom:
2026-10-23 14:30:52 +02:00
- configMapRef:
name: ${CI_PROJECT_PATH_SLUG}-config-map
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
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: "* * * * *"
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