Hasura Common — Configuration applicative partagée
Hasura_Common est la couche applicative partagée de Hasura. Elle n'est pas déployée seule ; elle fournit la configuration propre à Hasura sur laquelle s'appuient à la fois Hasura_GKE et Hasura_CloudRun, afin que les deux variantes de plateforme se comportent de manière identique là où cela compte. Les utilisateurs finaux ne configurent jamais cette couche directement — elle n'a aucune entrée propre dans l'interface de déploiement — mais comprendre ce qu'elle fournit explique les valeurs par défaut que vous voyez dans la documentation des plateformes.
Pour l'infrastructure qui provisionne et exécute effectivement Hasura, consultez les guides des plateformes (Hasura_GKE, Hasura_CloudRun) et les guides du socle (App_GKE, App_CloudRun, App_Common).
1. Ce que fournit cette couche
| Domaine | Fourni par Hasura_Common | Où cela apparaît |
|---|---|---|
| Secret cryptographique | Génère HASURA_GRAPHQL_ADMIN_SECRET (32 caractères) et le stocke dans Secret Manager | Injecté automatiquement ; à récupérer via Secret Manager (voir ci-dessous) |
| Image de conteneur | Encapsule l'image officielle hasura/graphql-engine avec un point d'entrée personnalisé ; build via Cloud Build | Sortie container_image du déploiement de la plateforme |
| Moteur de base de données | Fixe Cloud SQL for PostgreSQL 15 comme seul moteur pris en charge | §Base de données dans les guides des plateformes |
| Initialisation de la base de données | Définit le job du premier déploiement (db-init) qui crée la base de données, l'utilisateur et les privilèges | Sortie initialization_jobs |
| Stockage d'objets | Aucun — Hasura est sans état (storage_buckets = []) | Sortie storage_buckets |
| Paramètres principaux | Définit l'environnement de base de Hasura : console activée, port du serveur, les deux URL de connexion assemblées à l'exécution | Comportement de l'application dans les guides des plateformes |
| Contrôles de santé | Fournit la sonde de démarrage/disponibilité par défaut ciblant /healthz | §Observabilité dans les guides des plateformes |
2. Le secret cryptographique dans Secret Manager
Un secret est généré automatiquement et stocké dans Secret Manager — il n'est jamais défini en clair :
HASURA_GRAPHQL_ADMIN_SECRET— une chaîne aléatoire de 32 caractères (lettres et chiffres, sans caractères spéciaux). Il accorde un accès complet aux API GraphQL et de métadonnées (/v1/graphql,/v1/metadata) et à la console web intégrée sur/console. Les clients le présentent dans l'en-tête de requêtex-hasura-admin-secret. Il est stocké sous l'ID de secretsecret-<resource-prefix>-hasura-admin-secret.
Récupérez le secret après le déploiement :
# Find the admin secret for this deployment:
gcloud secrets list --project "$PROJECT" --filter="name~admin-secret"
# Read its value (this is your x-hasura-admin-secret):
gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"
Contrairement à une clé de chiffrement, le secret administrateur ne touche pas aux données stockées — sa rotation est sans risque, mais elle invalide immédiatement tout client (ou workflow n8n/d'automatisation) qui envoie encore l'ancienne valeur ; mettez donc à jour ces consommateurs dans la même modification. 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 du déploiement de la plateforme (database_password_secret). Consultez App_Common pour le modèle partagé de secrets et de Workload Identity.
3. Moteur de base de données et amorçage
Hasura nécessite PostgreSQL 15 ; le moteur est fixe et MySQL ou d'autres moteurs ne sont pas pris en charge — le catalogue de métadonnées propre à Hasura et la source de données connectée par défaut résident tous deux dans Postgres. Lors du premier déploiement, un job ponctuel (db-init) s'exécute avec postgres:15-alpine et, de manière idempotente :
- Détecte le socket Unix du Cloud SQL Auth Proxy et crée un lien symbolique vers celui-ci pour l'accès
psql, - Attend que PostgreSQL soit joignable (jusqu'à 60 tentatives),
- Crée le rôle de l'application avec
LOGIN(ou met à jour son mot de passe), - Crée la base de données de l'application avec ce rôle comme propriétaire (si elle n'existe pas),
- Accorde tous les privilèges sur la base de données à ce rôle,
- Signale au Cloud SQL Auth Proxy de s'arrêter proprement (
quitquitquit).
Au premier démarrage, Hasura installe automatiquement son propre schéma de catalogue de métadonnées dans la base de données — il n'y a pas de job de migration distinct. Le job db-init peut être réexécuté sans risque. Inspectez directement la base de données avec :
gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"
Les noms de l'instance, de la base de données et de l'utilisateur figurent dans les sorties du déploiement de la plateforme.
4. Image de conteneur et point d'entrée
L'image personnalisée encapsule hasura/graphql-engine:<version> avec un léger point d'entrée en shell POSIX (hasura-entrypoint.sh) qui s'exécute avant graphql-engine serve. Le tag de base provient d'un ARG de build propre à l'application, HASURA_VERSION (par défaut v2.36.0 ; "latest" est remplacé par ce tag épinglé) — délibérément pas l'APP_VERSION générique que le socle injecte et qui l'écraserait autrement.
Le point d'entrée existe parce que Hasura a besoin de deux chaînes de connexion et que Cloud Run n'interpole pas $(VAR) dans les valeurs d'environnement :
- Assemble
HASURA_GRAPHQL_DATABASE_URL(la source de données connectée par défaut) etHASURA_GRAPHQL_METADATA_DATABASE_URL(où Hasura stocke ses propres métadonnées) à partir deDB_HOST,DB_PORT,DB_USER,DB_PASSWORD,DB_NAMEinjectées par la plateforme. Pour un déploiement à base de données unique, les deux pointent vers la même base. - Encode le mot de passe pour l'URL en pur shell POSIX (encodage en pourcentage RFC 3986) — l'image de base de Hasura ne contient ni node, ni python, ni jq, et des caractères tels que
@ : / ? # % & +corrompraient sinon le DSN. - Distingue selon
DB_HOSTafin que le DSN corresponde à la manière dont la plateforme fournit Postgres :- un répertoire de socket (
/cloudsql/..., l'intégration Cloud SQL native de Cloud Run) → forme socket libpqpostgres://user:pass@/db?host=/cloudsql/<inst>; 127.0.0.1/localhost(le sidecar cloud-sql-proxy de GKE, TLS déjà terminé) → loopback simple, sanssslmode;- tout autre hôte (TCP direct sur IP privée) →
?sslmode=require(Cloud SQL refuse les connexions non chiffrées sur IP privée).
- un répertoire de socket (
- Définit
HASURA_GRAPHQL_ENABLE_CONSOLE = "true"et lieHASURA_GRAPHQL_SERVER_PORT = 8080, puis exécuteexec graphql-engine serveen tant que PID 1.
HASURA_GRAPHQL_ADMIN_SECRET est injecté par la plateforme depuis Secret Manager et lu directement dans l'environnement par le moteur — aucun mappage n'est nécessaire.
5. Paramètres principaux de l'application
Hasura_Common établit l'environnement de base de Hasura afin que l'application démarre correctement la première fois :
- Console —
HASURA_GRAPHQL_ENABLE_CONSOLE = "true"; la console d'administration est servie sur/console, protégée par le secret administrateur. Définissez-la à"false"viaenvironment_variablesen production et gérez les métadonnées avec la CLIhasura. - Port —
HASURA_GRAPHQL_SERVER_PORT = 8080(lecontainer_port). - Authentification —
HASURA_GRAPHQL_ADMIN_SECRETprotège les API GraphQL et de métadonnées ainsi que la console ;/healthzreste public pour les sondes. - Ressources —
cpu_limit = "1000m",memory_limit = "512Mi"par défaut ; augmentez la mémoire pour une forte concurrence de requêtes ou des métadonnées volumineuses. - Aucun stockage — Hasura est sans état ;
storage_bucketsrenvoie une liste vide.
Ajustements propres à chaque plateforme gérés ici :
- Cloud Run — le point d'entrée construit le DSN sous forme socket ou IP privée et permet un fonctionnement compatible avec la mise à l'échelle jusqu'à zéro (tout l'état est externe).
- GKE — le point d'entrée cible le sidecar Auth Proxy sur
127.0.0.1(loopback simple, sans SSL) ; le secret administrateur est monté via CSI dans l'espace de noms.
Les variables d'environnement supplémentaires en clair transmises via l'entrée environment_variables de la plateforme sont fusionnées par-dessus ces valeurs par défaut (par exemple HASURA_GRAPHQL_DEV_MODE, HASURA_GRAPHQL_CORS_DOMAIN ou HASURA_GRAPHQL_UNAUTHORIZED_ROLE).
6. Comportement des sondes de santé
Les sondes par défaut ciblent /healthz — le point de terminaison de santé public et sans authentification de Hasura, qui renvoie 200 OK dès que le moteur a démarré et s'est connecté à Postgres. Comme /v1/graphql, /v1/metadata et /console exigent tous le secret administrateur, faire pointer une sonde vers l'un d'eux renvoie 401 et la charge de travail ne devient jamais Ready — /healthz est la bonne cible.
- Cloud Run utilise des sondes HTTP sur
/healthzavec un délai initial de 30 secondes et une fenêtre de démarrage de 30 tentatives (pour laisser le temps d'installer le catalogue de métadonnées au premier démarrage). - GKE utilise les mêmes sondes HTTP
/healthz(démarragefailure_threshold = 30, disponibilitéfailure_threshold = 3).
7. Stockage d'objets
Hasura stocke tout son état — métadonnées, schéma et données — dans PostgreSQL. Il n'a besoin d'aucun stockage de fichiers ; storage_buckets est donc une liste vide et aucun bucket GCS n'est provisionné. Les charges utiles des déclencheurs d'événements et les résultats des requêtes ne sont pas persistés dans un stockage d'objets.
Pour la configuration propre à Hasura destinée aux utilisateurs (variables par groupe, sorties et manière d'explorer chaque service depuis la console et la CLI), consultez les guides des plateformes : Hasura_GKE et Hasura_CloudRun.
Guides associés
- Hasura sur Google Cloud Run — cette configuration déployée sur Cloud Run.
- Hasura sur GKE Autopilot — cette configuration déployée sur GKE.
Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.