Aller au contenu principal

Mattermost sur Google Cloud Run

Mattermost sur Google Cloud Run

Ce document fournit une référence complète du module modules/Mattermost_CloudRun. Il couvre l'architecture, l'IAM, les variables de configuration, les comportements propres à Mattermost et les modèles d'exploitation pour déployer Mattermost sur Google Cloud Run (v2).


1. Vue d'ensemble du module​

Mattermost est une plateforme open source et auto-hébergeable de messagerie d'équipe et de collaboration — une alternative sécurisée à Slack avec des canaux persistants, des messages directs, le partage de fichiers, des intégrations, des bots, des commandes slash et des fonctionnalités de sécurité d'entreprise. Mattermost CloudRun est un module wrapper construit sur App CloudRun. Il utilise App CloudRun pour tout le provisionnement de l'infrastructure GCP et injecte la configuration applicative propre à Mattermost, l'initialisation de la base de données et le stockage via Mattermost Common.

Capacités principales :

  • Calcul : Cloud Run v2 (Gen2), conteneur Mattermost personnalisé, 2 vCPU / 2 Gi par défaut. Le nombre minimal d'instances vaut 1 par défaut — Mattermost maintient des connexions WebSocket persistantes pour la messagerie en temps réel, ce qui rend la mise à l'échelle jusqu'à zéro inadaptée à la plupart des déploiements.
  • Persistance des données : Cloud SQL PostgreSQL 15. Volume GCS FUSE monté sur /mattermost/data pour la persistance des fichiers envoyés et des pièces jointes.
  • Sécurité : hérite de Cloud Armor WAF, IAP, Binary Authorization et VPC Service Controls depuis App CloudRun. Mattermost génère ses propres clés de signature internes au premier démarrage et les stocke dans la base de données — ce module ne génère automatiquement aucun secret au niveau de l'application.
  • Mise en cache : Redis est facultatif (enable_redis = false par défaut). Lorsqu'il est activé, Mattermost utilise Redis comme cache distribué et backend de sessions — ce qui est nécessaire à un comportement correct avec plusieurs réplicas.
  • Éditions : Team Edition (gratuite, par défaut) ou Enterprise Edition (licence payante requise). Contrôlée par la variable edition.
  • Messagerie en temps réel : Mattermost maintient des connexions WebSocket pour la remise des messages en temps réel. Le délai d'expiration des requêtes de 60 minutes de Cloud Run signifie que timeout_seconds doit être défini sur 3600 pour les déploiements faisant un usage intensif des WebSocket. Pour les charges de travail de production nécessitant des connexions persistantes de longue durée, envisagez Mattermost GKE.

Projet et identité de l'application

VariableGroupeTypeValeur par défautDescription
project_id1string—ID du projet GCP. Obligatoire.
tenant_id1string'demo'Suffixe court ajouté à tous les noms de ressources.
support_users1list(string)[]Destinataires e-mail pour l'accès IAM et les alertes de surveillance.
resource_labels1map(string){}Libellés appliqués à toutes les ressources provisionnées.
application_name3string'mattermost'Nom de base des ressources. Ne le modifiez pas après le déploiement initial.
display_name3string'Mattermost'Nom lisible affiché dans l'interface de la plateforme.
description3string'Mattermost - Open-source team messaging and collaboration'Description du service Cloud Run.
application_version3string'9.11.2'Tag de version de l'image Mattermost. Incrémentez-le pour déployer une nouvelle version.

Architecture du wrapper : Mattermost CloudRun appelle Mattermost Common pour construire un objet application_config contenant les variables d'environnement propres à Mattermost, la configuration des sondes et la définition du job db-init. module_storage_buckets transporte tout bucket de données GCS configuré pour un montage FUSE. scripts_dir est résolu vers le répertoire de scripts de Mattermost Common au moment de l'apply.


2. IAM et contrôle d'accès​

Mattermost_CloudRun délègue tout le provisionnement IAM à App_CloudRun. Le compte de service Cloud Run, le compte de service Cloud Build, l'agent de service IAP et les ensembles de rôles de rotation des mots de passe sont identiques à ceux d'App_CloudRun.

Aucun secret au niveau de l'application n'est généré automatiquement : contrairement à de nombreux autres modules applicatifs, Mattermost Common ne génère pas automatiquement de secrets applicatifs tels qu'une SECRET_KEY. Mattermost génère ses propres clés de signature internes au premier démarrage et les stocke dans PostgreSQL. Les secrets DB_PASSWORD et ROOT_PASSWORD sont provisionnés automatiquement par App CloudRun et utilisés par le job db-init.

Identité d'initialisation de la base de données : le job Cloud Run db-init s'exécute sous le compte de service Cloud Run. Il se connecte à Cloud SQL PostgreSQL via le socket Unix de l'Auth Proxy, en utilisant DB_HOST, DB_USER et le secret DB_PASSWORD de Secret Manager.

Délai de propagation IAM de 120 secondes : hérité d'App CloudRun — le service Mattermost n'est déployé qu'une fois ce délai écoulé, ce qui évite les échecs de lecture des secrets au démarrage de la première révision.


3. Configuration du service principal​

A. Calcul (Cloud Run)​

Mattermost est une application écrite en Go, économe en ressources au démarrage, mais qui bénéficie d'une allocation de CPU constante pour la gestion des connexions WebSocket et la remise des messages. Mattermost CloudRun expose cpu_limit et memory_limit comme variables de premier niveau.

Le nombre minimal d'instances vaut 1 par défaut (min_instance_count = 1). Cela évite les démarrages à froid liés à la mise à l'échelle jusqu'à zéro, qui interrompraient les connexions WebSocket actives. Pour les environnements de développement ou sensibles aux coûts, min_instance_count = 0 est pris en charge, mais les sessions des utilisateurs seront interrompues lorsque l'instance sera réduite.

Startup CPU Boost est toujours activé (codé en dur dans App CloudRun).

Image de conteneur : container_image_source vaut 'custom' par défaut, ce qui signifie que Cloud Build compile une image personnalisée à l'aide du Dockerfile de Mattermost Common (basé sur l'image officielle mattermost/mattermost-team-edition ou mattermost/mattermost-enterprise-edition, selon edition). Définissez container_image_source = 'prebuilt' et container_image sur une URI d'image pour ignorer l'étape de build.

VariableGroupeValeur par défautDescription
deploy_application4trueDéfinissez false pour un déploiement de l'infrastructure seule (SQL, stockage, secrets).
container_image_source4'custom''custom' effectue un build via Cloud Build. 'prebuilt' déploie une URI d'image existante.
container_image4""URI d'image de remplacement. Laissez vide pour que Cloud Build gère l'image.
cpu_limit4'2000m'CPU par instance. 2 vCPU recommandés pour Mattermost.
memory_limit4'2Gi'Mémoire par instance. 2 Gi est le minimum ; augmentez-la pour les grandes équipes.
cpu_always_allocated4trueCPU alloué en permanence (facturation à l'instance). Maintenu à true : les connexions WebSocket en temps réel nécessitent une instance non bridée (à associer à min_instance_count >= 1).
container_resources4nullLorsqu'elle est définie, remplace cpu_limit et memory_limit.
min_instance_count41Conservez 1 en production pour éviter les interruptions des WebSocket.
max_instance_count45Plafond de coût pour la mise à l'échelle automatique.
container_port48065Port HTTP natif de Mattermost.
execution_environment4'gen2'Gen2 requis pour les montages de volumes GCS Fuse.
timeout_seconds4300Durée maximale d'une requête. Définissez 3600 pour les déploiements faisant un usage intensif des WebSocket.
enable_cloudsql_volume4trueInjecte le sidecar Cloud SQL Auth Proxy. Définissez false pour TCP.
container_protocol4'http1''http1' ou 'h2c'.
enable_image_mirroring4trueMet l'image Mattermost en miroir dans Artifact Registry.
traffic_split4[]Répartition du trafic en pourcentage pour les déploiements canary/blue-green.
max_revisions_to_retain47Nombre maximal de révisions Cloud Run à conserver. Définissez 0 pour désactiver.
service_annotations4{}Annotations Cloud Run avancées.
service_labels4{}Libellés appliqués au service Cloud Run.

Différences par rapport aux valeurs par défaut d'App CloudRun :

VariableApp CloudRunMattermost CloudRunRaison
container_port80808065Port natif de Mattermost.
cpu_limit'1000m''2000m'Mattermost gère des connexions WebSocket simultanées et l'indexation des messages.
memory_limit'512Mi''2Gi'Mattermost met en cache les canaux, les utilisateurs et les sessions en mémoire.
min_instance_count01La mise à l'échelle jusqu'à zéro coupe les connexions WebSocket actives des utilisateurs.
cpu_always_allocatedfalsetrueLa remise en temps réel via WebSocket ne doit pas être bridée en CPU entre les requêtes.

B. Base de données (Cloud SQL — PostgreSQL 15)​

Mattermost exige PostgreSQL 13 ou une version ultérieure — PostgreSQL 15 est la valeur par défaut. Mattermost exécute ses propres migrations de schéma au démarrage ; aucune configuration manuelle du schéma n'est nécessaire au-delà de la création de la base de données et de l'utilisateur (prise en charge par le job db-init).

Le module utilise les variables abrégées db_name et db_user, qui transitent par Mattermost Common jusqu'à la configuration de l'application.

VariableGroupeValeur par défautDescription
database_type12'POSTGRES_15'Moteur de base de données Cloud SQL. Ne quittez pas PostgreSQL.
db_name12'mattermost'Nom de la base de données PostgreSQL. Ne le modifiez pas après le déploiement initial.
db_user12'mattermost'Utilisateur applicatif PostgreSQL. Mot de passe généré automatiquement et stocké dans Secret Manager.
database_password_length1232Longueur du mot de passe généré automatiquement. Plage : 16 à 64.
enable_auto_password_rotation12falseRotation automatique des mots de passe sans interruption de service.
rotation_propagation_delay_sec1290Nombre de secondes d'attente après la rotation avant de redémarrer le service.

C. Stockage (GCS FUSE)​

Mattermost stocke les fichiers envoyés, les pièces jointes et les données des plugins sous /mattermost/data. Sans stockage persistant, tous les fichiers envoyés par les utilisateurs sont perdus au redémarrage du conteneur ou au déploiement d'une nouvelle révision.

GCS FUSE est la méthode de stockage recommandée pour Cloud Run. Montez un bucket GCS sur /mattermost/data via gcs_volumes. Cela fournit un stockage d'objets durable et répliqué au niveau régional, sans la latence supplémentaire de NFS pour les opérations sur fichiers typiques de Mattermost (envois de documents, images jointes, données des plugins).

NFS (enable_nfs) est également pris en charge pour les déploiements qui nécessitent une sémantique de système de fichiers POSIX.

VariableGroupeValeur par défautDescription
enable_nfs11trueProvisionne une instance NFS Cloud Filestore. Facultatif — GCS FUSE est préféré pour Mattermost.
nfs_mount_path11'/mattermost/data'Chemin du conteneur où NFS est monté.
nfs_instance_name11""Nom d'une VM GCE NFS existante. Laissez vide pour la découverte automatique.
nfs_instance_base_name11'app-nfs'Nom de base de la VM GCE NFS intégrée.
create_cloud_storage11trueDéfinissez false pour ignorer la création du bucket GCS.
storage_buckets11[]Buckets GCS supplémentaires à provisionner.
gcs_volumes11[]Buckets GCS à monter via GCS Fuse. Chaque entrée : name, bucket_name, mount_path, readonly, mount_options. Montez sur /mattermost/data pour des envois persistants.
manage_storage_kms_iam11falseCrée une clé KMS CMEK et active CMEK sur tous les buckets de stockage.
enable_artifact_registry_cmek11falseCrée une clé KMS Artifact Registry pour le chiffrement des images au repos.

Configuration GCS FUSE recommandée pour le stockage des fichiers de Mattermost :

gcs_volumes = [
{
name = "mattermost-data"
bucket_name = "my-project-mattermost-data"
mount_path = "/mattermost/data"
readonly = false
mount_options = [
"implicit-dirs",
"stat-cache-ttl=60s",
"type-cache-ttl=60s"
]
}
]

D. Réseau​

Cloud Run utilise Direct VPC Egress pour joindre l'adresse IP privée de Cloud SQL. Le sidecar Auth Proxy (enable_cloudsql_volume = true) gère la connexion à la base de données via un socket Unix.

VariableGroupeValeur par défautDescription
ingress_settings5'all''all' — internet public ; 'internal' — VPC uniquement ; 'internal-and-cloud-load-balancing' — force le trafic à passer par l'équilibreur de charge HTTPS.
vpc_egress_setting5'PRIVATE_RANGES_ONLY''PRIVATE_RANGES_ONLY' achemine uniquement le trafic RFC 1918 via le VPC. 'ALL_TRAFFIC' achemine toute la sortie via le VPC.

E. Initialisation et amorçage​

Un job Cloud Run db-init est provisionné automatiquement par Mattermost Common lorsque initialization_jobs est laissé à la liste vide par défaut ([]). Il utilise une image basée sur postgres et exécute Mattermost_Common/scripts/db-init.sh, qui effectue les opérations idempotentes suivantes :

  1. Se connecte à Cloud SQL PostgreSQL via le socket Unix de l'Auth Proxy.
  2. Crée la base de données mattermost si elle n'existe pas.
  3. Crée l'utilisateur mattermost avec le mot de passe issu de Secret Manager.
  4. Accorde à l'utilisateur tous les privilèges sur la base de données.

Mattermost exécute ensuite ses propres migrations de schéma au premier démarrage — aucune configuration manuelle du schéma n'est requise.

VariableGroupeValeur par défautDescription
initialization_jobs13[]Jobs Cloud Run ponctuels. Laissez vide pour que Mattermost Common fournisse le job db-init par défaut. Une liste non vide le remplace entièrement. Chaque entrée : name, description, image, command, args, env_vars, secret_env_vars, cpu_limit, memory_limit, timeout_seconds, max_retries, task_count, execution_mode, mount_nfs, mount_gcs_volumes, depends_on_jobs, execute_on_apply, script_path.
cron_jobs13[]Jobs Cloud Run récurrents déclenchés par Cloud Scheduler. Chaque entrée : name, schedule, image, command, args, env_vars, secret_env_vars, cpu_limit, memory_limit, timeout_seconds, max_retries, task_count, parallelism, mount_nfs, mount_gcs_volumes, script_path, paused.

4. Sécurité avancée​

A. Cloud Armor WAF​

Lorsque enable_cloud_armor = true, un équilibreur de charge HTTPS global doté d'une règle Cloud Armor WAF (OWASP Top 10, protection DDoS adaptative, limitation de débit à 500 requêtes/min) est provisionné devant Cloud Run.

VariableGroupeValeur par défautDescription
enable_cloud_armor10falseProvisionne un équilibreur de charge HTTPS global et Cloud Armor WAF. Requis pour les domaines personnalisés, le CDN et la protection DDoS.
admin_ip_ranges10[]Plages CIDR exemptées des règles WAF (par ex. VPN de bureau, adresses IP de sortie du CI/CD).

B. Identity-Aware Proxy (IAP)​

Lorsque enable_iap = true, l'intégration IAP native de Cloud Run est activée sur le service. Une authentification par identité Google est exigée avant que les requêtes n'atteignent Mattermost. Utile pour les déploiements internes, où les utilisateurs doivent s'authentifier avec le compte Google Workspace de leur organisation avant d'atteindre la page de connexion de Mattermost.

VariableGroupeValeur par défautDescription
enable_iap5falseActive IAP de manière native sur le service Cloud Run.
iap_authorized_users5[]Utilisateurs et comptes de service autorisés via IAP. Format : 'user:email' ou 'serviceAccount:sa@...'.
iap_authorized_groups5[]Groupes Google autorisés via IAP. Format : 'group:name@example.com'.

C. Binary Authorization​

Lorsque enable_binary_authorization = true, Cloud Run impose que les images Mattermost déployées portent une attestation cryptographique valide.

VariableGroupeValeur par défautDescription
enable_binary_authorization8falseImpose l'attestation des images. Nécessite une règle Binary Authorization et un attesteur préconfigurés dans le projet.

D. VPC Service Controls​

Lorsque enable_vpc_sc = true, tous les appels d'API GCP de ce module sont confinés à un périmètre VPC-SC existant.

VariableGroupeValeur par défautDescription
enable_vpc_sc22falseInscrit les appels d'API du module dans le périmètre VPC-SC du projet. Un périmètre doit déjà exister avant l'activation.

E. Intégration de Secret Manager​

Les secrets applicatifs de Mattermost sont stockés dans Secret Manager et injectés nativement par Cloud Run au démarrage de la révision — aucune valeur en clair n'est jamais écrite dans l'état. Des secrets définis par l'utilisateur peuvent être ajoutés via secret_environment_variables.

VariableGroupeValeur par défautDescription
secret_environment_variables6{}Correspondance nom de variable d'environnement → ID de secret Secret Manager. Résolue à l'exécution.
explicit_secret_values6{}Valeurs sensibles brutes écrites dans Secret Manager pendant le déploiement.
secret_rotation_period6'2592000s'Fréquence des notifications de rotation de Secret Manager. Par défaut : 30 jours.
secret_propagation_delay630Nombre de secondes d'attente après la création d'un secret avant que les ressources dépendantes ne poursuivent.

5. Trafic et entrée​

A. Équilibreur de charge HTTPS​

Lorsque enable_cloud_armor = true, un équilibreur de charge HTTPS global adossé à un NEG sans serveur est provisionné. Le trafic circule ainsi : Internet → Cloud Armor → équilibreur de charge HTTPS global → NEG sans serveur → Cloud Run.

Définir ingress_settings = 'internal-and-cloud-load-balancing' force tout le trafic de Mattermost à passer par l'équilibreur de charge, ce qui empêche l'accès direct via l'URL *.run.app.

B. Cloud CDN​

Lorsque enable_cdn = true (nécessite enable_cloud_armor = true), Cloud CDN est associé au backend de l'équilibreur de charge HTTPS.

Point d'attention pour Mattermost : Mattermost sert un mélange de trafic d'API en temps réel (WebSocket, REST) et de ressources statiques (bundles JavaScript, CSS, fichiers de plugins). Cloud CDN convient à la diffusion des ressources statiques, mais ne doit pas mettre en cache les réponses de l'API ni les mises à niveau WebSocket. Mattermost définit des en-têtes Cache-Control appropriés sur ses ressources statiques, de sorte que le CDN peut être activé sans risque pour la mise en cache en périphérie du bundle de l'application.

VariableGroupeValeur par défautDescription
enable_cdn10falseActive Cloud CDN sur le backend de l'équilibreur de charge HTTPS. Effectif uniquement lorsque enable_cloud_armor = true.
max_images_to_retain107Nombre maximal d'images de conteneur à conserver dans Artifact Registry. Définissez 0 pour désactiver.
delete_untagged_images10trueSupprime automatiquement les images sans tag d'Artifact Registry.
image_retention_days1030Nombre de jours après lequel les images peuvent être supprimées. Définissez 0 pour désactiver la suppression selon l'âge.

C. Domaines personnalisés​

Les domaines personnalisés sont associés à l'équilibreur de charge HTTPS global via application_domains. Des certificats SSL gérés par Google sont provisionnés automatiquement. Le DNS doit pointer vers l'adresse IP de l'équilibreur de charge après l'apply.

VariableGroupeValeur par défautDescription
application_domains10[]Noms de domaine personnalisés. Des certificats SSL gérés par Google sont provisionnés pour chaque domaine.

Après le premier apply, récupérez l'adresse IP de l'équilibreur de charge et créez un enregistrement A. Le provisionnement du certificat SSL prend de 10 à 30 minutes après la propagation DNS. Définissez ensuite site_url sur le domaine personnalisé afin que Mattermost génère des liens d'invitation et des URL de webhook corrects.


6. CI/CD et livraison​

A. Déclencheurs Cloud Build​

Lorsque enable_cicd_trigger = true, une connexion GitHub Cloud Build et un déclencheur sur push sont provisionnés. Le déclencheur construit et déploie une image Mattermost personnalisée lorsque du code est poussé vers la branche configurée.

VariableGroupeValeur par défautDescription
enable_cicd_trigger8falseProvisionne un déclencheur GitHub Cloud Build. Nécessite github_repository_url et des identifiants.
github_repository_url8""URL HTTPS complète du dépôt GitHub.
github_token8""PAT GitHub (portées repo, admin:repo_hook). Requis lors du premier apply. Sensible.
github_app_installation_id8""ID d'installation de l'application GitHub (préféré pour les dépôts d'organisation).
cicd_trigger_config8{ branch_pattern = "^main$" }Configuration avancée du déclencheur : branch_pattern, included_files, ignored_files, trigger_name, substitutions.

B. Pipeline Cloud Deploy​

Lorsque enable_cloud_deploy = true (nécessite enable_cicd_trigger = true), le pipeline CI/CD est transformé en pipeline de livraison géré Cloud Deploy, avec des étapes de promotion séquentielles.

VariableGroupeValeur par défautDescription
enable_cloud_deploy8falseProvisionne un pipeline Cloud Deploy. Nécessite enable_cicd_trigger = true.
cloud_deploy_stages8[dev, staging, prod(approval)]Étapes de promotion ordonnées. Chacune : name, target_name, service_name, require_approval, auto_promote.

7. Fiabilité et planification​

A. Mise à l'échelle et concurrence​

min_instance_count vaut 1 par défaut — Mattermost maintient des connexions WebSocket actives pour la messagerie en temps réel, et une mise à l'échelle jusqu'à zéro déconnecterait tous les utilisateurs actifs. max_instance_count vaut 5 par défaut et sert de plafond de coût.

Lorsque plusieurs instances s'exécutent, Redis (enable_redis = true) est requis pour le partage distribué des sessions et la cohérence du cache. Sans Redis, différentes instances peuvent servir un cache obsolète ou créer des conflits de sessions.

B. Répartition du trafic​

La répartition du trafic est prise en charge pour les déploiements canary.

VariableGroupeValeur par défautDescription
traffic_split4[]Répartition du trafic en pourcentage entre des révisions nommées. La somme de toutes les entrées doit être égale à 100. Une liste vide envoie 100 % du trafic à la dernière révision.

C. Sondes de santé et surveillance de la disponibilité​

Mattermost expose un point de terminaison de santé dédié à /api/v4/system/ping, qui renvoie HTTP 200 lorsque l'application est entièrement initialisée et connectée à la base de données. Les sondes de santé ciblent ce point de terminaison.

Mattermost effectue des migrations de schéma au premier démarrage. La sonde de démarrage laisse suffisamment de temps pour que la migration se termine avant que le trafic ne soit dirigé vers la nouvelle révision.

VariableGroupeValeur par défautDescription
startup_probe14{ enabled=true, type="HTTP", path="/", initial_delay_seconds=60, period_seconds=15, failure_threshold=30 }Sonde de démarrage. Le conteneur ne reçoit aucun trafic tant qu'elle n'a pas réussi.
liveness_probe14{ enabled=true, type="HTTP", path="/", initial_delay_seconds=60, timeout_seconds=5, period_seconds=30, failure_threshold=3 }Sonde de vivacité. Le conteneur est redémarré après failure_threshold échecs consécutifs.
startup_probe_config14{ enabled=true, path="/", initial_delay_seconds=60 }Inerte pour Mattermost. App_CloudRun ne la câble que dans son propre préréglage interne d'exemple/de repli cloudrunapp, inutilisé (cloudrunapp.tf) — elle n'atteint jamais le service Mattermost déployé.
health_check_config14{ enabled=true, path="/", initial_delay_seconds=60 }Inerte pour Mattermost, comme startup_probe_config ci-dessus.
uptime_check_config14{ enabled=false, path="/" }Test de disponibilité Cloud Monitoring (désactivé par défaut). Lorsqu'il est activé, des alertes notifient support_users en cas d'indisponibilité.
alert_policies14[]Règles d'alerte Cloud Monitoring sur les métriques.

Remarque sur le chemin des sondes : les sondes réellement déployées proviennent uniquement de startup_probe/liveness_probe (transmises à Mattermost_Common, puis à local.selected_module.startup_probe/.liveness_probe d'App_CloudRun) — elles utilisent par défaut path = "/" dans le module Cloud Run, alors que la variante GKE utilise par défaut /api/v4/system/ping. Pour un signal de santé plus précis sur Cloud Run, remplacez le path de startup_probe/liveness_probe par /api/v4/system/ping. startup_probe_config/health_check_config forment une paire de variables distincte et inerte (voir le tableau ci-dessus) — les surcharger n'a aucun effet sur les sondes déployées de Mattermost, inutile donc de s'en occuper.

D. Rotation automatique des mots de passe​

Lorsque enable_auto_password_rotation = true, un pipeline de rotation des mots de passe sans interruption de service est provisionné :

  1. Secret Manager émet une notification de rotation à chaque intervalle secret_rotation_period.
  2. Eventarc déclenche un job Cloud Run de rotation.
  3. Le job génère un nouveau mot de passe, met à jour l'utilisateur Cloud SQL et écrit une nouvelle version du secret.
  4. Après rotation_propagation_delay_sec secondes, le job redémarre le service Mattermost.
VariableGroupeValeur par défautDescription
enable_auto_password_rotation12falseActive la rotation automatique des mots de passe.
rotation_propagation_delay_sec1290Nombre de secondes d'attente après l'écriture du nouveau secret avant le redémarrage.

8. Intégrations​

A. Paramètres de l'application Mattermost​

VariableGroupeValeur par défautDescription
site_url20""URL publique à laquelle Mattermost est accessible. Définit MM_SERVICESETTINGS_SITEURL. Requise après le premier déploiement pour que les liens d'invitation, les webhooks et les notifications par e-mail soient corrects. (par ex. 'https://chat.example.com')
edition20'team''team' (gratuite) ou 'enterprise' (payante — nécessite une clé de licence définie via environment_variables). Détermine l'image de conteneur Mattermost sélectionnée.

L'URL du site est essentielle. Sans site_url, Mattermost utilise par défaut http://localhost:8065 pour générer les liens, ce qui casse les liens d'invitation dans les e-mails et les callbacks OAuth. Définissez site_url sur l'URL du service Cloud Run (ou sur le domaine personnalisé) après le premier déploiement.

B. Variables d'environnement​

Mattermost se configure entièrement au moyen de variables d'environnement utilisant le préfixe MM_. La variable environment_variables accepte n'importe quelle clé de configuration de Mattermost :

VariableGroupeValeur par défautDescription
environment_variables6{}Variables d'environnement en texte clair. À utiliser pour la configuration de Mattermost, comme l'e-mail, les plugins et les paramètres du service.

Variables de configuration courantes de Mattermost injectées automatiquement par Mattermost Common :

Variable d'environnementValeurRôle
MM_SERVICESETTINGS_LISTENADDRESS:8065Adresse d'écoute du serveur HTTP de Mattermost.
MM_METRICSSETTINGS_LISTENADDRESS:8067Point de terminaison des métriques Prometheus.
MM_FILESETTINGS_DRIVERTYPElocalType de stockage des fichiers (remplacé lorsque GCS FUSE est monté).
MM_FILESETTINGS_DIRECTORY/mattermost/data/Chemin de stockage des fichiers — correspond au point de montage GCS FUSE ou NFS.
MM_LOGSETTINGS_CONSOLELEVELINFONiveau de journalisation envoyé vers stdout (capturé par Cloud Logging).
MM_LOGSETTINGS_ENABLEFILEfalseJournalisation dans des fichiers désactivée — Cloud Run envoie stdout vers Cloud Logging.
MM_SERVICESETTINGS_TRUSTEDPROXYIPHEADERX-Forwarded-ForPermet d'extraire correctement l'adresse IP du client à partir des en-têtes de proxy de Cloud Run et de l'équilibreur de charge.
MM_EMAILSETTINGS_ENABLEEMAILBATCHINGfalseDésactivé pour la compatibilité avec la mise à l'échelle jusqu'à zéro de Cloud Run. Le regroupement des e-mails nécessite des files d'attente persistantes en mémoire.
MM_CACHEBACKENDredis ou memoryDéfini sur redis lorsque enable_redis = true ; sinon memory.
MM_REDIS_ADDRESShôte:port RedisInjectée lorsque enable_redis = true.

C. Cache Redis​

Redis est désactivé par défaut (enable_redis = false). Activez Redis pour tout déploiement exécutant plus d'une instance — sans Redis, plusieurs instances de Mattermost ne peuvent pas partager l'état des sessions ni les caches, ce qui entraîne des échecs d'authentification intermittents et des données obsolètes.

VariableGroupeValeur par défautDescription
enable_redis21falseActive Redis pour la mise en cache et le stockage des sessions de Mattermost. Recommandé pour les déploiements à plusieurs réplicas.
redis_host21""Nom d'hôte ou adresse IP du serveur Redis. Laissez vide pour utiliser l'adresse IP du serveur NFS lorsque enable_redis = true. Remplacez-la par une instance Memorystore en production.
redis_port21'6379'Port TCP du serveur Redis (chaîne).
redis_auth21""Mot de passe AUTH de Redis. Laissez vide si l'authentification n'est pas requise. Sensible — jamais stocké dans l'état.

D. Métriques​

Mattermost expose des métriques au format Prometheus sur le port 8067 (/metrics). Activez les métriques dans la System Console de Mattermost, sous Environment → Performance Monitoring, puis intégrez-les à Google Cloud Monitoring via un point de terminaison Prometheus remote write ou un collecteur s'exécutant dans le même VPC.

E. Import de sauvegarde et restauration​

VariableGroupeValeur par défautDescription
backup_schedule7'0 2 * * *'Expression cron (UTC) pour les sauvegardes quotidiennes automatiques.
backup_retention_days77Nombre de jours de conservation des fichiers de sauvegarde dans GCS.
enable_backup_import7falseDéclenche une restauration unique lors de l'apply. Repassez à false après une importation réussie.
backup_source7'gcs''gcs' (nom de fichier dans un bucket GCS) ou 'gdrive' (ID de fichier Drive).
backup_file7'backup.sql'Nom du fichier de sauvegarde dans le bucket GCS de sauvegardes géré par le module.
backup_format7'sql'Format de la sauvegarde. Options : sql, tar, gz, tgz, tar.gz, zip.

F. Observabilité et alertes​

VariableGroupeValeur par défautDescription
uptime_check_config14{ enabled=false, path="/" }Test de disponibilité : enabled, path, check_interval, timeout. Désactivé par défaut.
alert_policies14[]Règles d'alerte sur les métriques. Chacune : name, metric_type, comparison, threshold_value, duration_seconds.
support_users1[]Adresses e-mail notifiées par les déclenchements des tests de disponibilité et des règles d'alerte.

9. Explorer avec la console GCP​

Après un déploiement réussi, la console GCP est le principal outil pour inspecter le déploiement Mattermost en fonctionnement.

Service Cloud Run Accédez à Cloud Run dans la console GCP et sélectionnez le service Mattermost (nommé app<name><tenant><id> par défaut, par ex. appmattermostdemo). Depuis la page du service, vous pouvez :

  • Consulter l'URL du service pour accéder au client web Mattermost.
  • Inspecter les révisions actives et leurs pourcentages de répartition du trafic.
  • Examiner la configuration du conteneur, y compris les variables d'environnement, les volumes montés et les limites de ressources.
  • Ouvrir l'onglet Logs pour suivre directement les journaux de l'application Mattermost — toute la sortie stdout est capturée par Cloud Logging.
  • Surveiller les Metrics : nombre de requêtes, latence (p50, p95, p99), nombre d'instances de conteneur, utilisation de la mémoire et latence de démarrage.
  • Afficher les Revisions pour voir l'historique des déploiements, les pondérations de trafic actuelles et les tags des révisions actives.

Cloud SQL Accédez à SQL et sélectionnez l'instance PostgreSQL 15. Vérifications utiles :

  • Onglet Connections : nombre de connexions actives depuis le service Cloud Run (via l'Auth Proxy).
  • Operations & logs : activité récente de CREATE DATABASE, d'attribution de droits aux utilisateurs et de migration.
  • Onglet Databases : vérifiez que la base de données mattermost existe après le premier déploiement.
  • Onglet Users : confirmez que l'utilisateur mattermost a été créé par le job db-init.
  • Backups : sauvegardes automatiques et à la demande. Comparez avec la variable backup_schedule.

Cloud Storage Si gcs_volumes est configuré avec un bucket de données pour /mattermost/data, accédez à Cloud Storage et sélectionnez le bucket. Parcourez l'arborescence que Mattermost crée sous le point de montage :

  • teams/ — icônes des équipes et pièces jointes.
  • users/ — photos de profil.
  • plugins/ — fichiers de données des plugins. Les opérations sur les fichiers du bucket reflètent les envois et les pièces jointes effectués par les utilisateurs de Mattermost.

Secret Manager Accédez à Secret Manager et filtrez selon les libellés de ressources du déploiement. Les secrets créés par App CloudRun pour Mattermost comprennent :

  • DB_PASSWORD — le mot de passe de l'utilisateur applicatif PostgreSQL.
  • ROOT_PASSWORD — le mot de passe root/superutilisateur PostgreSQL utilisé par le job db-init. Cliquez sur un secret pour afficher ses versions, son historique d'accès et sa configuration de rotation.

Cloud Build Accédez à Cloud Build → History pour inspecter les journaux de build des images. Chaque déploiement crée un build qui compile l'image Mattermost personnalisée (lorsque container_image_source = 'custom'). Les journaux de build montrent les étapes du build Docker, le comportement de mise en cache des couches et l'envoi vers Artifact Registry.

Artifact Registry Accédez à Artifact Registry et trouvez le dépôt du projet. L'image Mattermost y est stockée après chaque exécution de Cloud Build. Les images plus anciennes sont nettoyées selon max_images_to_retain et image_retention_days.

Cloud Monitoring Accédez à Monitoring → Dashboards pour afficher les tableaux de bord des métriques Cloud Run. Si uptime_check_config est activé, le test de disponibilité apparaît sous Monitoring → Uptime checks. Les règles d'alerte créées via alert_policies apparaissent sous Monitoring → Alerting.


10. Explorer avec gcloud​

Les commandes gcloud suivantes sont utiles pour l'exploitation quotidienne et le dépannage après le déploiement. Remplacez PROJECT_ID, REGION et SERVICE_NAME par vos valeurs réelles.

Décrire le service Cloud Run :

gcloud run services describe SERVICE_NAME \
--region=REGION \
--project=PROJECT_ID \
--format="yaml(spec.template.spec.containers[0].env)"

Afficher l'URL du service et la répartition actuelle du trafic :

gcloud run services describe SERVICE_NAME \
--region=REGION \
--project=PROJECT_ID \
--format="table(status.url, status.traffic[].revisionName, status.traffic[].percent)"

Lister toutes les révisions et leurs pondérations de trafic :

gcloud run revisions list \
--service=SERVICE_NAME \
--region=REGION \
--project=PROJECT_ID \
--sort-by="~metadata.creationTimestamp" \
--format="table(metadata.name, status.conditions[0].type, status.conditions[0].status, metadata.creationTimestamp)"

Suivre en direct les journaux du service Mattermost :

gcloud logging read \
"resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME" \
--project=PROJECT_ID \
--format="value(textPayload)" \
--freshness=10m \
--order=asc

Consulter l'historique d'exécution du job Cloud Run db-init :

gcloud run jobs executions list \
--job=SERVICE_NAME-db-init \
--region=REGION \
--project=PROJECT_ID \
--format="table(metadata.name, status.conditions[0].type, metadata.creationTimestamp)"

Déclencher manuellement le job db-init (par ex. après une restauration de la base de données) :

gcloud run jobs execute SERVICE_NAME-db-init \
--region=REGION \
--project=PROJECT_ID \
--wait

Inspecter l'instance Cloud SQL et vérifier la connectivité à la base de données :

gcloud sql instances describe SQL_INSTANCE_NAME \
--project=PROJECT_ID \
--format="table(name, state, databaseVersion, settings.tier, ipAddresses[].ipAddress)"

Lister les bases de données Cloud SQL de l'instance :

gcloud sql databases list \
--instance=SQL_INSTANCE_NAME \
--project=PROJECT_ID

Afficher les secrets Secret Manager du déploiement :

gcloud secrets list \
--project=PROJECT_ID \
--filter="labels.app=mattermost" \
--format="table(name, createTime, replication.automatic)"

Accéder à la dernière version du secret du mot de passe de la base de données :

gcloud secrets versions access latest \
--secret=DB_PASSWORD_SECRET_NAME \
--project=PROJECT_ID

Lister les images de conteneur dans Artifact Registry :

gcloud artifacts docker images list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME \
--filter="tags:mattermost" \
--sort-by="~createTime" \
--format="table(IMAGE, TAGS, CREATE_TIME, UPDATE_TIME)"

Forcer un nouveau déploiement (redéployer la dernière révision) :

gcloud run services update SERVICE_NAME \
--region=REGION \
--project=PROJECT_ID \
--update-env-vars=DEPLOY_TIMESTAMP=$(date +%s)

Vérifier l'état des tests de disponibilité Cloud Monitoring :

gcloud monitoring uptime list-configs \
--project=PROJECT_ID \
--format="table(displayName, httpCheck.path, period, selectedRegions)"

Afficher les règles d'alerte actives :

gcloud alpha monitoring policies list \
--project=PROJECT_ID \
--format="table(displayName, enabled, conditions[0].displayName)"

Inspecter le bucket GCS utilisé pour le stockage des fichiers de Mattermost :

gsutil ls -l gs://BUCKET_NAME/
gsutil du -s gs://BUCKET_NAME/

Vérifier la présence d'un fichier envoyé précis dans Mattermost :

gsutil stat gs://BUCKET_NAME/teams/TEAM_ID/channels/CHANNEL_ID/attachments/FILE_ID

11. Comportements gérés par la plateforme​

Les comportements suivants sont appliqués automatiquement par Mattermost CloudRun, quelles que soient les valeurs des variables.

ComportementMise en œuvreDétail
PostgreSQL 15 requisdatabase_type = "POSTGRES_15" par défautMattermost exige PostgreSQL 13 ou une version ultérieure. La chaîne de connexion à la base de données et le pilote sont configurés par Mattermost Common.
Volumes GCS FUSE pour les donnéesgcs_volumes configuré via Mattermost Common/mattermost/data est relié à un montage GCS FUSE pour un stockage durable des fichiers lorsque gcs_volumes est renseigné.
Mise en miroir des images activée par défautenable_image_mirroring = trueL'image Docker Hub de Mattermost est mise en miroir dans Artifact Registry avant le déploiement, ce qui évite de dépendre de registres externes.
Au moins 1 instancemin_instance_count = 1 par défautEmpêche la mise à l'échelle jusqu'à zéro de déconnecter les sessions WebSocket actives des utilisateurs.
Aucun secret applicatif généré automatiquementMattermost génère ses clés au premier démarrageLes clés de signature internes, les secrets de session et les clés de chiffrement symétrique sont générés par Mattermost lui-même et stockés dans PostgreSQL — et non dans Secret Manager.
Job db-init par défautFourni par Mattermost Common lorsque initialization_jobs = []La base de données et l'utilisateur PostgreSQL sont créés automatiquement avant le démarrage de Mattermost. Fournissez une liste initialization_jobs non vide pour le remplacer.
Confiance dans l'en-tête du proxyMM_SERVICESETTINGS_TRUSTEDPROXYIPHEADER=X-Forwarded-ForNécessaire pour extraire correctement l'adresse IP du client lorsque Cloud Run se trouve derrière Cloud Armor ou un équilibreur de charge. Injecté automatiquement.
Regroupement des e-mails désactivéMM_EMAILSETTINGS_ENABLEEMAILBATCHING=falseLe regroupement nécessite des files d'attente persistantes en mémoire, incompatibles avec le modèle d'exécution sans état de Cloud Run.
Variable d'environnement de l'URL du siteMM_SERVICESETTINGS_SITEURL défini à partir de la variable site_urlLorsque site_url n'est pas vide, elle est injectée sous la forme MM_SERVICESETTINGS_SITEURL. Définissez-la après le premier déploiement pour garantir une génération correcte des liens.

12. Référence des variables​

Toutes les variables configurables par l'utilisateur exposées par Mattermost CloudRun, triées par groupe d'interface puis par ordre.

VariableGroupeValeur par défautDescription
project_id1—ID du projet GCP. Obligatoire.
region1'us-central1'Région GCP de déploiement des ressources.
tenant_id1'demo'Suffixe court ajouté à tous les noms de ressources.
support_users1[]Adresses e-mail pour l'accès IAM et les alertes de surveillance.
resource_labels1{}Libellés appliqués à toutes les ressources provisionnées.
application_name3'mattermost'Nom de base des ressources. Ne le modifiez pas après le déploiement.
display_name3'Mattermost'Nom lisible affiché dans l'interface.
description3'Mattermost - Open-source team messaging and collaboration'Description du service.
application_version3'9.11.2'Tag de l'image de conteneur Mattermost.
deploy_application4trueDéfinissez false pour un déploiement de l'infrastructure seule.
container_image_source4'custom''custom' (Cloud Build) ou 'prebuilt' (image existante).
container_image4""URI de l'image de conteneur. Laissez vide pour que Cloud Build la gère.
cpu_limit4'2000m'CPU par instance. 2 vCPU recommandés.
memory_limit4'2Gi'Mémoire par instance.
cpu_always_allocated4trueCPU alloué en permanence. Maintenu à true pour la gestion des WebSocket en temps réel.
container_resources4nullRemplace cpu_limit et memory_limit lorsqu'elle est définie.
min_instance_count41Conservez 1 pour éviter les déconnexions WebSocket.
max_instance_count45Plafond de coût de la mise à l'échelle automatique.
container_port48065Port HTTP natif de Mattermost.
execution_environment4'gen2'Gen2 requis pour GCS Fuse.
timeout_seconds4300Durée maximale d'une requête. Définissez 3600 pour les connexions WebSocket.
enable_cloudsql_volume4trueSidecar Cloud SQL Auth Proxy.
container_protocol4'http1''http1' ou 'h2c'.
enable_image_mirroring4trueMet l'image Mattermost en miroir dans Artifact Registry.
traffic_split4[]Répartition du trafic canary/blue-green.
max_revisions_to_retain47Nombre maximal de révisions Cloud Run à conserver.
service_annotations4{}Annotations Cloud Run avancées.
service_labels4{}Libellés appliqués au service Cloud Run.
ingress_settings5'all''all', 'internal' ou 'internal-and-cloud-load-balancing'.
vpc_egress_setting5'PRIVATE_RANGES_ONLY''PRIVATE_RANGES_ONLY' ou 'ALL_TRAFFIC'.
enable_iap5falseActive IAP de manière native sur le service Cloud Run.
iap_authorized_users5[]Utilisateurs et comptes de service autorisés via IAP.
iap_authorized_groups5[]Groupes Google autorisés via IAP.
environment_variables6{}Variables d'environnement en texte clair pour la configuration de Mattermost.
secret_environment_variables6{}Références Secret Manager.
explicit_secret_values6{}Valeurs sensibles brutes écrites dans Secret Manager.
secret_propagation_delay630Nombre de secondes d'attente après la création d'un secret.
secret_rotation_period6'2592000s'Fréquence des notifications de rotation de Secret Manager.
backup_schedule7'0 2 * * *'Expression cron (UTC) pour les sauvegardes automatiques.
backup_retention_days77Nombre de jours de conservation des fichiers de sauvegarde dans GCS.
enable_backup_import7falseDéclenche une restauration unique lors de l'apply.
backup_source7'gcs''gcs' ou 'gdrive'.
backup_file7'backup.sql'Nom du fichier de sauvegarde dans le bucket de sauvegardes géré par le module.
backup_format7'sql'Format de la sauvegarde. Options : sql, tar, gz, tgz, tar.gz, zip.
enable_cicd_trigger8falseProvisionne un déclencheur GitHub Cloud Build.
github_repository_url8""URL HTTPS complète du dépôt GitHub.
github_token8""PAT GitHub. Requis lors du premier apply. Sensible.
github_app_installation_id8""ID d'installation de l'application GitHub.
cicd_trigger_config8{ branch_pattern = "^main$" }Configuration avancée du déclencheur Cloud Build.
enable_cloud_deploy8falseProvisionne un pipeline de livraison progressive Cloud Deploy.
cloud_deploy_stages8[dev, staging, prod(approval)]Étapes de promotion Cloud Deploy ordonnées.
enable_binary_authorization8falseImpose l'attestation des images lors du déploiement.
binauthz_evaluation_mode8'ALWAYS_ALLOW''ALWAYS_ALLOW', 'REQUIRE_ATTESTATION' ou 'ALWAYS_DENY'.
enable_custom_sql_scripts9falseExécute des scripts SQL depuis GCS après le provisionnement.
custom_sql_scripts_bucket9""Bucket GCS contenant les scripts SQL.
custom_sql_scripts_path9""Préfixe de chemin dans le bucket.
custom_sql_scripts_use_root9falseExécute les scripts en tant qu'utilisateur root de la base de données.
enable_cloud_armor10falseProvisionne un équilibreur de charge HTTPS global et Cloud Armor WAF.
admin_ip_ranges10[]Plages CIDR exemptées des règles WAF.
application_domains10[]Domaines personnalisés avec certificats SSL gérés par Google.
enable_cdn10falseActive Cloud CDN sur le backend de l'équilibreur de charge HTTPS.
max_images_to_retain107Nombre maximal d'images de conteneur récentes dans Artifact Registry.
delete_untagged_images10trueSupprime les images sans tag d'Artifact Registry.
image_retention_days1030Nombre de jours après lequel les images peuvent être supprimées.
create_cloud_storage11trueDéfinissez false pour ignorer la création du bucket GCS.
storage_buckets11[]Buckets GCS supplémentaires à provisionner.
enable_nfs11trueProvisionne un stockage partagé NFS.
nfs_mount_path11'/mattermost/data'Chemin du conteneur où NFS est monté.
nfs_instance_name11""Nom d'une VM GCE NFS existante. Laissez vide pour la découverte automatique.
nfs_instance_base_name11'app-nfs'Nom de base de la VM NFS intégrée.
gcs_volumes11[]Buckets GCS à monter via GCS Fuse.
manage_storage_kms_iam11falseCrée une clé KMS CMEK et active CMEK sur les buckets de stockage.
enable_artifact_registry_cmek11falseCrée une clé KMS Artifact Registry pour le chiffrement au repos.
database_type12'POSTGRES_15'Moteur Cloud SQL. Mattermost exige PostgreSQL.
db_name12'mattermost'Nom de la base de données PostgreSQL. Ne le modifiez pas après le déploiement.
db_user12'mattermost'Utilisateur applicatif PostgreSQL.
database_password_length1232Longueur du mot de passe généré automatiquement. Plage : 16 à 64.
enable_auto_password_rotation12falseRotation automatique des mots de passe sans interruption de service.
rotation_propagation_delay_sec1290Nombre de secondes d'attente après la rotation avant le redémarrage.
initialization_jobs13[]Jobs Cloud Run ponctuels. Laissez vide pour utiliser le job db-init par défaut de Mattermost Common.
cron_jobs13[]Jobs Cloud Run récurrents planifiés.
startup_probe14{ path="/", initial_delay_seconds=60, failure_threshold=30 }Sonde de démarrage.
liveness_probe14{ path="/", initial_delay_seconds=60, failure_threshold=3 }Sonde de vivacité.
startup_probe_config14{ enabled=true, path="/" }Inerte pour Mattermost — voir §C. Utilisez plutôt startup_probe.
health_check_config14{ enabled=true, path="/" }Inerte pour Mattermost — voir §C. Utilisez plutôt liveness_probe.
uptime_check_config14{ enabled=false, path="/" }Test de disponibilité Cloud Monitoring (désactivé par défaut).
alert_policies14[]Règles d'alerte Cloud Monitoring sur les métriques.
site_url20""URL publique de Mattermost. Définit MM_SERVICESETTINGS_SITEURL.
edition20'team''team' (gratuite) ou 'enterprise' (payante).
enable_redis21falseRedis pour la mise en cache de Mattermost. Requis avec plusieurs réplicas.
redis_host21""Nom d'hôte ou adresse IP de Redis. Utilise par défaut l'adresse IP du serveur NFS lorsqu'il est vide.
redis_port21'6379'Port TCP de Redis (chaîne).
redis_auth21""Mot de passe AUTH de Redis. Sensible.
enable_vpc_sc22falseInscrit les appels d'API dans le périmètre VPC-SC du projet.
vpc_cidr_ranges22[]Plages CIDR des sous-réseaux VPC pour le niveau d'accès réseau VPC-SC.
vpc_sc_dry_run22trueJournalise les violations VPC-SC sans les bloquer. Définissez false pour les appliquer.
organization_id22""ID de l'organisation GCP pour VPC-SC. Découvert automatiquement lorsqu'il est vide.
enable_audit_logging22falseActive les journaux Cloud Audit Logs détaillés.

13. Sorties​

SortieDescription
service_nameNom du service Cloud Run.
service_urlURL publique du service Cloud Run.
service_locationRégion GCP dans laquelle le service Cloud Run est déployé.
project_idID du projet GCP.
deployment_idSuffixe d'ID de déploiement utilisé dans les noms de ressources.
database_instance_nameNom de l'instance Cloud SQL PostgreSQL.
database_nameNom de la base de données de l'application.
database_userNom de l'utilisateur de la base de données de l'application.
database_password_secretNom du secret Secret Manager contenant le mot de passe de la base de données.
storage_bucketsBuckets de stockage GCS créés.
container_imageImage de conteneur utilisée pour le déploiement.
cicd_enabledIndique si le pipeline CI/CD est activé.
github_repository_urlURL du dépôt GitHub connecté pour le CI/CD.

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

Niveaux de risque : Critique (perte de données, panne complète, faille de sécurité) — Élevé (service indisponible ou dégradation importante) — Moyen (fonctionnement dégradé ou coût accru) — Faible (impact mineur).

VariableValeur par défaut judicieuseRisqueConséquence d'une valeur incorrecte
project_id(obligatoire)CritiqueAucune valeur par défaut — le déploiement échoue immédiatement.
database_type"POSTGRES_15"CritiqueMattermost exige PostgreSQL 13 ou une version ultérieure. Choisir une variante MySQL ou SQL Server empêche Mattermost de démarrer, avec une erreur de connexion du pilote.
db_name"mattermost"CritiqueImmuable après le premier déploiement — le modifier amène Mattermost à recréer la base de données, ce qui détruit tout l'historique des messages, les utilisateurs et la configuration.
db_user"mattermost"CritiqueImmuable après le premier déploiement — le modifier recrée l'utilisateur Cloud SQL et rompt la connexion à la base de données.
min_instance_count1ÉlevéLa mise à l'échelle jusqu'à zéro (0) coupe les connexions WebSocket actives (messagerie en temps réel) de tous les utilisateurs en ligne chaque fois que l'instance unique est réduite. Définissez 1 pour tout déploiement de production.
timeout_seconds300ÉlevéMattermost maintient des connexions WebSocket pour la messagerie en temps réel. Un délai d'expiration de 5 minutes amène Cloud Run à interrompre toutes les connexions WebSocket actives toutes les 5 minutes. Définissez 3600 pour les déploiements de production faisant un usage intensif des WebSocket.
enable_redisfalseÉlevéLorsque plusieurs réplicas s'exécutent (max_instance_count > 1), Redis est requis pour le partage distribué des sessions. Sans lui, les utilisateurs subissent des échecs d'authentification intermittents et des données obsolètes, car les requêtes sont acheminées vers différentes instances dotées de caches mémoire indépendants.
site_url""ÉlevéSans site_url, Mattermost utilise http://localhost:8065 pour générer les liens. Cela casse les liens d'invitation par e-mail, les URI de redirection OAuth et les URL de callback des webhooks. Définissez-la sur l'URL du service Cloud Run ou sur le domaine personnalisé après le premier déploiement.
gcs_volumes[]ÉlevéSans volume persistant sur /mattermost/data, tous les fichiers et pièces jointes envoyés par les utilisateurs sont stockés sur le système de fichiers éphémère du conteneur. Tous les fichiers envoyés sont définitivement perdus lors du déploiement d'une nouvelle révision ou du redémarrage du conteneur.
edition"team"MoyenDéfinir edition = "enterprise" sélectionne l'image de conteneur Enterprise Edition. Sans clé de licence valide définie via environment_variables, Mattermost démarre en mode d'essai Enterprise et finit par revenir aux fonctionnalités de la Team Edition.
memory_limit"2Gi"MoyenMattermost met en cache en mémoire les listes de canaux, les sessions des utilisateurs et les index des messages. Descendre en dessous de 1Gi provoque des redémarrages pour OOM sous une activité d'équipe modérée. Passez à 4Gi pour les équipes de plus de 100 utilisateurs actifs.
backup_retention_days7MoyenSept jours ne suffisent pas pour des équipes actives. Passez à 30 jours ou plus pour toute instance Mattermost de production, afin de permettre une récupération à un instant donné en cas de corruption des données ou de suppression accidentelle.
enable_cloud_armorfalseMoyenSans Cloud Armor, Mattermost est exposé directement sur l'URL *.run.app. Pour les équipes en production, activez Cloud Armor afin de protéger l'API contre les attaques de bots et le bourrage d'identifiants.
enable_iapfalseFaibleLorsque IAP est désactivé, Mattermost est responsable de sa propre authentification. Envisagez d'activer IAP pour les déploiements internes afin d'ajouter une couche d'authentification supplémentaire avant que les requêtes n'atteignent Mattermost.
secret_propagation_delay30FaibleParfois insuffisant dans les configurations multirégionales. Passez à 60–90 s si des secrets sont introuvables pendant l'apply.

15. Destruction des ressources​

Problème de suppression connu : libération des adresses IPv4 sans serveur​

Lors de la destruction d'un déploiement Cloud Run, vous pouvez rencontrer une erreur semblable à :

Error: Error waiting for Subnetwork to be deleted: The following serverless IPv4 address(es) on subnet ... are still in use.

Cause : GCP conserve de manière asynchrone les adresses IPv4 sans serveur sur le sous-réseau VPC après la suppression d'un service Cloud Run. Ces adresses sont libérées par GCP environ 20 à 30 minutes après la suppression du service Cloud Run.

Résolution : attendez 20 à 30 minutes après la première tentative de destruction, puis relancez la commande de destruction :

tofu destroy

La deuxième exécution réussira une fois que GCP aura libéré les adresses réservées.

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