Aller au contenu principal

Supabase sur GKE Autopilot

Supabase sur GKE Autopilot

Supabase est une alternative open source à Firebase — un backend-as-a-service complet construit sur PostgreSQL. Il fournit une base de données PostgreSQL 15 avec l'extension pgvector, des abonnements en temps réel, l'authentification GoTrue, des API REST PostgREST, un service de stockage compatible S3 et un tableau de bord d'administration Studio, le tout derrière une passerelle d'API Kong. Ce module déploie Supabase sur GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

GKE uniquement. Supabase n'est disponible que dans la variante GKE. Son architecture multiservice (passerelle Kong, GoTrue, PostgREST, Realtime, Storage, Studio) requiert des connexions persistantes et des primitives Kubernetes que Cloud Run ne prend pas en charge.

Ce guide se concentre sur les services cloud utilisés par Supabase 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, mise à l'échelle automatique, 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​

Le déploiement Supabase exécute une passerelle d'API Kong comme charge de travail GKE principale, placée devant un ensemble de microservices Supabase. Il assemble les services Google Cloud suivants :

FonctionnalitéService Google CloudRemarques
Passerelle d'API (calcul)GKE AutopilotPods de la passerelle Kong, 1 vCPU / 2 GiB par défaut, mise à l'échelle automatique horizontale
MicroservicesGKE Autopilot (services supplémentaires)Authentification GoTrue, PostgREST, Realtime, API Storage, Studio — chacun dans un Deployment distinct
Base de donnéesGKE Autopilot (supabase/postgres dans l'espace de noms)Obligatoire — Supabase est natif PostgreSQL. Pas Cloud SQL : main.tf définit database_type = "NONE" sur le socle et exécute supabase/postgres comme service supplémentaire
Stockage d'objetsCloud StorageUn bucket dédié avec le suffixe storage pour les téléversements de fichiers
SecretsSecret ManagerSecret de signature JWT (généré automatiquement), anon key, service role key, publishable key, secret key et secret_key_base
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. Le moteur de base de données est imposé ; tout autre moteur empêche le démarrage.
  • Kong fonctionne en mode déclaratif (sans base de données). Le routage est défini dans /home/kong/kong.yml, intégré à l'image du conteneur — aucune base de données Kong n'est nécessaire.
  • Les identifiants JWT sont générés automatiquement ou provisoires. Le secret de signature JWT est généré automatiquement (32 caractères aléatoires). L'anon key et la service role key sont stockées sous forme de valeurs provisoires et doivent être remplacées par des JWT signés valides avant une utilisation en production.
  • Le mot de passe du superutilisateur Postgres de l'espace de noms est généré automatiquement. Comme SECRET_KEY_BASE/DB_ENC_KEY de Realtime, c'est un random_password sans variable d'entrée correspondante — il n'est pas fourni par l'utilisateur et reste interne (ClusterIP, jamais exposé).
  • pgvector est fourni avec l'image de la base de données. pgcrypto, uuid-ossp et pgvector sont inclus dans supabase/postgres, si bien que les fonctionnalités d'IA/embeddings de Supabase fonctionnent d'emblée ; les jobs d'extensions propres au socle sont désactivés (enable_postgres_extensions est remplacé par false dans main.tf) car ils ciblent Cloud SQL.
  • La mise en miroir des images est toujours active. Les images de Kong et des sidecars sont mises en miroir dans Artifact Registry à chaque apply pour éviter les limites de débit de Docker Hub.
  • L'affinité de session vaut None. Kong est sans état ; le routage persistant n'est pas nécessaire au niveau de la passerelle.

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 — passerelle Kong et microservices Supabase​

La charge de travail GKE principale exécute la passerelle d'API Kong sur le port 8000. Kong achemine toutes les requêtes entrantes vers les microservices Supabase selon le préfixe de chemin :

Préfixe de cheminService ciblePort
/auth/v1/*GoTrue (authentification)9999
/rest/v1/*PostgREST (API REST)3000
/realtime/v1/*Realtime (WebSocket)4000
/storage/v1/*API Storage5000

Les services Supabase supplémentaires (GoTrue, PostgREST, Realtime, Storage, Studio) sont déployés comme Deployments Kubernetes distincts dans le même espace de noms via additional_services.

  • Console : Kubernetes Engine → Workloads → sélectionnez une charge de travail pour voir les pods, les événements et les métriques. 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

Consultez App_GKE pour la gestion d'Autopilot, de la mise à l'échelle et du type de charge de travail (Deployment ou StatefulSet).

B. PostgreSQL 15 — supabase/postgres dans l'espace de noms​

Supabase stocke toutes les données applicatives dans un Deployment supabase/postgres exécuté dans le même espace de noms (un service ClusterIP, jamais exposé à l'extérieur) — pas dans Cloud SQL, et sans Auth Proxy. Lors du premier déploiement, le job db-init s'y connecte en tant que supabase_admin, définit les mots de passe des rôles de service, crée les schémas Supabase et applique les droits du schéma public.

Les données sont éphémères. Le pod postgres écrit sur le disque local du pod (ephemeral_storage_limit = "4Gi"), si bien que les données sont réinitialisées au redémarrage du pod — acceptable pour un déploiement de lab ou de test ; un déploiement de production nécessite un PVC bloc par pod.

  • Console : Kubernetes Engine → Workloads → le Deployment postgres.
  • CLI :
    kubectl get deploy,svc -n "$NAMESPACE" | grep postgres
    kubectl exec -n "$NAMESPACE" deploy/<postgres-workload> -- \
    psql -U supabase_admin -d postgres -c '\dn'

Pour le modèle de connexion Cloud SQL propre au socle (non utilisé ici), les sauvegardes et la rotation des mots de passe, consultez App_GKE.

C. Cloud Storage​

Un bucket Cloud Storage dédié (déclaré avec name_suffix = "storage") est provisionné pour les téléversements de fichiers Supabase. L'accès est accordé automatiquement au compte de service de la charge de travail. La prévention de l'accès public est définie sur inherited afin que des ACL au niveau du bucket puissent être utilisées pour servir les objets.

  • Console : Cloud Storage → Buckets.
  • CLI :
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<storage-bucket>/ # bucket name is in the Outputs

Consultez App_GKE pour les options CMEK et les montages GCS Fuse.

D. Secret Manager — identifiants et clés JWT​

L'authentification Supabase repose sur des JWT. Six secrets sont stockés dans Secret Manager :

Suffixe du secretContenuRemarques
-jwt-secretSecret de signature JWT de 32 caractèresGénéré automatiquement si jwt_secret est vide
-anon-keyJWT anonyme publicValeur provisoire par défaut — doit être remplacée
-service-role-keyJWT du rôle de serviceValeur provisoire par défaut — doit être remplacée
-publishable-keyClé d'API opaque publishable (anon)Valeur provisoire si non fournie
-secret-keyClé d'API opaque côté serveurValeur provisoire si non fournie
-key-basesecret_key_base de 64 caractères pour Realtime/SupavisorGénéré automatiquement si secret_key_base est vide

Le mot de passe de la base de données est généré et géré séparément par le socle ; le nom de son secret est indiqué dans les Sorties (database_password_secret).

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    # Retrieve the JWT signing secret:
    gcloud secrets versions access latest --secret=<prefix>-jwt-secret --project "$PROJECT"
    # Update the anon key after generating a signed JWT:
    echo -n "<signed-anon-jwt>" | gcloud secrets versions add <prefix>-anon-key \
    --data-file=- --project "$PROJECT"

Consultez App_GKE pour l'intégration du Secret Store CSI et la rotation.

E. Réseau et entrée​

Par défaut, la passerelle Kong est exposée via une IP externe Cloud Load Balancing. Un domaine personnalisé avec 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 et les détails de l'IP statique.

F. Cloud Logging et Monitoring​

Les sorties stdout/stderr des pods sont envoyées vers Cloud Logging ; les métriques de GKE et de Cloud SQL sont envoyées vers Cloud Monitoring. Des tests de disponibilité 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 Supabase​

  • Configuration de la base de données au premier déploiement. Le job db-init se connecte au service supabase/postgres de l'espace de noms en tant que supabase_admin et, de manière idempotente, définit des mots de passe LOGIN sur les rôles de service que l'image laisse sans mot de passe (authenticator, supabase_auth_admin, supabase_storage_admin), crée les schémas auth, storage, _realtime et realtime avec leurs droits, et définit les GUC de base de données app.settings.jwt_secret/jwt_exp. Il s'exécute de manière non bloquante (execute_on_apply = false) avec sa propre boucle d'attente pg_isready, car le socle crée les jobs d'initialisation avant les services supplémentaires. Il peut être relancé sans risque.
  • Remplacement des JWT provisoires. Après le premier déploiement, les secrets de l'anon key et de la service role key contiennent des chaînes provisoires. Ils doivent être remplacés par des JWT valides signés avec le jwt_secret généré automatiquement avant que les clients Supabase puissent s'authentifier :
    1. Récupérez le secret JWT : gcloud secrets versions access latest --secret=<prefix>-jwt-secret
    2. Générez un JWT anon (role: anon) et un JWT service_role (role: service_role) avec jwt.io ou le générateur de JWT de Supabase.
    3. Téléversez chaque JWT : echo -n "<jwt>" | gcloud secrets versions add <secret-name> --data-file=-
    4. Redémarrez le pod Kong pour qu'il prenne en compte les secrets mis à jour : kubectl rollout restart deploy/<kong-workload> -n "$NAMESPACE"
  • Les identifiants JWT sont immuables en tant qu'ensemble. jwt_secret, anon_key et service_role_key doivent toujours être régénérés ensemble. Modifier le secret JWT sans changer les clés dérivées invalide immédiatement tous les jetons émis.
  • Kong est sans état. La passerelle lit le routage depuis le fichier déclaratif kong.yml intégré à l'image. Aucune base de données Kong n'est utilisée.
  • Les sondes de santé sont TCP, et non HTTP /health. Les variables startup_probe/liveness_probe (et startup_probe_config/health_check_config) déclarent toutes une valeur par défaut HTTP GET /health, mais la configuration déclarative DB-less de kong.yml ne définit aucune route /health (uniquement /rest/v1, /auth/v1, /realtime/v1, /storage/v1, /pg et / pour Studio) — une sonde HTTP sur ce chemin renverrait une 404. main.tf remplace inconditionnellement les sondes de démarrage et de vivacité du conteneur Kong déployé par des sondes TCP sur le port du conteneur, quelle que soit la valeur de ces variables. La sonde de démarrage laisse toujours ~5 minutes (15 s initial delay × 30 failures × 10 s period) pour que la configuration de la base de données au premier démarrage se termine.
  • Realtime utilise PostgreSQL LISTEN/NOTIFY. Aucun Redis n'est requis pour la pile Supabase de base ; enable_redis vaut false par défaut.

4. Variables de configuration​

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

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(obligatoire)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_iddemoCourt suffixe qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail recevant l'accès au projet et les 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_namesupabaseNom de base des ressources. Ne pas modifier après le premier déploiement.
application_display_nameSupabaseNom lisible affiché dans la console.
application_description(défini)Annotation de description de la charge de travail.
application_version2.8.1Tag de version de l'image de la passerelle Kong. Figez-le sur une version testée ; évitez latest en production.

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

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour provisionner uniquement l'infrastructure.
container_resources1000m / 2GiLimite CPU et limite mémoire du conteneur de la passerelle Kong. Portez le CPU à 2000m pour le trafic de production.
min_instance_count1Nombre minimal de réplicas de pods Kong. Gardez ≥ 1 — les démarrages à froid perturbent les flux de redirection OAuth.
max_instance_count3Nombre maximal de réplicas de pods Kong (plafond de l'autoscaler).
container_port8000Port du proxy HTTP de Kong.
enable_cloudsql_volumetrueSidecar Cloud SQL Auth Proxy. Non utilisé par Supabase — chaque service se connecte directement au supabase/postgres de l'espace de noms.
enable_vertical_pod_autoscalingfalseLaisse Autopilot ajuster automatiquement les requêtes de ressources.
container_image_sourcecustomMode de source de l'image. custom construit via Cloud Build à partir de Supabase_Common/scripts/Dockerfile.
enable_image_mirroringtrueToujours activé — Kong est mis en miroir depuis Docker Hub dans Artifact Registry.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres supplémentaires non secrets. Les valeurs principales de Kong/Supabase sont définies automatiquement.
secret_environment_variables{}Références Secret Manager supplémentaires injectées comme variables d'environnement.
jwt_secret""Secret de signature JWT. Laissez vide pour générer automatiquement 32 caractères aléatoires. À considérer comme définitivement immuable après le premier déploiement.
anon_key""JWT anonyme public. Laissez vide ; une valeur provisoire est stockée — remplacez-la après le déploiement.
service_role_key""JWT du rôle de service (accès complet à la base de données). Laissez vide ; remplacez-le après le déploiement. Ne jamais l'exposer dans le code client.
publishable_key""Clé d'API opaque publishable (anon) pour les clients Supabase récents. Valeur provisoire si vide.
supabase_secret_key""Clé d'API opaque côté serveur pour les clients Supabase récents. Valeur provisoire si vide.
secret_key_base""Secret de chiffrement interne de 64 caractères pour Realtime/Supavisor. Généré automatiquement si vide.
site_urlhttp://localhost:3000URL de base des redirections d'authentification GoTrue. Définissez votre domaine public.
api_external_urlhttp://localhost:8000URL externe de l'API Supabase pour la construction des redirections OAuth.
supabase_public_urlhttp://localhost:8000URL de base publique du tableau de bord et de l'API REST.
jwt_expiry3600Durée d'expiration en secondes des jetons émis par GoTrue.
pgrst_db_schemaspublic,storage,graphql_publicSchémas PostgreSQL exposés par PostgREST.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerMode d'exposition externe du Service Kong.
session_affinityNoneKong est sans état ; le routage persistant n'est pas nécessaire.
workload_typenullVaut Deployment par défaut.
gke_cluster_name""Nom du cluster GKE. Laissez vide pour la découverte automatique.
namespace_name""Espace de noms Kubernetes. Laissez vide pour le générer automatiquement.
termination_grace_period_seconds60Secondes avant SIGKILL après SIGTERM.
enable_network_segmentationfalseCrée des ressources NetworkPolicy Kubernetes.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullActive les modèles de PVC dans le StatefulSet. Laissez non défini — l'état de Supabase réside dans Cloud SQL et GCS, pas dans le stockage local des pods.
stateful_pvc_size10GiTaille du PVC par pod (si les PVC du StatefulSet sont activés).

Groupe 8 — Quota de ressources​

VariableValeur par défautDescription
enable_resource_quotafalsePlafonne le CPU, la mémoire et le nombre d'objets de l'espace de noms.
quota_memory_requests / quota_memory_limits""Doivent utiliser des unités binaires (4Gi, 8192Mi) — les entiers nus sont interprétés comme des octets et bloquent toute planification de pods.

Groupe 9 — Règles de fiabilité​

VariableValeur par défautDescription
enable_pod_disruption_budgettrueProtège la disponibilité lors des mises à niveau des nœuds.
pdb_min_available1Augmentez min_instance_count au-delà de 1 si vous avez besoin de marge pour les évictions.
enable_topology_spreadfalseRépartit les pods entre les zones.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probe_configHTTP /health, délai initial de 30 s, 18 échecsIgnorée. main.tf code en dur la sonde de démarrage Kong déployée en TCP ; voir §3.
health_check_configHTTP /health, délai initial de 60 s, 3 échecsIgnorée. main.tf code en dur la sonde de vivacité Kong déployée en TCP ; voir §3.
uptime_check_configdésactivéTest de disponibilité Cloud Monitoring facultatif.
alert_policies[]Règles d'alerte facultatives sur les métriques.

Groupe 11 — Automatisation des charges de travail​

VariableValeur par défautDescription
initialization_jobs[]Laissez vide pour utiliser le job intégré db-init.
cron_jobs[]Tâches planifiées du cluster (par ex. routines de nettoyage de la base de données).
additional_services[]Microservices Supabase (GoTrue, PostgREST, Realtime, API Storage, Studio) déployés comme Deployments Kubernetes supplémentaires dans le même espace de noms. Chaque entrée précise name, image, port, les limites de ressources, les variables d'environnement et la configuration des sondes.

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

Intégration Cloud Build / Cloud Deploy standard d'App_GKE — consultez App_GKE. Entrées clés : enable_cicd_trigger, github_repository_url, github_token, enable_cloud_deploy, enable_binary_authorization, binauthz_evaluation_mode.

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

VariableValeur par défautDescription
enable_nfsfalseNFS n'est pas nécessaire pour Supabase ; le stockage est assuré par GCS. L'activer ajoute un coût inutile.
nfs_mount_path/var/lib/storageChemin de montage si NFS est activé.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionne le bucket avec le suffixe storage.
storage_buckets / gcs_volumes(défini par Common)Buckets supplémentaires / montages GCS Fuse.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.

Groupe 16 — Backend de base de données​

VariableValeur par défautDescription
database_typePOSTGRES_15Inerte — main.tf remplace la valeur réellement reçue par le socle par "NONE", car PostgreSQL s'exécute dans l'espace de noms plutôt que sur Cloud SQL.
application_database_namepostgresNom de la base de données. Immuable après le premier déploiement.
application_database_usersupabase_adminUtilisateur de l'application. Immuable après le premier déploiement.
enable_postgres_extensionstrueInstalle pgcrypto, uuid-ossp et pgvector. Obligatoire.
postgres_extensions["pgcrypto","uuid-ossp","pgvector"]Liste des extensions.
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.

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_urioptions de restaurationRestaure une sauvegarde lors du déploiement.

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. Consultez App_GKE.

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

VariableValeur par défautDescription
enable_custom_domaintrueProvisionne 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.
network_tags[]Tags réseau appliqués aux nœuds et aux pods GKE.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExige une connexion Google devant la passerelle Kong.
iap_authorized_users / iap_authorized_groups[]Qui peut accéder.
iap_oauth_client_id / iap_oauth_client_secret""Requis lorsque IAP est activé (sensible).
iap_support_email""Affiché sur l'écran de consentement OAuth.

Groupe 21 — Cloud Armor​

VariableValeur par défautDescription
enable_cloud_armorfalseAssocie 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_cdnfalseActive Cloud CDN sur le backend de l'Ingress GKE.

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

VariableValeur par défautDescription
enable_vpc_scfalseApplique un périmètre VPC-SC (requiert organization_id).
vpc_cidr_ranges / vpc_sc_dry_run(défini)CIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseJournaux Cloud Audit Logs détaillés.

5. Sorties​

Ces valeurs sont renvoyées après 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 (passerelle Kong).
namespaceEspace de noms dans lequel s'exécute la charge de travail.
service_cluster_ipClusterIP interne au cluster.
stage_service_cluster_ipsCorrespondance des ClusterIP des services propres à chaque étape.
service_external_ipIP externe du LoadBalancer (lorsqu'une IP statique est réservée).
service_urlURL permettant d'accéder à l'API Supabase via la passerelle Kong.
database_instance_nameNom de l'instance Cloud SQL.
database_nameNom de la base de données de l'application (postgres).
database_userUtilisateur de la base de données de l'application (supabase_admin).
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 Kong 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.
github_repository_url / github_repository_owner / github_repository_nameDépôt connecté.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idPipeline 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 des journaux 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
jwt_secretgénéré automatiquement ou fixé au premier déploiementCritiqueLe modifier après le déploiement invalide tous les JWT émis ; toutes les connexions clientes cessent de fonctionner. anon_key et service_role_key doivent être régénérées ensemble.
anon_key / service_role_keyJWT signés (remplacer les valeurs provisoires)CritiqueLes valeurs provisoires font renvoyer une 401 à chaque appel d'API Supabase. Les trois identifiants JWT doivent être régénérés comme un ensemble atomique.
enable_cloudsql_volumetrueFaibleInerte pour Supabase — GoTrue, PostgREST, Realtime et Storage se connectent tous au supabase/postgres de l'espace de noms via leurs propres URL postgres://, et non via l'Auth Proxy.
database_typePOSTGRES_15FaibleInerte — main.tf transmet quoi qu'il arrive "NONE" au socle, car PostgreSQL 15 s'exécute comme service supabase/postgres dans l'espace de noms.
application_database_name / _userdéfinis une foisCritiqueImmuables après le premier déploiement ; les renommer recrée la base de données et l'utilisateur et détruit les données.
enable_backup_importfalse sauf restaurationCritiqueL'activer sans backup_uri valide fait échouer le job d'import.
quota_memory_requests / _limitsunités binaires (4Gi)CritiqueLes entiers nus sont des octets et bloquent toute planification de pods.
enable_postgres_extensionstrueFaibleRemplacé par false dans main.tf (les jobs d'extensions du socle ciblent Cloud SQL, que ce module n'utilise pas) ; les extensions sont fournies dans l'image supabase/postgres.
min_instance_count1ÉlevéUne valeur de 0 autorise la mise à l'échelle à zéro ; les démarrages à froid de Kong prennent 15–30 s et perturbent les flux de redirection OAuth.
container_resources CPU2000m en productionÉlevéUn CPU insuffisant provoque une latence élevée et des délais d'attente 504 sous charge.
container_resources mémoire2Gi minimumÉlevéUne mémoire insuffisante provoque des arrêts OOM sous charge concurrente.
startup_probe_config / startup_probeinertes — main.tf code en dur la sonde déployée en TCP (failure_threshold=30, period_seconds=10, ~5 min)ÉlevéDéfinir ces variables n'a aucun effet sur le conteneur Kong déployé ; ne comptez pas sur elles pour allonger la tolérance au premier démarrage — voir §3.
site_url / api_external_url / supabase_public_urlvraies URL publiquesÉlevéLes valeurs par défaut localhost empêchent les flux OAuth et la construction des redirections de fonctionner en dehors du cluster.
application_versionfigée (pas latest)MoyenRécupérer latest expose à des versions de Kong incompatibles avec la configuration déclarative fournie.
enable_nfsfalseFaibleNFS est inutile pour Supabase ; l'activer ajoute un coût Filestore et une dépendance susceptible de retarder le provisionnement.
enable_redisfalseMoyenRedis est facultatif. S'il vaut true, redis_host doit pointer vers un point de terminaison joignable ; un hôte injoignable provoque des délais d'attente au démarrage de Kong.

Pour le comportement du socle évoqué tout au long de ce guide — IAM et Workload Identity, mise à l'échelle automatique, 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 à Supabase, partagée entre les secrets, le build de l'image Kong et le job d'initialisation de la base de données, est décrite dans Supabase_Common.

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