Aller au contenu principal

Directus sur GKE Autopilot

Directus sur GKE Autopilot

Directus est une plateforme open source de CMS headless et de Backend-as-a-Service (BaaS) qui enveloppe n'importe quelle base de données SQL avec des API REST et GraphQL générées automatiquement et une application d'administration sans code. Ce module déploie Directus sur GKE Autopilot au-dessus du socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

Ce guide se concentre sur les services cloud qu'utilise Directus et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications GKE — Workload Identity, entrée (ingress), autoscaling, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_GKE plutôt que de les répéter ici.


1. Vue d'ensemble​

Directus s'exécute comme une charge de travail Node.js. Le déploiement assemble un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotPods Node.js, 2 vCPU / 2 GiB par défaut, autoscaling horizontal
Base de donnéesCloud SQL for PostgreSQL 15Obligatoire — Directus code en dur DB_CLIENT = "pg"
Fichiers partagésFilestore (NFS)Ressources et médias téléversés partagés entre tous les réplicas
Stockage d'objetsCloud StorageUn bucket dédié aux téléversements ; GCS est le pilote de stockage Directus par défaut
CacheRedisActivé par défaut ; utilise par défaut l'IP de l'hôte NFS lorsqu'aucun hôte explicite n'est défini
SecretsSecret ManagerKEY, SECRET, ADMIN_PASSWORD et URL de connexion REDIS générés automatiquement
EntréeCloud Load BalancingLoadBalancer externe, domaine personnalisé + certificat géré en option

Valeurs par défaut judicieuses à connaître d'emblée :

  • PostgreSQL 15 est obligatoire. Directus code en dur DB_CLIENT = "pg". Passer à MySQL ou à NONE empêche le démarrage.
  • GCS est le pilote de stockage de fichiers par défaut. Directus_Common injecte automatiquement STORAGE_GCS_DRIVER, STORAGE_GCS_BUCKET et STORAGE_LOCATIONS = "gcs", de sorte que tous les téléversements vont dans le bucket Cloud Storage dédié.
  • La migration automatique et l'amorçage s'exécutent à chaque démarrage. AUTO_MIGRATE = "true" applique au démarrage toute migration de schéma de base de données en attente. BOOTSTRAP = "true" crée l'utilisateur administrateur et les collections système au premier démarrage — les deux sont idempotents.
  • La mise à l'échelle à zéro est le comportement par défaut (min_instance_count = 0). Directus utilise des sessions stockées dans Redis, de sorte que les démarrages à froid sont acceptables pour les déploiements dont la latence n'est pas critique. Définissez min_instance_count = 1 pour éliminer les démarrages à froid en production.
  • Les KEY et SECRET de Directus sont générés automatiquement et stockés dans Secret Manager. Les faire tourner après le premier déploiement invalide toutes les sessions et tous les JWT actifs.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que vous avez exécuté gcloud container clusters get-credentials <cluster> --region <region> --project <project> et que PROJECT, REGION et NAMESPACE sont définis. L'espace de noms et les autres identifiants sont indiqués dans les sorties du déploiement.

A. GKE Autopilot — la charge de travail Directus​

Les pods Directus sont planifiés sur Autopilot, qui facture le CPU et la mémoire réellement demandés par les pods. L'autoscaling horizontal des pods dimensionne le déploiement entre le nombre minimal et le nombre maximal de réplicas.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Directus pour voir les pods, les révisions et les événements. Kubernetes Engine → Services & Ingress affiche l'IP externe.
  • CLI :
    kubectl get pods,svc,hpa -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100
    kubectl describe hpa -n "$NAMESPACE" # current vs target utilisation
    # Manually verify the Directus health endpoint from within the cluster:
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- curl -sf http://localhost:8055/server/ping

Consultez App_GKE pour la manière dont Autopilot, la mise à l'échelle et le type de charge de travail (Deployment ou StatefulSet) sont gérés.

B. Cloud SQL for PostgreSQL 15​

Directus stocke toutes les données applicatives dans une instance gérée Cloud SQL for PostgreSQL 15. Les pods y accèdent via le sidecar Cloud SQL Auth Proxy par un socket Unix. Lors du premier déploiement, un job db-init crée la base de données applicative et l'utilisateur, accorde les privilèges et installe les extensions uuid-ossp et postgis.

  • Console : SQL → sélectionnez l'instance pour les connexions, les sauvegardes, les flags et les métriques.
  • CLI :
    gcloud sql instances list --project "$PROJECT"
    gcloud sql instances describe <instance-name> --project "$PROJECT"
    # Open an interactive shell to inspect schema/data:
    gcloud sql connect <instance-name> --user=<db-user> --project "$PROJECT"

Le nom de l'instance, le nom de la base de données, l'utilisateur et le secret Secret Manager contenant le mot de passe sont tous exposés dans les sorties. Pour le modèle de connexion, les sauvegardes automatiques et la rotation des mots de passe, consultez App_GKE.

C. Filestore (NFS) et Cloud Storage​

Les ressources téléversées sont écrites sur un partage Filestore (NFS) monté dans chaque pod, afin que tous les réplicas voient les mêmes fichiers. Un bucket Cloud Storage dédié aux téléversements est également provisionné ; Directus est configuré pour utiliser GCS comme pilote de stockage principal via STORAGE_GCS_DRIVER = "gcs".

  • Console : Filestore → Instances pour le partage NFS ; Cloud Storage → Buckets pour le bucket de téléversements.
  • CLI :
    gcloud filestore instances list --project "$PROJECT"
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<uploads-bucket>/ # bucket name is in the Outputs
    # Confirm the NFS share is mounted inside a pod:
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- df -h | grep -i nfs

Consultez App_GKE pour le provisionnement NFS, GCS Fuse et les options CMEK.

D. Cache Redis​

Redis sert de support à la mise en cache des réponses de l'API Directus et à l'état de limitation du débit. Lorsqu'aucun hôte Redis explicite n'est configuré et que NFS est activé, l'IP de l'hôte NFS est utilisée comme point de terminaison Redis par défaut. L'URL de connexion Redis complète (y compris un éventuel mot de passe d'authentification) est stockée sous forme de secret Secret Manager et injectée comme variable d'environnement REDIS.

  • Console : Memorystore → Redis (si vous utilisez une instance gérée).
  • CLI :
    # From a host with network access:
    redis-cli -h <redis-host> ping
    redis-cli -h <redis-host> info keyspace
    # Confirm REDIS is injected into the pod:
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- env | grep REDIS

E. Secret Manager​

Quatre secrets sont générés et stockés automatiquement : KEY (chiffrement des données), SECRET (signature des JWT), ADMIN_PASSWORD (compte administrateur initial) et REDIS (URL de connexion Redis lorsque Redis est activé). Le mot de passe de la base de données est géré séparément par le socle.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    # Retrieve the admin password:
    gcloud secrets versions access latest --secret=<prefix>-admin-password --project "$PROJECT"
    # Retrieve the DB password secret name from Outputs, then:
    gcloud secrets versions access latest --secret=<database_password_secret> --project "$PROJECT"

Le nom database_password_secret figure dans les sorties. Consultez App_GKE pour l'intégration du Secret Store CSI et la rotation.

F. Réseau et entrée​

Par défaut, la charge de travail est exposée via une IP externe Cloud Load Balancing. Un domaine personnalisé avec un certificat géré par Google peut être activé, et une IP statique peut être réservée afin que l'adresse survive aux redéploiements.

  • Console : Network services → Load balancing ; VPC network → IP addresses.
  • CLI :
    kubectl get ingress,svc -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"

Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les détails sur l'IP statique.

G. Cloud Logging et Monitoring​

Les flux stdout/stderr des pods sont envoyés vers Cloud Logging ; les métriques GKE et Cloud SQL vers Cloud Monitoring. Des tests de disponibilité (uptime checks) et des règles d'alerte sont disponibles en option.

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud logging read 'resource.type="k8s_container" AND resource.labels.namespace_name="'"$NAMESPACE"'"' \
    --project "$PROJECT" --limit 50

3. Comportement de l'application Directus​

  • Configuration de la base de données au premier déploiement. Un job db-init s'exécute à chaque apply (execute_on_apply = true). Il crée l'utilisateur de base de données Directus avec le mot de passe généré, crée la base de données directus, installe les extensions uuid-ossp et postgis (un échec de PostGIS n'est pas bloquant) et accorde l'ensemble des privilèges. Le job est idempotent.
  • Amorçage au premier démarrage. BOOTSTRAP = "true" crée l'utilisateur administrateur initial et les collections système Directus au premier démarrage. L'e-mail de l'administrateur est par défaut admin@example.com — remplacez-le via environment_variables = { ADMIN_EMAIL = "you@example.com" } avant le premier déploiement.
  • Migrations à chaque démarrage. AUTO_MIGRATE = "true" fait exécuter à Directus database migrate:latest à chaque démarrage de pod, de sorte que la mise à niveau de application_version applique automatiquement les changements de schéma.
  • Sonde de santé. Les sondes de démarrage et de vivacité ciblent /server/ping, le point de terminaison de vivacité public et non authentifié de Directus (qui renvoie pong/200 dès que le serveur écoute) — /server/health exige une authentification administrateur et renverrait un 403 à une sonde non authentifiée. La sonde de démarrage accorde jusqu'à 300 secondes (failure_threshold = 10, period_seconds = 30) pour absorber la configuration de la base de données au premier démarrage.
  • Rotation de KEY et SECRET. Faire tourner le secret KEY invalide immédiatement toutes les sessions utilisateur actives. Faire tourner SECRET invalide tous les JWT émis. Ne faites jamais tourner l'un ou l'autre sans fenêtre de maintenance planifiée ni notification des clients.
  • Connexion administrateur. Récupérez le mot de passe administrateur généré dans Secret Manager (voir §2.E). L'e-mail administrateur par défaut est admin@example.com, sauf s'il a été remplacé.

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Directus ou notables pour lui sont listés ; toutes les autres entrées sont héritées d'App_GKE avec leur comportement et leurs valeurs par défaut standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(required)Projet Google Cloud cible.
regionus-central1Région de la charge de travail et des ressources régionales.

Groupe 2 — Environnement de déploiement​

VariableValeur par défautDescription
tenant_iddemoSuffixe court qui rend les noms de ressources uniques par environnement. Ne pas modifier après le premier déploiement.
support_users[]E-mails bénéficiant de l'accès au projet et des alertes de surveillance.
resource_labels{}Libellés appliqués à toutes les ressources pour le suivi des coûts et de la propriété.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namedirectusNom de base des ressources. Ne pas modifier après le premier déploiement — il est intégré aux identifiants des secrets Secret Manager.
application_display_nameDirectus CMSNom convivial affiché dans la console.
application_version11.1.0Tag de version de l'image Directus ; incrémentez-le pour déployer une nouvelle version. Épinglez un tag précis — évitez latest en production.
descriptionDirectus - Open Source Headless CMS and Backend-as-a-ServiceAnnotation de description de la charge de travail.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour provisionner uniquement l'infrastructure (Cloud SQL, stockage, secrets) sans déployer la charge de travail.
cpu_limit2000mCPU par pod ; 2 vCPU recommandés pour une génération d'API réactive.
memory_limit2GiMémoire par pod ; 2 GiB au minimum — augmentez-la pour les schémas volumineux ou les transformations d'images.
min_instance_count0Nombre minimal de réplicas. Définissez 1 pour éliminer les démarrages à froid en production.
max_instance_count3Nombre maximal de réplicas (plafond de l'autoscaler).
container_port8055Port d'écoute par défaut de Directus.
enable_cloudsql_volumetrueSidecar Cloud SQL Auth Proxy pour les connexions par socket Unix.
enable_vertical_pod_autoscalingfalseLaisser Autopilot ajuster automatiquement les demandes de ressources.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres non secrets supplémentaires. Remplacez ADMIN_EMAIL ici avant le premier déploiement.
secret_environment_variables{}Correspondance variable d'environnement → nom de secret Secret Manager.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerMode d'exposition du Service.
workload_typeDeploymentDeployment (sans état) ou StatefulSet. Pour la plupart des déploiements Directus, conservez la valeur par défaut et utilisez enable_nfs = true pour les ressources partagées.
session_affinityClientIPRoutage persistant (sticky).
network_tags["nfsserver"]Tags de nœud/pod ; nfsserver est requis pour la connectivité NFS.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enabledfalseActiver les modèles de PVC par pod dans la spécification du StatefulSet.
stateful_pvc_size10GiTaille de stockage par PVC de pod. Ne peut pas être réduite après le provisionnement.
stateful_pvc_mount_path/dataChemin du conteneur où le PVC par pod est monté.
stateful_pvc_storage_classstandard-rwoStorageClass Kubernetes pour les PVC.
stateful_headless_servicetrueCréer un Service headless pour des entrées DNS de pod stables.
stateful_pod_management_policyOrderedReadyOrderedReady ou Parallel.
stateful_update_strategyRollingUpdateRollingUpdate ou OnDelete.

Groupe 9 — Règles de fiabilité​

VariableValeur par défautDescription
enable_pod_disruption_budgettrueProtéger la disponibilité lors des mises à niveau des nœuds.
pdb_min_available1Augmentez min_instance_count au-dessus de 1 si vous avez besoin d'une marge pour les évictions.
enable_topology_spreadfalseRépartir les pods entre les zones.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probe/server/ping, HTTP, failure_threshold=10Sonde de démarrage Kubernetes. Accorde jusqu'à 300 s pour les migrations du premier démarrage.
liveness_probe/server/ping, HTTPSonde de vivacité Kubernetes ; le pod est redémarré après 3 échecs consécutifs.
uptime_check_config{ enabled = false, path = "/" }Test de disponibilité Cloud Monitoring facultatif ; désactivé par défaut.
alert_policies[]Règles d'alerte sur métriques facultatives.

Groupe 11 — Jobs et tâches planifiées​

VariableValeur par défautDescription
initialization_jobs[]Laissez vide pour utiliser le job db-init intégré fourni par Directus_Common.
cron_jobs[]CronJobs Kubernetes récurrents (par ex. purge du cache, synchronisation des données).
additional_services[]Services GKE sidecar ou auxiliaires déployés aux côtés de Directus.

Groupe 12 — CI/CD et intégration GitHub​

Intégration Cloud Build / Cloud Deploy standard d'App_GKE — voir App_GKE. Entrées principales : enable_cicd_trigger, github_repository_url, github_token, enable_cloud_deploy.

Groupe 13 — Système de fichiers (NFS)​

VariableValeur par défautDescription
enable_nfstrueVolume Filestore partagé pour les ressources téléversées (à garder activé en multi-réplica).
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionner les buckets supplémentaires de storage_buckets. Le bucket de téléversements de Directus_Common est toujours provisionné.
storage_buckets[{ name_suffix = "data" }]Buckets GCS supplémentaires en plus du bucket de téléversements provisionné automatiquement.
gcs_volumes[]Buckets GCS à monter via le pilote CSI GCS Fuse.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.

Groupe 15 — Cache Redis​

VariableValeur par défautDescription
enable_redistrueUtiliser Redis pour la mise en cache et la limitation du débit.
redis_host""Laissez vide pour utiliser l'IP de l'hôte NFS ; définissez-le explicitement pour une instance Memorystore dédiée.
redis_port6379Port Redis.
redis_auth""Mot de passe d'authentification Redis facultatif (sensible). L'URL de connexion complète est stockée dans Secret Manager.

Groupe 16 — Backend de base de données​

VariableValeur par défautDescription
database_typePOSTGRES_15Directus exige PostgreSQL. Ne pas modifier.
db_namedirectusNom de la base de données PostgreSQL. Ne pas modifier après le premier déploiement.
db_userdirectusUtilisateur applicatif. Ne pas modifier après le premier déploiement.
database_password_length32Longueur du mot de passe généré (16–64).
enable_auto_password_rotationfalseRotation du mot de passe de la base de données sans interruption de service.
enable_postgres_extensionstrueInstaller uuid-ossp (et éventuellement postgis) via db-init.
postgres_extensions["uuid-ossp"]Extensions à installer. Ajoutez "postgis" pour la prise en charge géospatiale.

Groupe 17 — Sauvegarde et maintenance​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron des sauvegardes automatiques (UTC).
backup_retention_days7Rétention ; portez-la à 30–90 pour la production ou la conformité.
enable_backup_import / backup_source / backup_uri / backup_formatoptions de restaurationRestaurer à partir d'une sauvegarde lors du déploiement. Définissez enable_backup_import = false immédiatement après une restauration réussie.

Groupe 18 — Scripts SQL personnalisés​

enable_custom_sql_scripts, custom_sql_scripts_bucket, custom_sql_scripts_path, custom_sql_scripts_use_root — exécutent du SQL depuis un bucket GCS après le provisionnement. Voir App_GKE.

Groupe 19 — Domaine personnalisé, IP statique et réseau​

VariableValeur par défautDescription
enable_custom_domaintrueProvisionner un Ingress pour les noms d'hôte personnalisés + un certificat géré.
application_domains[]Noms d'hôte à servir.
reserve_static_iptrueIP externe stable d'un redéploiement à l'autre.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExiger une connexion Google devant Directus.
iap_authorized_users / iap_authorized_groups[]Qui peut accéder.
iap_oauth_client_id / iap_oauth_client_secret""Obligatoires lorsque IAP est activé (sensibles).
iap_support_email""Affiché sur l'écran de consentement OAuth.

Groupe 21 — Cloud Armor​

VariableValeur par défautDescription
enable_cloud_armorfalseAssocier une règle Cloud Armor (WAF) au backend de l'Ingress.
admin_ip_ranges[]CIDR autorisés pour l'accès privilégié.
cloud_armor_policy_namedefault-waf-policyNom de la règle.
enable_cdnfalseActiver Cloud CDN via la Gateway API.

Groupe 22 — VPC Service Controls et journalisation d'audit​

VariableValeur par défautDescription
enable_vpc_scfalseAppliquer un périmètre VPC-SC (nécessite organization_id). Utilisez d'abord vpc_sc_dry_run = true.
vpc_cidr_ranges / vpc_sc_dry_run(set)CIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseCloud Audit Logs détaillés.

5. Sorties​

Ces valeurs sont renvoyées à l'issue d'un déploiement réussi et constituent le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du Service Kubernetes.
namespaceEspace de noms dans lequel s'exécute la charge de travail.
service_cluster_ipClusterIP interne au cluster.
stage_service_cluster_ipsCorrespondance des ClusterIP pour les services propres à chaque étape (Cloud Deploy).
service_external_ipIP externe du LoadBalancer (lorsqu'une IP statique est réservée).
service_urlURL permettant d'atteindre Directus.
database_instance_nameNom de l'instance Cloud SQL.
database_nameNom de la base de données applicative.
database_userUtilisateur de la base de données applicative.
database_password_secretSecret Secret Manager contenant le mot de passe de la base de données.
database_host / database_portPoint de terminaison de la base de données (127.0.0.1 via l'Auth Proxy) / port.
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsRéseau VPC, présence, régions disponibles.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channelsÉtat de la surveillance et canaux.
initialization_jobs / db_import_jobNoms des jobs de configuration et d'import (facultatif).
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / cicd_configurationÉtat et détails du CI/CD (dépôt, déclencheur, registre).
github_repository_url / github_repository_owner / github_repository_nameDétails GitHub du CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique si le cluster et la charge de travail sont prêts.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat de la journalisation d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
database_typePOSTGRES_15CritiqueDirectus exige PostgreSQL ; passer à MySQL ou à NONE empêche le démarrage et rend orpheline la base de données existante.
application_namedéfinie une seule foisCritiqueIntégré aux identifiants des secrets Secret Manager (KEY, SECRET, ADMIN_PASSWORD). Le modifier recrée tous les secrets — toutes les sessions et tous les JWT actifs sont immédiatement invalidés.
tenant_iddéfini une seule foisCritiqueLe modifier après le premier déploiement rend orpheline l'instance Cloud SQL et génère une nouvelle base de données vide ainsi que de nouveaux KEY/SECRET, invalidant toutes les sessions.
Secrets KEY / SECRETgénérés automatiquement, ne jamais les faire tourner à la légèreCritiqueFaire tourner KEY déconnecte tous les utilisateurs. Faire tourner SECRET invalide tous les jetons d'API. Ne les faites tourner que pendant une fenêtre de maintenance planifiée.
Variable d'env. ADMIN_EMAILune adresse e-mail réelleÉlevéLa valeur par défaut admin@example.com crée le compte administrateur avec une adresse facile à deviner. Remplacez-la via environment_variables = { ADMIN_EMAIL = "you@example.com" } avant le premier déploiement.
quota_memory_requests / quota_memory_limitsunités binaires (4Gi)CritiqueDes entiers nus (par ex. "4") sont interprétés comme des octets — cela bloque définitivement la planification de tous les pods.
enable_nfstrueÉlevéSans NFS partagé, les ressources téléversées écrites par un pod sont invisibles pour les autres et perdues au redémarrage (sauf usage exclusif de GCS Fuse).
enable_redistrue en multi-réplicaÉlevéSans Redis, chaque pod dispose d'un cache isolé ; la limitation du débit se fait par pod et la mise en cache de Directus ne fonctionne plus entre réplicas.
redis_host"" (NFS) ou expliciteÉlevéAucun point de terminaison Redis valide si Redis est activé, NFS désactivé et aucun hôte défini.
startup_probe.failure_threshold10 ou plus au premier déploiementÉlevéTrop bas : les migrations Directus peuvent prendre 1 à 3 minutes sur une base de données neuve ; le pod est tué avant la fin des migrations, ce qui provoque une boucle de redémarrage.
enable_backup_importfalse après restaurationÉlevéLe laisser à true relance l'import à chaque apply, écrasant les données en production par la sauvegarde obsolète.
memory_limit2GiÉlevéUne mémoire insuffisante provoque des arrêts OOM lors du chargement du schéma ou des transformations d'images.
min_instance_count1 en productionMoyen0 en production provoque des démarrages à froid de 20 à 40 s sur la première requête API après une période d'inactivité.
enable_pod_disruption_budget + pdb_min_availableprévoir une margeMoyenpdb_min_available = "1" avec min_instance_count = 1 bloque définitivement le drainage des nœuds.
enable_iap / enable_cloud_armorà activer pour les accès d'administrationMoyenSinon, l'interface d'administration est accessible publiquement.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour une rétention de conformité.
enable_vpc_sc + vpc_sc_dry_runcommencer par vpc_sc_dry_run = trueCritiqueActiver l'application sans inclure le compte de service dans le niveau d'accès bloque simultanément Cloud SQL, Secret Manager et Artifact Registry.

Pour le comportement du socle évoqué tout au long de ce guide — IAM et Workload Identity, autoscaling, entrée et certificats, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_GKE. La configuration applicative propre à Directus, partagée avec la variante Cloud Run, est décrite dans Directus_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.