Aller au contenu principal

Nextcloud sur GKE Autopilot

Nextcloud sur GKE Autopilot

Nextcloud est la principale plateforme auto-hébergée de synchronisation de fichiers et de collaboration, utilisée par 400 millions d'utilisateurs dans plus de 100 000 organisations — dont des administrations et des établissements de santé à la recherche d'une alternative à Google Drive et OneDrive conforme au RGPD. Ce module déploie Nextcloud 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 Nextcloud 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 à toute application GKE — Workload Identity, entrée, 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​

Nextcloud s'exécute en tant que charge de travail PHP/Apache. Le déploiement assemble un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotPods PHP/Apache, 2 vCPU / 4 GiB par défaut, autoscaling horizontal
Base de donnéesCloud SQL for MySQL 8.0Obligatoire — Nextcloud ne prend pas en charge PostgreSQL dans ce déploiement
Fichiers partagésFilestore (NFS)Répertoires config/ et data/ partagés entre tous les réplicas
Stockage d'objetsCloud StorageUn bucket nc-data provisionné par déploiement
Cache et verrouillageRedisActivé par défaut ; évite les conflits de verrouillage de fichiers entre réplicas
SecretsSecret ManagerMot de passe administrateur généré automatiquement ; secrets de configuration post-installation
EntréeCloud Load BalancingLoadBalancer externe, domaine personnalisé + certificat géré facultatifs

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

  • MySQL 8.0 est obligatoire. Le moteur de base de données est fixe ; choisir PostgreSQL ou NONE empêche le démarrage.
  • NFS est activé par défaut. Tous les réplicas doivent partager config.php et le répertoire des données utilisateur. Sans NFS, chaque redémarrage de pod supprime les fichiers.
  • Redis est activé par défaut. Sans cache et backend de verrouillage partagés, les écritures concurrentes entre réplicas provoquent des erreurs « File is locked ».
  • Les limites PHP sont intégrées à l'image du conteneur au moment du build. Modifier php_memory_limit, upload_max_filesize ou post_max_size nécessite une nouvelle exécution de Cloud Build.
  • Le mot de passe administrateur est généré automatiquement et stocké dans Secret Manager ; vous ne le définissez jamais en clair.
  • Le premier démarrage est volontairement lent. Nextcloud exécute occ maintenance:install de manière synchrone avant le démarrage d'Apache. La sonde de démarrage accorde jusqu'à 10 minutes pour que la première installation se termine.

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 figurent dans les sorties du déploiement.

A. GKE Autopilot — la charge de travail Nextcloud​

Les pods Nextcloud sont planifiés sur Autopilot, qui facture le CPU et la mémoire que les pods demandent réellement. L'autoscaling horizontal des pods (Horizontal Pod Autoscaling) dimensionne le déploiement entre les nombres minimal et maximal de réplicas.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Nextcloud 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
    # Run an occ command inside a running pod:
    POD=$(kubectl get pods -n "$NAMESPACE" -o name | grep nextcloud | head -1)
    kubectl exec -n "$NAMESPACE" -it "$POD" -- php occ status
    kubectl exec -n "$NAMESPACE" -it "$POD" -- php occ db:add-missing-indices

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 MySQL 8.0​

Nextcloud stocke toutes les données applicatives (métadonnées des fichiers, utilisateurs, partages, agenda et contacts) dans une instance gérée Cloud SQL for MySQL 8.0. Les pods y accèdent de manière privée via le sidecar Cloud SQL Auth Proxy, sur un socket Unix à 127.0.0.1:3306, de sorte qu'aucune IP publique n'est exposée. Lors du premier déploiement, un job d'initialisation crée la base de données et l'utilisateur de l'application avec la collation utf8mb4.

  • Console : SQL → sélectionnez l'instance pour voir 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"
    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 figurent tous 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 données des fichiers utilisateur de Nextcloud sont écrites sur un partage Filestore (NFS) monté dans chaque pod. entrypoint.sh définit NEXTCLOUD_DATA_DIR=/mnt/nfs/nextcloud-data afin que tous les réplicas partagent les mêmes fichiers utilisateur. config.php n'est pas stocké sur NFS — il est reconstruit localement sur chaque pod à partir des secrets de Secret Manager (voir §3 « Secrets de configuration post-installation » ci-dessous). Un bucket Cloud Storage nc-data est également provisionné par déploiement, et le compte de service de la charge de travail y reçoit automatiquement l'accès.

  • Console : Filestore → Instances pour le partage NFS ; Cloud Storage → Buckets pour le bucket de données.
  • CLI :
    gcloud filestore instances list --project "$PROJECT"
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<nc-data-bucket>/
    # 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 et verrouillage de fichiers​

Redis sert de support au cache distribué de Nextcloud (memcache.distributed) et au verrouillage de fichiers (filelocking.enabled). Avec plus d'un réplica, il est obligatoire — sans lui, les écritures concurrentes produisent des erreurs HTTP 503 « File is locked ». Lorsqu'aucun hôte Redis externe n'est configuré et que NFS est activé, l'IP du serveur NFS est utilisée comme point de terminaison Redis.

  • Console : Memorystore → Redis (si vous utilisez une instance gérée).
  • CLI :
    redis-cli -h <redis-host> ping
    redis-cli -h <redis-host> info keyspace

E. Secret Manager​

Le mot de passe administrateur de Nextcloud et quatre secrets de configuration post-installation (ID d'instance, sel de mot de passe, secret applicatif et, facultativement, le mot de passe d'authentification Redis) sont stockés dans Secret Manager et injectés dans les pods à l'exécution. Les trois secrets de configuration commencent avec la valeur provisoire "UNSET" ; le hook post-installation du conteneur écrit les vraies valeurs une fois occ maintenance:install terminé.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT" --filter="name~nextcloud"
    gcloud secrets versions access latest --secret=<admin-password-secret> --project "$PROJECT"

Le nom du secret du mot de passe de la base de données figure dans les Sorties. Consultez App_GKE pour l'intégration 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 Cloud Load Balancing externe. 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. Les domaines personnalisés sont également ajoutés automatiquement à la liste NEXTCLOUD_TRUSTED_DOMAINS de Nextcloud.

  • 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 des IP statiques.

G. Cloud Logging et Monitoring​

Les flux stdout/stderr des pods sont envoyés à Cloud Logging ; les métriques GKE et Cloud SQL sont envoyées à Cloud Monitoring. Des tests de disponibilité et des règles d'alerte facultatifs sont disponibles.

  • 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 Nextcloud​

  • Configuration de la base de données au premier déploiement. Un job d'initialisation crée la base de données et l'utilisateur Nextcloud avec le jeu de caractères utf8mb4 et accorde les privilèges avant le démarrage de l'application. Il est idempotent et peut être réexécuté sans risque.
  • occ maintenance:install au premier démarrage. Lors du tout premier démarrage, Nextcloud exécute sa routine d'installation de manière synchrone avant qu'Apache ne commence à servir. Cela peut prendre plusieurs minutes sur une instance Cloud SQL froide. La sonde de démarrage accorde jusqu'à 10 minutes (60 s de délai initial + 20 échecs × 15 s de période) pour que cela se termine.
  • Secrets de configuration post-installation. Une fois occ maintenance:install terminé, un hook du conteneur écrit les vraies valeurs de instanceid, passwordsalt et secret dans Secret Manager. Les démarrages de pods suivants les relisent pour reconstruire config.php sans avoir besoin de NFS.
  • Mise à niveau PHP au démarrage. NEXTCLOUD_UPDATE=1 est défini par défaut ; Nextcloud exécute donc occ upgrade automatiquement à chaque démarrage du conteneur. C'est voulu pour les montées de version mineures. Définissez NEXTCLOUD_UPDATE=0 dans environment_variables et gérez les mises à niveau manuellement lors d'un changement de version majeure.
  • Domaines de confiance. Nextcloud applique une liste blanche de domaines de confiance. Le module alimente NEXTCLOUD_TRUSTED_DOMAINS avec le nom DNS interne au cluster et les éventuels application_domains. Les requêtes provenant de noms d'hôte non listés reçoivent une erreur « Access through untrusted domain ».
  • NFS uniquement pour les données utilisateur. NFS ne sert de support qu'au répertoire partagé des données utilisateur (NEXTCLOUD_DATA_DIR=/mnt/nfs/nextcloud-data). config.php n'est ni stocké sur NFS ni partagé via un lien symbolique — chaque réplica le reconstruit localement à partir des valeurs Secret Manager décrites ci-dessus, ce qui permet à tous les réplicas de converger vers la même configuration sans dépendre de NFS pour l'état de la configuration.
  • Chemin de santé. Les sondes de démarrage et de vivacité ciblent /status.php, qui renvoie un HTTP 200 avec un objet JSON d'état quel que soit l'état de configuration de Nextcloud — ce qui en fait le point de terminaison de santé de référence.
  • Connexion administrateur. Le nom d'utilisateur administrateur initial est configurable ; le mot de passe est récupéré depuis Secret Manager (voir §2.E).

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Nextcloud 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(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_iddemoSuffixe court qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail auxquelles sont accordés 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/de la propriété.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namenextcloudNom de base des ressources. Ne le modifiez pas après le premier déploiement.
application_display_nameNextcloudNom convivial affiché dans la console.
application_descriptionNextcloud self-hosted collaboration and file sharing platform on GKE AutopilotAnnotation de description de la charge de travail.
application_version30Tag de version de l'image Nextcloud ; incrémentez-le pour déployer une nouvelle version.

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

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure.
cpu_limit2000mCPU par pod ; 2 vCPU recommandés.
memory_limit4GiMémoire par pod ; 4 GiB recommandés.
container_resources{ cpu_limit="1000m", memory_limit="512Mi" }Objet de ressources structuré ; remplace cpu_limit/memory_limit lorsqu'il est défini.
min_instance_count1Nombre minimal de réplicas. Conservez ≥ 1 pour les clients WebDAV qui maintiennent des connexions persistantes.
max_instance_count5Nombre maximal de réplicas. Exige Redis + NFS lorsqu'il est > 1.
container_port80Nextcloud/Apache écoute sur le port 80.
enable_cloudsql_volumetrueSidecar Cloud SQL Auth Proxy pour les connexions par socket.
enable_vertical_pod_autoscalingfalseLaisse Autopilot ajuster automatiquement les demandes de ressources.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{ SMTP_HOST = "", SMTP_PORT = "25", SMTP_USER = "", SMTP_PASSWORD = "", SMTP_SSL = "false", EMAIL_FROM = "ghost@example.com" }Paramètres non secrets supplémentaires injectés dans le pod (la valeur par défaut amorce des espaces réservés SMTP vides). Les variables principales de Nextcloud sont définies automatiquement.
secret_environment_variables{}Map variable d'environnement → nom du secret Secret Manager.
secret_rotation_period2592000sFréquence des notifications de rotation de Secret Manager.
secret_propagation_delay30Nombre de secondes d'attente après la création d'un secret avant de poursuivre.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
gke_cluster_name""Cluster GKE cible. Découvert automatiquement s'il est vide.
namespace_name""Espace de noms Kubernetes. Généré automatiquement s'il est vide.
workload_typenullRésolu automatiquement en StatefulSet lorsque stateful_pvc_enabled = true.
service_typeLoadBalancerMode d'exposition du Service.
session_affinityClientIPRoutage persistant ; recommandé pour les opérations sur fichiers avec état.
network_tags['nfsserver']Le tag nfsserver est requis pour la connectivité NFS.
termination_grace_period_seconds30Délai de grâce avant SIGKILL.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullActive les modèles de PVC par pod ; sélectionne automatiquement StatefulSet lorsqu'il vaut true.
stateful_pvc_size10GiTaille de stockage de chaque PVC par pod.
stateful_pvc_mount_path/dataChemin du PVC par pod dans le conteneur.
stateful_pvc_storage_classstandard-rwoStorageClass Kubernetes pour le provisionnement des PVC.
stateful_headless_servicenullCrée un Service headless pour des entrées DNS de pods stables.
stateful_pod_management_policynullOrderedReady ou Parallel.
stateful_update_strategynullRollingUpdate ou OnDelete.
stateful_fs_group0GID défini comme fsGroup au niveau du pod pour la propriété des PVC.

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 bruts sont lus comme des octets et bloquent la planification.

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 d'une marge pour les évictions.
enable_topology_spreadfalseRépartit les pods entre les zones ; recommandé pour min_instance_count > 1.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probe{ path="/status.php", initial_delay_seconds=60, failure_threshold=20 }Accorde jusqu'à ~5 minutes pour l'occ maintenance:install du premier démarrage.
liveness_probe{ path="/status.php", initial_delay_seconds=120, failure_threshold=3 }Redémarre le conteneur après 3 échecs consécutifs.
uptime_check_config{ enabled=false }Test de disponibilité Cloud Monitoring facultatif.
alert_policies[]Règles d'alerte sur les 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é.
cron_jobs[]CronJobs Kubernetes pour les tâches planifiées récurrentes.
additional_services[]Services GKE sidecar ou compagnons supplémentaires.

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

Intégration Cloud Build / Cloud Deploy standard d'App_GKE — consultez 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 la configuration et les données de Nextcloud. Requis pour plusieurs réplicas.
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur.
nfs_volume_namenfs-data-volumeNom du volume Kubernetes pour le montage NFS.
nfs_instance_name""Nom de la VM GCE NFS existante. Découvert automatiquement s'il est vide.
nfs_instance_base_nameapp-nfsNom de base de la VM NFS créée à la volée lorsqu'il n'en existe aucune.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionne les buckets configurés (le bucket nc-data provient de Nextcloud_Common).
storage_buckets[]Buckets GCS supplémentaires en plus du bucket nc-data provisionné automatiquement.
gcs_volumes[]Buckets GCS à monter via le pilote CSI GCS Fuse.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.
max_images_to_retain7Nombre maximal d'images récentes à conserver dans Artifact Registry.

Groupe 15 — Cache Redis​

VariableValeur par défautDescription
enable_redistrueUtilise Redis pour le cache distribué et le verrouillage de fichiers.
redis_host""Laissez vide pour utiliser l'IP du serveur NFS ; définissez-le explicitement lorsque NFS est désactivé.
redis_port6379Port Redis.
redis_auth""Mot de passe d'authentification Redis facultatif (sensible).

Groupe 16 — Backend de base de données​

VariableValeur par défautDescription
database_typeMYSQL_8_0Fixe — ne la modifiez pas.
application_database_namegkeappdbNom de la base de données. Immuable après le premier déploiement.
application_database_usergkeappuserUtilisateur de l'application. Immuable après le premier déploiement.
db_namenextcloudAlias pratique transmis à Nextcloud_Common en tant que db_name.
db_usernextcloudAlias pratique transmis à Nextcloud_Common en tant que db_user.
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.

Groupe 17 — Sauvegarde et maintenance​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron de sauvegarde automatique (UTC).
backup_retention_days7Rétention ; portez-la à 30–90 pour la production/la conformité.
enable_backup_import / backup_source / backup_uri / backup_formatoptions de restaurationRestauration depuis 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 personnalisés ; également ajoutés à NEXTCLOUD_TRUSTED_DOMAINS.
reserve_static_iptrueIP externe stable d'un redéploiement à l'autre.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExige une connexion Google devant Nextcloud.
iap_authorized_users / iap_authorized_groups[]Personnes autorisées à 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 et CDN​

VariableValeur par défautDescription
enable_cloud_armorfalseAssocie une règle Cloud Armor (WAF) au backend de l'Ingress.
admin_ip_ranges[]Plages CIDR autorisées à un accès privilégié.
cloud_armor_policy_namedefault-waf-policyNom de la règle.
enable_cdnfalseActive Cloud CDN sur le backend de l'Ingress.

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

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

Groupe 23 — Paramètres de l'application Nextcloud​

VariableValeur par défautDescription
nextcloud_admin_useradminNom d'utilisateur de l'administrateur initial. Changez la valeur par défaut pour les déploiements exposés publiquement.
php_memory_limit512MLimite de mémoire PHP — intégrée à l'image du conteneur au moment du build. À augmenter pour les opérations sur de gros fichiers.
upload_max_filesize512MTaille maximale des fichiers téléversés — intégrée à l'image. À augmenter pour le téléversement de vidéos ou d'archives.
post_max_size512MLimite du corps POST de PHP — doit être ≥ upload_max_filesize.

E-mail / SMTP​

Il n'existe pas de variables SMTP dédiées — l'e-mail sortant se configure via la map environment_variables (groupe 5), dont la valeur par défaut amorce les espaces réservés SMTP_HOST (vide = e-mail désactivé ; les réinitialisations de mot de passe et les notifications de partage ne fonctionneront pas), SMTP_PORT (25), SMTP_USER, SMTP_PASSWORD, SMTP_SSL (false) et EMAIL_FROM. Renseignez-les avec les valeurs de votre relais de messagerie pour activer l'e-mail.


5. Sorties​

Ces valeurs sont renvoyées lors 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_ipsMap 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'atteindre Nextcloud (ajoute /login à l'URL de base).
database_instance_nameNom de l'instance Cloud SQL.
database_nameNom de la base de données de l'application.
database_userUtilisateur de la base de données de l'application.
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 (facultatif) d'import.
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étails du dépôt CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique si le cluster/la charge de travail est prêt.
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_typeMYSQL_8_0CritiqueNextcloud exige MySQL ; les autres moteurs font échouer le job d'initialisation et le démarrage.
enable_nfstrueCritiqueSans stockage partagé, tous les fichiers utilisateur et config.php sont perdus au redémarrage des pods.
enable_cloudsql_volumetrueCritiqueNextcloud se connecte via un socket Unix ; supprimer le sidecar casse toutes les connexions à la base de données au démarrage.
application_database_name / _userà définir une seule foisCritiqueImmuables après le premier déploiement ; les renommer recrée la base de données/l'utilisateur et détruit les données.
application_domainsinclure tous les noms d'hôte d'accèsCritiqueNextcloud bloque les requêtes provenant de domaines non listés avec « Access through untrusted domain ».
enable_backup_importfalse sauf en cas de restaurationCritiqueL'activer sans backup_uri valide fait échouer le job d'import.
quota_memory_requests / _limitsunités binairesCritiqueLes entiers bruts sont interprétés comme des octets et bloquent toute planification.
enable_redistrueÉlevéAvec plus d'un réplica, les verrous de fichiers deviennent obsolètes et les écritures concurrentes renvoient HTTP 503.
redis_host"" ou IP expliciteÉlevéAucun point de terminaison Redis valide lorsque NFS est désactivé et qu'aucun hôte n'est défini.
upload_max_filesize / post_max_sizeà augmenter pour les gros fichiersÉlevéIntégrées à l'image ; les fichiers dépassant la limite échouent silencieusement. post_max_size doit être ≥ upload_max_filesize.
memory_limit4GiÉlevéUne mémoire insuffisante provoque des OOM PHP lors de gros téléversements ou de la génération de miniatures.
NEXTCLOUD_UPDATE1 (par défaut) ou 0ÉlevéLaisser 1 lors d'une mise à niveau de version majeure peut corrompre la base de données. Définissez 0 et exécutez occ upgrade manuellement d'une version majeure à l'autre.
min_instance_count1Élevé0 provoque des déconnexions liées aux démarrages à froid pour les clients de synchronisation WebDAV.
max_instance_count > 1exige Redis + NFSÉlevéPlusieurs réplicas sans Redis provoquent des erreurs de verrouillage de fichiers et une possible corruption des données.
pdb_min_available vs min_instance_countlaisser une margeMoyen1/1 peut bloquer les mises à niveau des nœuds (le pod unique ne peut pas être évincé).
nextcloud_admin_userà changer par rapport à adminMoyenLa valeur par défaut admin est une cible courante d'attaques par force brute sur les déploiements publics.
enable_iap / enable_cloud_armorà activer pour les accès d'administrationMoyenSans ces options, le panneau d'administration de Nextcloud est accessible publiquement.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour une rétention réglementaire.
php_memory_limit512M (à augmenter pour un usage intensif)MoyenIntégrée à l'image ; sa modification exige un nouveau build.

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 à Nextcloud, partagée avec la variante Cloud Run, est décrite dans Nextcloud_Common.

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