From 15cd4620781b6928451c828f0be0bb0e181cb6f9 Mon Sep 17 00:00:00 2001 From: pyayi Date: Mon, 2 Mar 2026 15:27:21 +0000 Subject: [PATCH] Actualiser Guide-migration-moodle-rber-v2 --- Guide-migration-moodle-rber-v2 | 390 ++++++++++++++++++--------------- 1 file changed, 218 insertions(+), 172 deletions(-) diff --git a/Guide-migration-moodle-rber-v2 b/Guide-migration-moodle-rber-v2 index 780968d..453c117 100644 --- a/Guide-migration-moodle-rber-v2 +++ b/Guide-migration-moodle-rber-v2 @@ -67,41 +67,42 @@ rsync --version ## 2. Phase 1 : Audit de l'environnement source -### 2.1 Informations système +> **Note :** Les Moodle sources sont des pods Kubernetes. Toutes les commandes utilisent `kubectl exec`. + +### 2.1 Identifier le pod source ```bash -# Connexion au serveur source -ssh admin@elearning.UNIVERSITE.bj +# Variables - ADAPTER selon l'université et le namespace source +SOURCE_NS="moodle-source" # Namespace où se trouve le Moodle actuel +SOURCE_DEPLOY="moodle" # Nom du deployment -# Version système -cat /etc/os-release -uname -a +# Vérifier le pod +kubectl get pods -n ${SOURCE_NS} # Version Moodle -sudo -u www-data php /var/www/moodle/admin/cli/version.php +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php /bitnami/moodle/admin/cli/version.php # Version PHP et extensions -php -v -php -m | grep -E "curl|gd|intl|mbstring|pgsql|mysqli|xml|zip|soap|ldap" +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php -v +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php -m | grep -E "curl|gd|intl|mbstring|pgsql|mysqli|xml|zip|soap|ldap" ``` ### 2.2 Audit base de données -**Pour MySQL/MariaDB :** ```bash -mysql -u root -p -e " -SELECT - table_schema AS 'Database', - ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size_MB' -FROM information_schema.tables -WHERE table_schema = 'moodle' -GROUP BY table_schema; -" -``` +# Identifier le cluster PostgreSQL source +kubectl get cluster -n ${SOURCE_NS} -**Pour PostgreSQL :** -```bash -sudo -u postgres psql -d moodle -c " +# Ou se connecter via le pod Moodle +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php -r " +require('/bitnami/moodle/config.php'); +global \$DB; +echo 'Host: ' . \$CFG->dbhost . PHP_EOL; +echo 'Database: ' . \$CFG->dbname . PHP_EOL; +" + +# Taille de la base (si accès direct au pod PostgreSQL) +kubectl exec -n ${SOURCE_NS} -- psql -U postgres -d moodle -c " SELECT pg_size_pretty(pg_database_size('moodle')) AS size; " ``` @@ -109,12 +110,13 @@ SELECT pg_size_pretty(pg_database_size('moodle')) AS size; ### 2.3 Statistiques Moodle ```bash -# Remplacer par la commande appropriée selon le type de BDD -mysql -u root -p moodle -e " -SELECT 'Utilisateurs' AS metric, COUNT(*) AS value FROM mdl_user WHERE deleted=0 -UNION ALL SELECT 'Cours', COUNT(*) FROM mdl_course WHERE id > 1 -UNION ALL SELECT 'Fichiers', COUNT(*) FROM mdl_files WHERE filename != '.' -UNION ALL SELECT 'Devoirs', COUNT(*) FROM mdl_assign; +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php -r " +require('/bitnami/moodle/config.php'); +global \$DB; +echo 'Utilisateurs actifs: ' . \$DB->count_records('user', ['deleted' => 0]) . PHP_EOL; +echo 'Cours: ' . (\$DB->count_records('course') - 1) . PHP_EOL; +echo 'Fichiers: ' . \$DB->count_records_select('files', \"filename != '.'\") . PHP_EOL; +echo 'Devoirs: ' . \$DB->count_records('assign') . PHP_EOL; " ``` @@ -122,37 +124,36 @@ UNION ALL SELECT 'Devoirs', COUNT(*) FROM mdl_assign; ```bash # Taille totale -du -sh /var/moodledata/ +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- du -sh /bitnami/moodledata/ # Répartition -du -h --max-depth=1 /var/moodledata/ | sort -hr +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- du -h --max-depth=1 /bitnami/moodledata/ | sort -hr # Nombre de fichiers -find /var/moodledata -type f | wc -l +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- find /bitnami/moodledata -type f | wc -l ``` ### 2.5 Plugins installés ```bash # Liste des plugins -php /var/www/moodle/admin/cli/plugin_list.php > /tmp/plugins_list.txt -cat /tmp/plugins_list.txt +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php /bitnami/moodle/admin/cli/plugin_list.php # Plugins custom (local) -ls -la /var/www/moodle/local/ +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- ls -la /bitnami/moodle/local/ # Thèmes custom -ls -la /var/www/moodle/theme/ | grep -v boost | grep -v classic +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- ls -la /bitnami/moodle/theme/ | grep -v boost | grep -v classic ``` ### 2.6 Configuration actuelle ```bash -# Sauvegarder config.php -cat /var/www/moodle/config.php > /tmp/config.php.backup +# Afficher config.php +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- cat /bitnami/moodle/config.php -# Paramètres critiques à noter -grep -E "wwwroot|dataroot|dbtype|dbhost|dbname|prefix" /var/www/moodle/config.php +# Paramètres critiques +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- grep -E "wwwroot|dataroot|dbtype|dbhost|dbname|prefix" /bitnami/moodle/config.php ``` --- @@ -293,148 +294,174 @@ helm install moodle-${UNIVERSITY} bitnami/moodle \ ### 4.1 Activer le mode maintenance ```bash -# Sur le serveur source -sudo -u www-data php /var/www/moodle/admin/cli/maintenance.php --enable +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php /bitnami/moodle/admin/cli/maintenance.php --enable # Vérifier -curl -I http://elearning.UNIVERSITE.bj +curl -I https://elearning-source.rber.bj ``` ### 4.2 Dump de la base de données -**Source MySQL → Cible PostgreSQL :** +**Option A : Dump depuis le pod PostgreSQL** ```bash -# Dump MySQL -mysqldump -u root -p \ - --single-transaction \ - --quick \ - --lock-tables=false \ - --routines \ - --triggers \ - --hex-blob \ - --default-character-set=utf8mb4 \ - moodle > moodle_dump_$(date +%Y%m%d_%H%M%S).sql +# Identifier le pod PostgreSQL +PG_POD=$(kubectl get pods -n ${SOURCE_NS} -l cnpg.io/cluster= -o jsonpath='{.items[0].metadata.name}') -# Compresser -gzip moodle_dump_*.sql +# Dump +kubectl exec -n ${SOURCE_NS} ${PG_POD} -- pg_dump -U postgres -Fc moodle > moodle_dump_$(date +%Y%m%d_%H%M%S).dump + +# Vérifier +ls -lh moodle_dump_*.dump ``` -**Source PostgreSQL → Cible PostgreSQL :** +**Option B : Dump via port-forward** ```bash -sudo -u postgres pg_dump -Fc moodle > moodle_dump_$(date +%Y%m%d_%H%M%S).dump +# Port-forward +kubectl port-forward -n ${SOURCE_NS} svc/ 5432:5432 & + +# Dump +PGPASSWORD= pg_dump -h localhost -U moodle -Fc moodle > moodle_dump_$(date +%Y%m%d_%H%M%S).dump + +# Arrêter le port-forward +kill %1 ``` ### 4.3 Archiver moodledata ```bash -# Exclure cache, sessions, temp -tar -czf moodledata_backup_$(date +%Y%m%d_%H%M%S).tar.gz \ +# Créer l'archive depuis le pod source +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- tar -czf /tmp/moodledata_backup.tar.gz \ --exclude='cache/*' \ --exclude='sessions/*' \ --exclude='temp/*' \ --exclude='trashdir/*' \ --exclude='localcache/*' \ - -C /var moodledata + -C /bitnami moodledata -# Vérifier la taille +# Copier l'archive vers le poste local +kubectl cp ${SOURCE_NS}/${SOURCE_DEPLOY}:/tmp/moodledata_backup.tar.gz ./moodledata_backup_$(date +%Y%m%d_%H%M%S).tar.gz + +# Vérifier ls -lh moodledata_backup_*.tar.gz # Checksum sha256sum moodledata_backup_*.tar.gz > moodledata.sha256 + +# Nettoyer le fichier temporaire dans le pod +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- rm /tmp/moodledata_backup.tar.gz ``` -### 4.4 Sauvegarder plugins custom +**Alternative : Extraction directe (gros volumes)** ```bash -tar -czf moodle_plugins_$(date +%Y%m%d).tar.gz \ - -C /var/www/moodle \ +# Streamer directement sans fichier intermédiaire +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- tar -czf - \ + --exclude='cache/*' \ + --exclude='sessions/*' \ + --exclude='temp/*' \ + --exclude='trashdir/*' \ + --exclude='localcache/*' \ + -C /bitnami moodledata > moodledata_backup_$(date +%Y%m%d_%H%M%S).tar.gz +``` + +### 4.4 Sauvegarder plugins custom (si nécessaire) + +```bash +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- tar -czf /tmp/plugins.tar.gz \ + -C /bitnami/moodle \ local/ \ - theme/ \ - mod/ \ - blocks/ \ - auth/ + theme/ + +kubectl cp ${SOURCE_NS}/${SOURCE_DEPLOY}:/tmp/plugins.tar.gz ./moodle_plugins_$(date +%Y%m%d).tar.gz ``` --- ## 5. Phase 4 : Transfert et restauration -### 5.1 Transfert des fichiers - -**Option A : Via MinIO (recommandé pour gros volumes)** +### 5.1 Variables cibles ```bash -# Sur le serveur source +# ADAPTER selon l'université +UNIVERSITY="unstim" +TARGET_NS="moodle-${UNIVERSITY}" +TARGET_DEPLOY="moodle-${UNIVERSITY}" +``` + +### 5.2 Transfert via MinIO (recommandé) + +```bash +# Configurer MinIO mc alias set rber http://minio.rber.bj:9000 ACCESS_KEY SECRET_KEY + +# Créer le bucket mc mb rber/migrations/${UNIVERSITY} -mc cp moodle_dump_*.gz rber/migrations/${UNIVERSITY}/ + +# Upload +mc cp moodle_dump_*.dump rber/migrations/${UNIVERSITY}/ mc cp moodledata_backup_*.tar.gz rber/migrations/${UNIVERSITY}/ +mc cp moodledata.sha256 rber/migrations/${UNIVERSITY}/ + +# Vérifier +mc ls rber/migrations/${UNIVERSITY}/ ``` -**Option B : SCP direct** +### 5.3 Restaurer la base de données + +**PostgreSQL → PostgreSQL :** ```bash -scp moodle_dump_*.gz admin@10.29.112.130:/tmp/migration/ -scp moodledata_backup_*.tar.gz admin@10.29.112.130:/tmp/migration/ -``` - -### 5.2 Conversion MySQL → PostgreSQL (si nécessaire) - -```bash -# Installer pgloader -sudo apt-get install -y pgloader - -# Créer le fichier de configuration -cat > migration.load << 'EOF' -LOAD DATABASE - FROM mysql://user:password@source-server:3306/moodle - INTO postgresql://moodle:password@edu-pg-main-rw.shared.svc.cluster.local:5432/moodle - -WITH include drop, create tables, create indexes, reset sequences - -CAST type datetime to timestamp using zero-dates-to-null, - type date using zero-dates-to-null -EOF - -# Exécuter (peut prendre plusieurs heures) -pgloader migration.load -``` - -**Ou import direct PostgreSQL → PostgreSQL :** - -```bash -# Port-forward vers le cluster PG +# Port-forward vers le cluster PG cible kubectl port-forward -n shared svc/edu-pg-main-rw 5432:5432 & # Restaurer -pg_restore -h localhost -U moodle -d moodle moodle_dump_*.dump +pg_restore -h localhost -U moodle -d moodle --no-owner --no-acl moodle_dump_*.dump + +# Arrêter le port-forward +kill %1 ``` -### 5.3 Restaurer moodledata +**Ou directement dans le pod PostgreSQL :** + +```bash +# Copier le dump dans le pod PG +kubectl cp moodle_dump_*.dump shared/edu-pg-main-1:/tmp/ + +# Restaurer +kubectl exec -n shared edu-pg-main-1 -- pg_restore -U postgres -d moodle --no-owner /tmp/moodle_dump.dump + +# Nettoyer +kubectl exec -n shared edu-pg-main-1 -- rm /tmp/moodle_dump.dump +``` + +### 5.4 Restaurer moodledata **Méthode recommandée avec suivi de progression :** ```bash # Avec pv pour voir la progression -pv moodledata_backup_*.tar.gz | kubectl exec -i -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- tar -xzf - -C /bitnami/moodledata --strip-components=1 --no-same-owner +pv moodledata_backup_*.tar.gz | kubectl exec -i -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- tar -xzf - -C /bitnami/moodledata --strip-components=1 --no-same-owner +``` -# Sans pv -cat moodledata_backup_*.tar.gz | kubectl exec -i -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- tar -xzf - -C /bitnami/moodledata --strip-components=1 --no-same-owner +**Sans pv :** + +```bash +cat moodledata_backup_*.tar.gz | kubectl exec -i -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- tar -xzf - -C /bitnami/moodledata --strip-components=1 --no-same-owner ``` **Suivre la progression (autre terminal) :** ```bash -watch -n 5 'kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- du -sh /bitnami/moodledata' +watch -n 5 "kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- du -sh /bitnami/moodledata" ``` -### 5.4 Corriger les permissions +### 5.5 Corriger les permissions ```bash -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- chown -R 1001:1001 /bitnami/moodledata -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- chmod -R 755 /bitnami/moodledata +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- chown -R 1001:1001 /bitnami/moodledata +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- chmod -R 755 /bitnami/moodledata ``` --- @@ -446,50 +473,60 @@ kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- chmod -R 755 /bitnam **⚠️ Point critique** - Un config.php mal configuré casse l'affichage (CSS non chargé). ```bash -kubectl exec -i -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- bash -c 'cat > /bitnami/moodle/config.php' << 'EOF' +# ADAPTER les valeurs selon l'université +UNIVERSITY="unstim" +TARGET_NS="moodle-${UNIVERSITY}" +TARGET_DEPLOY="moodle-${UNIVERSITY}" +TARGET_URL="elearningum.rber.bj" # Adapter selon université +DB_HOST="edu-pg-main-rw.shared.svc.cluster.local" +DB_NAME="moodle" +DB_USER="moodle" +DB_PASS="MOT_DE_PASSE" + +kubectl exec -i -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- bash -c 'cat > /bitnami/moodle/config.php' << EOF dbtype = 'pgsql'; -$CFG->dblibrary = 'native'; -$CFG->dbhost = 'edu-pg-main-rw.shared.svc.cluster.local'; // Adapter si base dédiée -$CFG->dbname = 'moodle'; // Adapter : moodle_uac, moodle_una, etc. -$CFG->dbuser = 'moodle'; // Adapter -$CFG->dbpass = 'MOT_DE_PASSE'; // Adapter -$CFG->prefix = 'mdl_'; -$CFG->dboptions = array( +\$CFG->dbtype = 'pgsql'; +\$CFG->dblibrary = 'native'; +\$CFG->dbhost = '${DB_HOST}'; +\$CFG->dbname = '${DB_NAME}'; +\$CFG->dbuser = '${DB_USER}'; +\$CFG->dbpass = '${DB_PASS}'; +\$CFG->prefix = 'mdl_'; +\$CFG->dboptions = array( 'dbpersist' => 0, 'dbport' => 5432, 'dbsocket' => '', ); // === URL === -if (empty($_SERVER['HTTP_HOST'])) { - $_SERVER['HTTP_HOST'] = '127.0.0.1:8080'; +if (empty(\$_SERVER['HTTP_HOST'])) { + \$_SERVER['HTTP_HOST'] = '127.0.0.1:8080'; } // Détection automatique HTTP/HTTPS -if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { - $CFG->wwwroot = 'https://elearningXX.rber.bj'; // Adapter XX +if (isset(\$_SERVER['HTTPS']) && \$_SERVER['HTTPS'] == 'on') { + \$CFG->wwwroot = 'https://${TARGET_URL}'; } else { - $CFG->wwwroot = 'http://elearningXX.rber.bj'; // Adapter XX + \$CFG->wwwroot = 'http://${TARGET_URL}'; } // === PATHS === -$CFG->dataroot = '/bitnami/moodledata'; -$CFG->admin = 'admin'; -$CFG->directorypermissions = 02775; +\$CFG->dataroot = '/bitnami/moodledata'; +\$CFG->admin = 'admin'; +\$CFG->directorypermissions = 02775; -// === PERFORMANCE (optionnel) === -$CFG->cachejs = true; -$CFG->langstringcache = true; +// === PERFORMANCE === +\$CFG->cachejs = true; +\$CFG->langstringcache = true; -// === PROXY SETTINGS (si derrière HAProxy) === -$CFG->reverseproxy = true; -$CFG->sslproxy = true; // Si HTTPS terminé au niveau ingress +// === PROXY SETTINGS (derrière HAProxy) === +\$CFG->reverseproxy = true; +\$CFG->sslproxy = true; require_once(__DIR__ . '/lib/setup.php'); EOF @@ -498,22 +535,23 @@ EOF ### 6.2 Purger les caches ```bash -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php /bitnami/moodle/admin/cli/purge_caches.php +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php /bitnami/moodle/admin/cli/purge_caches.php ``` ### 6.3 Mettre à jour les URLs dans la base ```bash -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php /bitnami/moodle/admin/cli/replace.php \ - --search="http://elearning.ANCIEN-DOMAINE.bj" \ - --replace="https://elearningXX.rber.bj" \ +# Remplacer l'ancienne URL par la nouvelle +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php /bitnami/moodle/admin/cli/replace.php \ + --search="http://ANCIEN-DOMAINE" \ + --replace="https://${TARGET_URL}" \ --non-interactive ``` ### 6.4 Exécuter les mises à jour de base ```bash -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php /bitnami/moodle/admin/cli/upgrade.php --non-interactive +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php /bitnami/moodle/admin/cli/upgrade.php --non-interactive ``` --- @@ -682,7 +720,7 @@ Si le client n'existe pas encore dans Keycloak : ```bash # Compter les utilisateurs -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php -r " +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php -r " require('/bitnami/moodle/config.php'); global \$DB; echo 'Utilisateurs actifs: ' . \$DB->count_records('user', ['deleted' => 0]) . PHP_EOL; @@ -712,13 +750,14 @@ elearningXX.rber.bj. IN A 10.29.112.100 ; IP HAProxy VIP elearning.UNIVERSITY.bj. IN CNAME elearningXX.rber.bj. ``` -### 8.5 Désactiver la maintenance sur l'ancien serveur +### 8.5 Désactiver la maintenance sur le pod source ```bash -# Sur l'ancien serveur (si toujours accessible) -sudo -u www-data php /var/www/moodle/admin/cli/maintenance.php --disable +# Désactiver la maintenance +kubectl exec -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} -- php /bitnami/moodle/admin/cli/maintenance.php --disable -# Ou éteindre l'ancien serveur après validation complète +# Ou si l'ancien pod n'est plus nécessaire, le scaler à 0 +kubectl scale -n ${SOURCE_NS} deploy/${SOURCE_DEPLOY} --replicas=0 ``` ### 8.6 Communication aux utilisateurs @@ -745,20 +784,27 @@ Support : support@rber.bj ## 9. Troubleshooting +> **Note :** Dans toutes les commandes ci-dessous, utiliser les variables définies : +> ```bash +> UNIVERSITY="unstim" # Adapter +> TARGET_NS="moodle-${UNIVERSITY}" +> TARGET_DEPLOY="moodle-${UNIVERSITY}" +> ``` + ### 9.1 CSS ne charge pas (page sans style) **Cause :** `wwwroot` incorrect dans config.php ```bash # Vérifier -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- grep wwwroot /bitnami/moodle/config.php +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- grep wwwroot /bitnami/moodle/config.php # Le protocole (http/https) doit correspondre à l'URL utilisée # Corriger si nécessaire -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- sed -i "s|http://|https://|g" /bitnami/moodle/config.php +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- sed -i "s|http://|https://|g" /bitnami/moodle/config.php # Purger le cache -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php /bitnami/moodle/admin/cli/purge_caches.php +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php /bitnami/moodle/admin/cli/purge_caches.php # Vider le cache du navigateur : Ctrl+Shift+R ``` @@ -767,81 +813,81 @@ kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php /bitnami/moodle/ ```bash # Vérifier la connectivité -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php -r " +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php -r " \$conn = pg_connect('host=edu-pg-main-rw.shared.svc.cluster.local port=5432 dbname=moodle user=moodle password=XXX'); if (\$conn) { echo 'DB OK'.PHP_EOL; } else { echo 'DB FAIL'.PHP_EOL; } " # Vérifier les credentials dans config.php -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- grep -E "dbhost|dbname|dbuser|dbpass" /bitnami/moodle/config.php +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- grep -E "dbhost|dbname|dbuser|dbpass" /bitnami/moodle/config.php ``` ### 9.3 Erreur 502 Bad Gateway ```bash # Vérifier le pod -kubectl get pods -n ${NAMESPACE} -kubectl logs -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} --tail=50 +kubectl get pods -n ${TARGET_NS} +kubectl logs -n ${TARGET_NS} deploy/${TARGET_DEPLOY} --tail=50 # Vérifier l'ingress -kubectl get ingress -n ${NAMESPACE} -kubectl describe ingress -n ${NAMESPACE} +kubectl get ingress -n ${TARGET_NS} +kubectl describe ingress -n ${TARGET_NS} # Vérifier le service -kubectl get svc -n ${NAMESPACE} +kubectl get svc -n ${TARGET_NS} ``` ### 9.4 Fichiers non accessibles ```bash # Vérifier les permissions -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- ls -la /bitnami/moodledata/ +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- ls -la /bitnami/moodledata/ # Corriger -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- chown -R 1001:1001 /bitnami/moodledata -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- chmod -R 755 /bitnami/moodledata +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- chown -R 1001:1001 /bitnami/moodledata +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- chmod -R 755 /bitnami/moodledata ``` ### 9.5 rberConnect ne fonctionne pas ```bash # Vérifier que OAuth2 est activé -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- php /bitnami/moodle/admin/cli/cfg.php --name=auth +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- php /bitnami/moodle/admin/cli/cfg.php --name=auth # Tester la connectivité vers Keycloak -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- curl -I https://auth.rber.bj/realms/rber/.well-known/openid-configuration +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- curl -I https://auth.rber.bj/realms/rber/.well-known/openid-configuration # Vérifier les logs -kubectl logs -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} | grep -i oauth +kubectl logs -n ${TARGET_NS} deploy/${TARGET_DEPLOY} | grep -i oauth ``` ### 9.6 Pod en CrashLoopBackOff ```bash # Voir les logs du pod précédent -kubectl logs -n ${NAMESPACE} -l app.kubernetes.io/name=moodle --previous +kubectl logs -n ${TARGET_NS} -l app.kubernetes.io/name=moodle --previous # Vérifier les events -kubectl get events -n ${NAMESPACE} --sort-by='.lastTimestamp' | tail -20 +kubectl get events -n ${TARGET_NS} --sort-by='.lastTimestamp' | tail -20 # Vérifier les ressources -kubectl describe pod -n ${NAMESPACE} -l app.kubernetes.io/name=moodle +kubectl describe pod -n ${TARGET_NS} -l app.kubernetes.io/name=moodle ``` ### 9.7 Commandes de diagnostic générales ```bash # État général -kubectl get all -n ${NAMESPACE} +kubectl get all -n ${TARGET_NS} # Logs en temps réel -kubectl logs -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -f +kubectl logs -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -f # Entrer dans le pod -kubectl exec -it -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- bash +kubectl exec -it -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- bash # Vérifier le config.php complet -kubectl exec -n ${NAMESPACE} deploy/moodle-${UNIVERSITY} -- cat /bitnami/moodle/config.php +kubectl exec -n ${TARGET_NS} deploy/${TARGET_DEPLOY} -- cat /bitnami/moodle/config.php ``` ---