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 à kubectl sur le cluster k8s-cedille-production-v2 pour debug au besoin.

Créer un site WordPress

Aller dans le repo GitHub:

k8s-cedille-production-v2

Ouvrir l’onglet:

Actions

Sélectionner le workflow:

Create WordPress site

Cliquer sur:

Run workflow

Remplir les champs principaux:

nom_club: mon-club

domaine: mon-club.prodv2.cedille.club

Règles importantes:

  • nom_club doit ê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-club

  • Exemple 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-club

Puis 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.yaml

Vé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-wordpress

Attendre que l’application soit synchronisée.

États attendus:

Sync Status: Synced

Health: Healthy

Pendant le démarrage, il est normal de voir temporairement:

Progressing

Vérifier avec kubectl

Exporter le kubeconfig au besoin:

export KUBECONFIG=~/Downloads/k8s-cedille-production-v2-kubeconfig.yaml

Vérifier les pods:

kubectl -n mon-club-wordpress get pods

Résultat attendu:

mysql-0                      1/1     Running

wordpress-xxxxxxxxxx-xxxxx   1/1     Running

Vérifier l’ingress Contour, le certificat TLS et les secrets:

kubectl -n mon-club-wordpress get httpproxy,certificate,secret

Ré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-tls

Tester le site:

curl -I https://mon-club.prodv2.cedille.club

Résultat attendu:

HTTP/2 200

Connexion à WordPress

URL d’administration:

https://mon-club.prodv2.cedille.club/wp-admin

Nom d’utilisateur par défaut:

admin

Récupérer le mot de passe admin:

kubectl -n mon-club-wordpress get secret wordpress-secret \
  -o jsonpath='{.data.WORDPRESS_ADMIN_PASSWORD}' | base64 -d; echo

Se 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.club

Debug rapide

Voir les pods:

kubectl -n mon-club-wordpress get pods

Voir les événements:

kubectl -n mon-club-wordpress get events --sort-by=.lastTimestamp | tail -n 80

Décrire MySQL:

kubectl -n mon-club-wordpress describe pod mysql-0

Décrire WordPress:

kubectl -n mon-club-wordpress describe pod -l app.kubernetes.io/name=wordpress

Voir les logs WordPress:

kubectl -n mon-club-wordpress logs deploy/wordpress

Voir les logs de l’init container WordPress:

kubectl -n mon-club-wordpress logs deploy/wordpress -c wordpress-install

Voir les logs MySQL:

kubectl -n mon-club-wordpress logs mysql-0

Problèmes fréquents

Le pod indique secret "wordpress-secret" not found

Vérifier les ressources Vault:

kubectl -n mon-club-wordpress get randomsecret,vaultsecret,secret

Vérifier que Vault fonctionne:

kubectl -n vault get pods

Le 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 80

Ca 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,certificate

Vé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; echo

L’utilisateur par défaut est:

admin

Supprimer 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.