Déployer un site WordPress pour un club
Cette procédure permet de créer un nouveau site WordPress géré par CEDILLE pour un club étudiant. Le workflow génère une pull request Kubernetes, puis Argo CD déploie automatiquement le site après le merge.
Prérequis
Avoir accès au repo
k8s-cedille-production-v2.Avoir les droits pour lancer les GitHub Actions du repo.
Avoir les droits pour merger une pull request.
Avoir accès à Argo CD pour vérifier le déploiement.
Avoir accès à
kubectlsur le clusterk8s-cedille-production-v2pour debug au besoin.
Créer un site WordPress
Aller dans le repo GitHub:
k8s-cedille-production-v2Ouvrir l’onglet:
ActionsSélectionner le workflow:
Create WordPress siteCliquer sur:
Run workflowRemplir les champs principaux:
nom_club: mon-club
domaine: mon-club.prodv2.cedille.clubRègles importantes:
nom_clubdoit être un slug DNS: lettres minuscules, chiffres et tirets seulement.Ne pas mettre de point dans
nom_club.Le domaine complet va dans
domaine.Exemple valide:
mon-clubExemple invalide:
mon-club.prodv2.cedille.club
Pour un premier déploiement, laisser les valeurs d’images et de storage par défaut.
Pull Request générée
Le workflow crée une branche du type:
wordpress/mon-clubPuis il ouvre une pull request contenant les fichiers du nouveau site:
apps/mon-club/wordpress/prod/configMap.yaml
apps/mon-club/wordpress/prod/ingress.yaml
apps/mon-club/wordpress/prod/kustomization.yaml
apps/mon-club/wordpress/prod/vault-secret.yaml
apps/mon-club/wordpress/mon-club-wordpress.argoapp.yamlVérifier que:
Le namespace attendu est
mon-club-wordpress.Le domaine est le bon.
Le nom de l’application Argo CD est
mon-club-wordpress.Les checks de la PR passent.
Si tout est bon, merger la PR dans main.
Déploiement Argo CD
Après le merge, Argo CD détecte la nouvelle application.
Dans Argo CD, chercher l’application:
mon-club-wordpressAttendre que l’application soit synchronisée.
États attendus:
Sync Status: Synced
Health: HealthyPendant le démarrage, il est normal de voir temporairement:
ProgressingVérifier avec kubectl
Exporter le kubeconfig au besoin:
export KUBECONFIG=~/Downloads/k8s-cedille-production-v2-kubeconfig.yamlVérifier les pods:
kubectl -n mon-club-wordpress get podsRésultat attendu:
mysql-0 1/1 Running
wordpress-xxxxxxxxxx-xxxxx 1/1 RunningVérifier l’ingress Contour, le certificat TLS et les secrets:
kubectl -n mon-club-wordpress get httpproxy,certificate,secretRésultat attendu:
httpproxy.projectcontour.io/wordpress mon-club.prodv2.cedille.club wordpress-tls valid
certificate.cert-manager.io/wordpress-tls True wordpress-tls
secret/wordpress-secret
secret/wordpress-tlsTester le site:
curl -I https://mon-club.prodv2.cedille.clubRésultat attendu:
HTTP/2 200Connexion à WordPress
URL d’administration:
https://mon-club.prodv2.cedille.club/wp-adminNom d’utilisateur par défaut:
adminRécupérer le mot de passe admin:
kubectl -n mon-club-wordpress get secret wordpress-secret \
-o jsonpath='{.data.WORDPRESS_ADMIN_PASSWORD}' | base64 -d; echoSe connecter avec:
Username: admin
Password: <mot de passe généré>Après la première connexion, il est recommandé de changer le mot de passe admin dans WordPress.
Ce qui est créé
Pour chaque club, le workflow crée:
Une application Argo CD dédiée.
Un namespace Kubernetes dédié.
Un déploiement WordPress.
Une base de données MySQL.
Un PVC pour le contenu WordPress.
Un PVC pour les données MySQL.
Un certificat TLS avec cert-manager.
Un HTTPProxy Contour.
Des secrets générés automatiquement via Vault.
Exemple pour mon-club:
Application Argo CD: mon-club-wordpress
Namespace: mon-club-wordpress
Domaine: mon-club.prodv2.cedille.clubDebug rapide
Voir les pods:
kubectl -n mon-club-wordpress get podsVoir les événements:
kubectl -n mon-club-wordpress get events --sort-by=.lastTimestamp | tail -n 80Décrire MySQL:
kubectl -n mon-club-wordpress describe pod mysql-0Décrire WordPress:
kubectl -n mon-club-wordpress describe pod -l app.kubernetes.io/name=wordpressVoir les logs WordPress:
kubectl -n mon-club-wordpress logs deploy/wordpressVoir les logs de l’init container WordPress:
kubectl -n mon-club-wordpress logs deploy/wordpress -c wordpress-installVoir les logs MySQL:
kubectl -n mon-club-wordpress logs mysql-0Problèmes fréquents
Le pod indique secret "wordpress-secret" not found
Vérifier les ressources Vault:
kubectl -n mon-club-wordpress get randomsecret,vaultsecret,secretVérifier que Vault fonctionne:
kubectl -n vault get podsLe pod reste en ContainerCreating
Vérifier les événements:
kubectl -n mon-club-wordpress describe pod mysql-0
kubectl -n mon-club-wordpress get events --sort-by=.lastTimestamp | tail -n 80Ca peut indiquer un problème de stockage Ceph/CSI.
Vérifier le stockage:
kubectl get storageclass
kubectl get pods -A | grep -Ei 'rook|ceph|csi'Le site ne répond pas en HTTPS
Vérifier le HTTPProxy et le certificat:
kubectl -n mon-club-wordpress get httpproxy,certificateVérifier que le domaine pointe bien vers l’ingress prodv2.
WordPress démarre mais l’admin ne fonctionne pas
Vérifier le mot de passe généré:
kubectl -n mon-club-wordpress get secret wordpress-secret \
-o jsonpath='{.data.WORDPRESS_ADMIN_PASSWORD}' | base64 -d; echoL’utilisateur par défaut est:
adminSupprimer un site de test
Pour supprimer un site, retirer l’application générée du repo GitOps, puis merger la PR.
Exemple:
apps/mon-club/wordpress/Après le merge, vérifier dans Argo CD que l’application est supprimée ou désynchronisée selon la configuration.
Attention: la suppression peut aussi supprimer les volumes persistants selon la politique de rétention configurée. Ne pas supprimer un site réel sans confirmer avec le club.