ClassicPress sur GKE Autopilot
ClassicPress est un CMS gratuit, open source et orienté entreprise — un fork léger de WordPress 4.9.x qui préserve l'expérience d'édition classique (antérieure à Gutenberg), avec extensions, thèmes, médiathèque et API REST. Ce module déploie ClassicPress sur GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.
Ce guide se concentre sur les services cloud utilisés par ClassicPress 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, 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
ClassicPress s'exécute sous la forme d'une unique charge de travail web PHP/Apache, construite à partir d'une image personnalisée légère
FROM classicpress/classicpress. Le déploiement assemble un ensemble ciblé de
services Google Cloud :
| Fonctionnalité | Service Google Cloud | Remarques |
|---|---|---|
| Calcul | GKE Autopilot | Pod PHP/Apache sur le port 80, 1 vCPU / 2 GiB par défaut |
| Forme de la charge de travail | StatefulSet Kubernetes + PVC en mode bloc | stateful_pvc_enabled = true résout automatiquement workload_type en StatefulSet ; un PVC standard-rwo (SSD) de 10Gi est monté sur /var/www/html — toute l'installation ClassicPress (code, extensions, thèmes, wp-content/uploads) réside sur ce volume propre à chaque pod |
| Base de données | Cloud SQL for MySQL 8.0 | Fixe — ClassicPress_Common code en dur database_type = "MYSQL_8_0" |
| Persistance des fichiers (secondaire) | Cloud Filestore (NFS) | Monté sur /var/www/html/wp-content par défaut (enable_nfs = true) — un sous-chemin du PVC du StatefulSet ci-dessous ; c'est le mécanisme confirmé de persistance des uploads/extensions/thèmes (voir la section 3) |
| Stockage d'objets | Cloud Storage | Un bucket classicpress-uploads est provisionné automatiquement mais n'est pas monté dans le pod par défaut |
| Secrets | Secret Manager | CLASSICPRESS_SALT_SEED généré automatiquement (dont dérivent les 8 clés/sels d'authentification de type WordPress) ; mot de passe de la base de données |
| Entrée | Cloud Load Balancing | LoadBalancer externe avec une IP statique réservée ; domaine personnalisé + certificat géré activés par défaut |
Valeurs par défaut judicieuses à connaître d'emblée :
- MySQL 8.0 est obligatoire et codé en dur. Le
configdeClassicPress_Commondéfinit directementdatabase_type = "MYSQL_8_0"; la variabledatabase_typede la variante (par défautnull) ne prend effet que si elle est explicitement surchargée, et le faire casse le jobdb-initet le point d'entrée propres à MySQL. Laissez-la ànull. - Build personnalisé, pas d'image préconstruite.
container_image_sourcevaut par défaut"custom"— Cloud Build produit une image légèreFROM classicpress/classicpressqui greffe une cale (shim) de point d'entrée faisant correspondre les variablesDB_*injectées par le socle auxCLASSICPRESS_DB_*de ClassicPress et dérivant des sels d'authentification stables. L'image amont standard n'est jamais déployée directement. - Cloud SQL est joint via le sidecar Auth Proxy sur l'interface loopback. La variante définit
DB_HOST = 127.0.0.1; un sidecar cloud-sql-proxy (enable_cloudsql_volume = true) écoute sur127.0.0.1:3306, et le point d'entrée fait correspondre les valeursDB_*injectées àCLASSICPRESS_DB_*(TCP, aucun SSL nécessaire pour MySQL). - Un seul réplica, StatefulSet par défaut.
min_instance_count = 1,max_instance_count = 1. Chaque pod obtient son propre PVC viastateful_pvc_enabled = true(par défaut) ; dépasser 1 réplica donnerait donc à chaque pod une copie distincte et non synchronisée de l'installation plutôt qu'une copie partagée. - NFS est également activé par défaut (
enable_nfs = true, monté sur/var/www/html/wp-content— un sous-répertoire du point de montage du PVC du StatefulSet ci-dessous). ClassicPress lit et écrit les médias téléversés, les extensions et les thèmes souswp-content, et la logique de copie au premier démarrage du point d'entrée amont ignore explicitement un répertoirewp-contentexistant ; ce montage est donc un véritable chemin de persistance confirmé pour ces données — et non un stockage superflu ou inutilisé. Voir le tableau des pièges. - Pas d'installation automatique — la première connexion est manuelle.
ClassicPress_Commonne génère aucun secret de mot de passe administrateur et ne définit aucun indicateur d'installation automatique. ClassicPress crée son schéma et son compte administrateur via son propre installateur web de premier lancement, une fois quedb-inita provisionné la base de données vide. CLASSICPRESS_SALT_SEEDest généré automatiquement et stocké dans Secret Manager ; le point d'entrée en dérive de façon déterministe les 8 valeursAUTH_KEY/SALTde type WordPress, si bien que les cookies et les sessions survivent aux redémarrages de pod.- La sonde de démarrage est généreuse (TCP, 20 tentatives) pour laisser au point d'entrée propre à
l'image amont le temps de remplir le PVC
/var/www/htmlvide au premier démarrage.
2. Services Google Cloud et comment les explorer
Toutes les commandes supposent que vous avez exécuté
gcloud container clusters get-credentials <cluster> --region "$REGION" --project "$PROJECT"
et que PROJECT, REGION et NAMESPACE sont définis. L'espace de noms et les autres
identifiants sont indiqués dans les sorties du déploiement.
A. GKE Autopilot — la charge de travail ClassicPress
ClassicPress s'exécute en tant que StatefulSet (sélectionné automatiquement parce que stateful_pvc_enabled
vaut true par défaut), planifié sur Autopilot, qui facture le CPU et la mémoire que le pod
demande réellement. L'unique réplica possède un PVC standard-rwo (SSD) dédié.
- Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail ClassicPress pour voir les pods, les révisions et les événements. Kubernetes Engine → Services & Ingress affiche l'IP externe.
- CLI :
kubectl get statefulset,pods,svc -n "$NAMESPACE" --selector 'app~classicpress' 2>/dev/null || \
kubectl get statefulset,pods,svc -n "$NAMESPACE"
kubectl logs -n "$NAMESPACE" statefulset/<service-name> --tail=100
kubectl describe pod -n "$NAMESPACE" -l app=<service-name>
Consultez App_GKE pour savoir comment Autopilot, la mise à l'échelle et le type de charge de travail (Deployment ou StatefulSet) sont gérés, et le groupe 7 pour les mécanismes StatefulSet/PVC.
B. Cloud SQL for MySQL 8.0
ClassicPress stocke toutes les données applicatives (articles, pages, utilisateurs, options, paramètres
des extensions/thèmes) dans une instance gérée Cloud SQL for MySQL 8.0. Les pods y accèdent via le
sidecar Cloud SQL Auth Proxy sur 127.0.0.1:3306 ; aucune IP publique n'est exposée. Au
premier déploiement, le job db-init crée la base de données applicative, l'utilisateur et les droits,
vérifie que l'utilisateur applicatif peut se connecter, puis arrête le sidecar.
- Console : SQL → sélectionnez l'instance pour voir les connexions, sauvegardes, flags et 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> --database=<db-name> --project "$PROJECT"
Le nom de l'instance, la base de données, l'utilisateur et le secret Secret Manager contenant le mot de passe figurent tous dans les sorties. Consultez App_GKE pour le modèle de connexion, les sauvegardes automatiques et la rotation des mots de passe.
C. Stockage — PVC du StatefulSet, NFS et Cloud Storage
Trois mécanismes de stockage distincts sont présents. Le PVC du StatefulSet (10Gi,
standard-rwo, monté sur /var/www/html) contient toute l'installation ClassicPress,
y compris les médias téléversés — la persistance de toute la racine web tant que le pod
conserve son PVC. NFS (Cloud Filestore) est monté séparément sur
/var/www/html/wp-content (enable_nfs = true), un sous-répertoire du point de montage du PVC
ci-dessus ; la logique de copie du point d'entrée amont ignore explicitement un répertoire wp-content
existant, il s'agit donc d'un véritable chemin de persistance confirmé, spécifiquement pour les uploads/extensions/thèmes
— et non d'un montage inutilisé (voir le tableau des pièges). Un bucket Cloud Storage
(suffixe classicpress-uploads) est également provisionné, mais il n'est pas relié au pod
comme montage gcs_volumes par défaut ; ajoutez une entrée à gcs_volumes pour l'utiliser.
- Console : Kubernetes Engine → Storage → PersistentVolumeClaims ; Filestore → Instances ; Cloud Storage → Buckets.
- CLI :
kubectl get pvc -n "$NAMESPACE"
gcloud filestore instances list --project "$PROJECT"
gcloud storage buckets list --project "$PROJECT" --filter="name~classicpress-uploads"
Consultez les groupes 7, 13 et 14 d'App_GKE pour le cycle de vie des PVC, la découverte NFS et les mécanismes de montage GCS Fuse.
D. Secret Manager
Un secret propre à ClassicPress est généré automatiquement et stocké dans Secret
Manager : CLASSICPRESS_SALT_SEED, une graine aléatoire de 64 caractères dont le
point d'entrée dérive les 8 valeurs de type WordPress AUTH_KEY/SECURE_AUTH_KEY/
LOGGED_IN_KEY/NONCE_KEY et leurs valeurs SALT correspondantes (SHA-256 de la graine
plus un suffixe fixe propre à chaque clé). Le mot de passe de la base de données est géré séparément par le
socle. Sur GKE, les secrets sont projetés dans les pods via le pilote Secret Store CSI.
- Console : Security → Secret Manager.
- CLI :
gcloud secrets list --project "$PROJECT" --filter="name~classicpress"
gcloud secrets versions access latest --secret=<db-password-secret-name> --project "$PROJECT"
Consultez App_GKE pour l'intégration Secret Store CSI et la rotation.
E. Réseau et entrée
Par défaut, la charge de travail est exposée via une IP externe Cloud Load Balancing
(service_type = LoadBalancer, reserve_static_ip = true afin que l'adresse survive aux
redéploiements), et enable_custom_domain = true provisionne une ressource Ingress prête
pour un certificat géré par Google dès que application_domains est renseigné.
- Console : Network services → Load balancing ; VPC network → IP addresses.
- CLI :
kubectl get svc,ingress -n "$NAMESPACE"
gcloud compute addresses list --project "$PROJECT"
Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les détails sur l'IP statique.
F. Cloud Logging et Monitoring
Les sorties stdout/stderr des pods sont envoyées à 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 ClassicPress
- Configuration de la base de données au premier déploiement. Le job
db-initexécutedb-init.shavecmysql:8.0-debian. Il attend la connectivité TCP (ou un socket Cloud SQL), crée de manière idempotente la base de données applicative, l'utilisateur et les droits, vérifie que l'utilisateur applicatif peut se connecter, puis arrête proprement le sidecar Cloud SQL Auth Proxy (POST /quitquitquit, avec repli surSIGKILL). Le job peut être réexécuté sans risque (execute_on_apply = true,max_retries = 3). - Pas de job de migration distinct — installation manuelle au premier lancement. Il n'existe aucun
indicateur d'installation automatique pour ClassicPress. Une fois que
db-inita provisionné la base de données vide, ClassicPress crée son propre schéma et son compte administrateur via l'installateur web de premier lancement (/wp-admin/install.phpdans l'image amont). Ouvrez l'URL du service après le premier déploiement et terminez l'installateur pour définir le nom d'utilisateur, le mot de passe et l'adresse e-mail de l'administrateur — il n'existe aucun secret de mot de passe administrateur généré. - Correspondance des variables d'environnement de base de données sur loopback. Le socle injecte
DB_HOST = 127.0.0.1(le sidecar proxy),DB_PORT,DB_NAME,DB_USER,DB_PASSWORD; ClassicPress litCLASSICPRESS_DB_*. Leentrypoint.shgreffé construitCLASSICPRESS_DB_HOSTsous la formehost:port(oulocalhost:<socket>si un répertoire de socket Cloud SQL est trouvé) et fait correspondre le reste, avant de passer la main audocker-entrypoint.shamont. - Les clés et sels d'authentification sont dérivés, pas stockés individuellement.
CLASSICPRESS_SALT_SEEDest le seul secret généré ; le point d'entrée calcule les 8 valeursCLASSICPRESS_AUTH_KEY/..._SALTsous la formesha256(seed-<key-name>), si bien que chaque redémarrage et chaque pod (si vous montez un jour en charge horizontalement) s'accordent sur les mêmes valeurs sans persister l'état dewp-config.php. - L'installation elle-même réside sur le PVC du StatefulSet. Le
docker-entrypoint.shamont écritwp-config.phpet copie l'application ClassicPress dans/var/www/htmlau premier démarrage — qui, dans ce module, est un PVC en mode blocstandard-rwode 10Gi et non un stockage de conteneur éphémère ; l'installation (extensions, thèmes etwp-content/uploads) survit donc aux redémarrages et aux replanifications de pod. - Le chemin de montage NFS est le mécanisme de persistance confirmé pour
wp-content.enable_nfs = truemonte Filestore sur/var/www/html/wp-contentpar défaut — un sous-répertoire du PVC du StatefulSet monté sur/var/www/html. ClassicPress (un fork de WordPress) lit et écrit les médias téléversés, les extensions et les thèmes souswp-content, et la logique de copie au premier démarrage du point d'entrée amont ignore explicitement un répertoirewp-contentexistant ; y monter NFS est donc sûr et efficace. Dans ce module, le PVC persiste déjà toute la racine web pour chaque pod ; le montage NFS est donc surtout utile sistateful_pvc_enabledest un jour désactivé ou si une future mise à l'échelle multi-réplicas doit partagerwp-contententre les pods (le PVC est propre à chaque pod, NFS est partagé). - Redis est facultatif et désactivé par défaut. Lorsque
enable_redis = true, laisserredis_hostvide permet à l'injectionREDIS_HOSTpropre au socle (l'IP Redis de la VM NFS partagée lorsqueenable_nfs = true) de s'appliquer ; définirredis_hostexplicitement fait pointer ClassicPress vers une instance Redis/Memorystore externe. - Chemins de santé. La sonde de démarrage est TCP sur le port 80 avec un
failure_threshold = 20généreux (le premier démarrage copie toute l'application sur le PVC vide, ce qui peut prendre du temps) ; la sonde de vivacité est HTTPGET /avec un délai initial de 300 secondes — un 200 (site installé) comme une redirection 302 vers l'installateur (site neuf) sont considérés comme sains. - Inspecter le job d'initialisation et la configuration en cours d'exécution :
kubectl get jobs -n "$NAMESPACE"
kubectl logs -n "$NAMESPACE" job/<db-init-job-name>
kubectl exec -n "$NAMESPACE" statefulset/<service-name> -- env | grep CLASSICPRESS_DB
4. Variables de configuration
Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement (selon leur
balise {{UIMeta group=N}}, et non selon les commentaires de section du fichier .tf, qui sont
parfois désynchronisés des balises). Seuls les paramètres propres à ClassicPress 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 3 — Identité de l'application
| Variable | Valeur par défaut | Description |
|---|---|---|
application_name | classicpress | Nom de base des ressources. Ne pas modifier après le premier déploiement. |
application_version | latest | Correspond au tag de l'image classicpress/classicpress. Les tags sont qualifiés par la version de PHP (php8.3-apache, php8.4-apache), et non par la version de l'application ; latest est résolu en un tag épinglé qualifié par PHP au moment du build via l'argument de build propre à l'application CLASSICPRESS_VERSION (l'argument de build générique APP_VERSION injecté par le socle l'écraserait sinon silencieusement avec le tag littéral et inexistant "latest"). |
Groupe 4 — Exécution et mise à l'échelle
| Variable | Valeur par défaut | Description |
|---|---|---|
container_image_source | custom | Construit l'image légère FROM classicpress/classicpress avec la cale de point d'entrée greffée ; obligatoire — l'image standard ne peut pas faire correspondre DB_* d'elle-même. |
cpu_limit | 1000m | Limite de CPU du conteneur ClassicPress. À augmenter pour les sites à fort trafic ou les extensions lourdes. |
memory_limit | 2Gi | Limite de mémoire. Les applications de la famille WordPress nécessitent généralement ≥512Mi ; davantage pour les grandes médiathèques. |
min_instance_count / max_instance_count | 1 / 1 | Gardez les deux à 1 — le PVC du StatefulSet est propre à chaque pod et non partagé. |
container_port | 80 | ClassicPress s'exécute sur Apache, port 80. |
php_memory_limit | 512M | Limite de mémoire PHP ; doit être ≤ memory_limit. |
upload_max_filesize / post_max_size | 64M | Taille maximale d'upload / de POST ; gardez post_max_size ≥ upload_max_filesize. |
enable_cloudsql_volume | true | Sidecar Auth Proxy (loopback) — obligatoire sur GKE. |
Groupe 6 — Backend GKE et cluster
| Variable | Valeur par défaut | Description |
|---|---|---|
service_type | LoadBalancer | IP externe pour l'interface ClassicPress. |
workload_type | null → StatefulSet | Résolu automatiquement parce que stateful_pvc_enabled = true. |
session_affinity | ClientIP | Routage persistant afin qu'un client atteigne toujours le même pod. |
Groupe 7 — StatefulSet / PVC
| Variable | Valeur par défaut | Description |
|---|---|---|
stateful_pvc_enabled | true | ClassicPress stocke toute son installation sous /var/www/html ; l'activer résout automatiquement workload_type en StatefulSet. |
stateful_pvc_size | 10Gi | Taille du PVC par pod. À augmenter pour les grandes médiathèques. |
stateful_pvc_mount_path | /var/www/html | Emplacement de l'installation ClassicPress (code + wp-content/uploads). |
stateful_pvc_storage_class | standard-rwo | Balanced PD sur SSD ; consomme le quota régional SSD_TOTAL_GB. Surchargez avec standard (HDD) si le quota est limité. |
Groupe 10 — Observabilité et santé
| Variable | Valeur par défaut | Description |
|---|---|---|
startup_probe | { type: TCP, path: "/", failure_threshold: 20, period_seconds: 15 } | Seuil généreux — le premier démarrage remplit le PVC vide avec l'application complète. |
liveness_probe | { type: HTTP, path: "/", initial_delay_seconds: 300 } | Un 200 comme un 302 vers l'installateur sont considérés comme sains. |
Groupe 13 — Système de fichiers (NFS)
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_nfs | true | Provisionne un stockage partagé adossé à Filestore, monté sur nfs_mount_path — le mécanisme de persistance confirmé pour les uploads/extensions/thèmes ; voir la section 3. |
nfs_mount_path | /var/www/html/wp-content | Chemin de montage du partage NFS dans le conteneur, un sous-répertoire du PVC du StatefulSet. La logique de copie du point d'entrée amont ignore un répertoire wp-content existant ; y monter le partage est donc sûr. |
Groupe 15 — Cache Redis
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_redis | false | Active le backend de cache d'objets de type WordPress de ClassicPress. |
redis_host | "" | Laissez vide pour vous rabattre sur le REDIS_HOST propre au socle (l'IP Redis de la VM NFS lorsque enable_nfs = true) ; définissez-le explicitement pour utiliser une instance Redis/Memorystore externe. |
Groupe 16 — Backend de base de données
| Variable | Valeur par défaut | Description |
|---|---|---|
database_type | null → MYSQL_8_0 | Codé en dur dans ClassicPress_Common ; laissez null. Le surcharger casse le job db-init et le point d'entrée propres à MySQL. |
application_database_name | classicpress | Nom de la base de données. Immuable après le premier déploiement. |
application_database_user | classicpress | Utilisateur de la base de données applicative ; mot de passe généré automatiquement dans Secret Manager. |
Groupe 19 — Domaine personnalisé, IP statique et réseau
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_custom_domain | true | Provisionne un Ingress prêt pour un certificat géré dès que application_domains est défini. |
reserve_static_ip | true | IP externe stable d'un redéploiement à l'autre. |
application_domains | [] | Noms d'hôte personnalisés — vide par défaut ; ajoutez-en un pour activer le certificat géré. |
Toutes les autres entrées suivent le comportement standard d'App_GKE.
5. Sorties
Ces valeurs sont renvoyées à l'issue d'un déploiement réussi et constituent le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.
| Sortie | Description |
|---|---|
service_name | Nom du Service Kubernetes. |
namespace | Espace de noms dans lequel s'exécute la charge de travail. |
service_cluster_ip | ClusterIP interne au cluster. |
stage_service_cluster_ips | Table des ClusterIP des services propres à chaque étape. |
service_external_ip | IP externe du LoadBalancer (lorsqu'une IP statique est réservée). |
service_url | URL permettant d'accéder à ClassicPress. |
database_instance_name | Nom de l'instance Cloud SQL. |
database_name / database_user | Nom / utilisateur de la base de données applicative. |
database_password_secret | Secret Secret Manager contenant le mot de passe de la base de données. |
database_host / database_port | Point de terminaison de la base de données (127.0.0.1 via l'Auth Proxy) / port. |
storage_buckets | Buckets Cloud Storage créés (y compris classicpress-uploads). |
network_name / network_exists / regions | Réseau VPC, présence, régions disponibles. |
container_image / container_registry | Image déployée et dépôt Artifact Registry. |
monitoring_enabled / monitoring_notification_channels | État de la surveillance et canaux. |
initialization_jobs / db_import_job | Noms des jobs de configuration (db-init) et d'import (facultatif). |
deployment_id / tenant_id / resource_prefix | Identifiants de nommage. |
project_id / project_number | Identifiants du projet. |
cicd_enabled / cicd_configuration | État et détails du CI/CD (dépôt, déclencheur, registre). |
github_repository_url / github_repository_owner / github_repository_name | Détails GitHub du CI/CD. |
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_id | Registre et déclencheur de build. |
kubernetes_ready | Indique 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).
Validation héritée au moment du plan. Ce module transmet sa configuration au moteur du socle App_GKE, qui valide les valeurs et leurs combinaisons au moment du plan — un
StatefulSetimposé en même temps qu'un paramètre sans état, IAP sans identités autorisées, desquota_memory_*fournis sous forme d'entiers bruts, uncontainer_port/backup_retention_dayshors limites. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource ; la plupart des erreurs ci-dessous sont donc détectées en amont plutôt qu'à l'apply ou à l'exécution. ClassicPress exécute également ses propres préconditions (validation.tf) pourupload_max_filesize ≤ post_max_size,min_instance_count ≤ max_instance_count, Redis sans source d'hôte, IAP sans identifiants OAuth, etenable_cloudsql_volumeavecdatabase_type = "NONE".
| Paramètre | Valeur judicieuse | Risque | Conséquence en cas d'erreur |
|---|---|---|---|
database_type | null (→ MYSQL_8_0) | Critique | Le job db-init et le point d'entrée de ClassicPress_Common sont propres à MySQL ; les surcharger avec un moteur Postgres/SQL Server casse les deux. |
application_database_name / application_database_user | À définir une seule fois | Critique | Immuables après le premier déploiement ; les renommer recrée la base de données/l'utilisateur et rend orphelines toutes les données. |
CLASSICPRESS_SALT_SEED (généré automatiquement) | Ne jamais modifier | Critique | Modifier la graine après le premier démarrage invalide tous les cookies signés et toutes les sessions connectées. |
stateful_pvc_size / stateful_pvc_mount_path | 10Gi / /var/www/html | Critique | Ce PVC contient toute l'installation (code + uploads) — le réduire ou perdre le PVC détruit le site ; le chemin de montage doit correspondre à l'emplacement où écrit le point d'entrée de ClassicPress. |
max_instance_count | 1 | Élevé | Chaque pod du StatefulSet obtient son propre PVC ; dépasser 1 donne à chaque réplica une copie distincte et divergente du site plutôt qu'une copie partagée. |
enable_cloudsql_volume | true | Élevé | Le sidecar Auth Proxy sur 127.0.0.1:3306 est nécessaire à la connectivité à la base de données sur GKE. |
enable_nfs | true | Faible | Provisionne et facture une instance Filestore montée sur /var/www/html/wp-content — le mécanisme confirmé de persistance des uploads/extensions/thèmes (voir la section 3), en plus de la persistance par pod du PVC du StatefulSet pour le reste de la racine web. |
stateful_pvc_storage_class | standard-rwo (SSD) | Moyen | Consomme le quota régional serré SSD_TOTAL_GB. Surchargez avec standard (HDD pd-standard) sur les projets dont le quota est limité — suffisant pour une charge de travail PHP/MySQL à faible IOPS. |
| Configuration de l'administrateur au premier lancement | Terminer /wp-admin/install.php rapidement après le déploiement | Moyen | Tant que l'installateur n'a pas été exécuté, le site n'a ni schéma ni compte administrateur — il n'existe aucun secret de mot de passe administrateur généré permettant de récupérer l'accès. |
memory_limit | 2Gi | Moyen | En dessous d'environ 512Mi, le pod PHP/Apache risque un OOM sous charge ou avec des extensions plus lourdes. |
quota_memory_requests / _limits | unités binaires (4Gi, 8192Mi) | Critique | Les entiers bruts sont interprétés comme des octets et bloquent toute planification de pod dans l'espace de noms. |
reserve_static_ip | true | Moyen | Sans elle, l'IP externe peut changer d'un redéploiement à l'autre, ce qui casse le DNS et toute URL de site codée en dur. |
backup_retention_days | 7 (à augmenter en production) | Moyen | Trop court pour une conservation conforme aux exigences réglementaires. |
Pour le comportement du socle mentionné 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 à ClassicPress, partagée avec la variante Cloud Run, est
décrite dans le module ClassicPress_Common (aucun guide autonome ClassicPress_Common.md
n'existe encore dans cette documentation).
Guides associés
- Lab pratique : ClassicPress sur GKE Autopilot — déployez-le étape par étape, avec les écrans de la console et les commandes à chaque étape.
- ClassicPress sur Google Cloud Run — la même application sur Cloud Run, lorsque vous avez besoin de l'autre cible de déploiement.
- ClassicPress Common — Configuration applicative partagée — la configuration partagée par les deux cibles de déploiement.
Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.