Installer Moodle 3.2 sur CentOS 7 avec Nginx, PHP‑FPM et MariaDB

Ce guide explique pas à pas comment installer Moodle 3.2 sur CentOS 7 en utilisant Nginx, PHP‑FPM 7.0 et MariaDB. Vous trouverez les commandes exactes, la configuration SELinux/Firewalld, la génération d’un certificat SSL auto-signé et des sections pratiques : vérification, dépannage et checklists par rôle.
Important : adaptez les mots de passe et les noms d’hôte à votre environnement en production.
Objectif et variantes d’intention
Objectif principal : installer et configurer Moodle sur CentOS 7 avec une pile Nginx + PHP‑FPM + MariaDB. Variantes d’intention connexes : installer Moodle sur CentOS, configurer PHP‑FPM pour Moodle, sécuriser Moodle (SELinux/Firewalld/SSL), migrer Moodle vers Nginx, installer Moodle avec Docker.
Pré-requis
- Serveur CentOS 7 à jour
- Accès root ou utilisateur avec privilèges sudo
- Connexion internet pour récupérer paquets et code source
- Nom DNS ou hôte pour le serveur (ex. moodle.votre-domaine.tld)
Remarque : les commandes utilisent yum et systemctl et supposent un accès shell avec sudo ou root.
Aperçu des étapes
- Installer Nginx
- Installer et configurer PHP‑FPM 7.0
- Installer et configurer MariaDB
- Télécharger et préparer Moodle
- Configurer SSL et hôte virtuel Nginx
- Configurer SELinux et Firewalld
- Lancer l’installation via l’interface web
- Tester et vérifier l’installation
Définitions rapides
- PHP‑FPM : FastCGI Process Manager pour PHP, gère les processus PHP en dehors du serveur web.
- SELinux : module de sécurité renforçant le contrôle d’accès.
- Firewalld : gestionnaire de pare-feu dynamique pour zones et services.
Étape 1 - Installer Nginx
Nginx n’est pas fourni par défaut dans les dépôts CentOS. Nous utilisons le dépôt EPEL.
Installez le dépôt EPEL :
yum -y install epel-release
Installez Nginx :
yum -y install nginx
Démarrez et activez Nginx pour qu’il démarre au boot :
systemctl start nginx
systemctl enable nginx
Vérifiez que Nginx écoute sur le port 80 :
netstat -plntu
Si netstat n’est pas installé :
yum -y install net-tools
Note : sur des systèmes récents, vous pouvez également utiliser ss -tulpen
.
Étape 2 - Installer et configurer PHP‑FPM
Moodle 3.2 fonctionne avec PHP 7.0. Le dépôt Webtatic fournit les paquets PHP 7.0 pour CentOS 7.
Ajoutez le dépôt Webtatic :
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Installez PHP‑FPM et les extensions requises :
yum install -y graphviz aspell php70w-fpm php70w-cli php70w-pspell php70w-curl php70w-gd php70w-intl php70w-mysql php70w-xml php70w-xmlrpc php70w-ldap php70w-zip php70w-json php70w-opcache php70w-readline php70w-mbstring php70w-soap
Éditez la configuration PHP globale :
vim /etc/php.ini
Recherchez et modifiez :
cgi.fix_pathinfo=0
Ce réglage évite que PHP ne tente de traiter des chemins ambigus — important côté sécurité.
Configurez PHP‑FPM :
cd /etc/php-fpm.d/
vim www.conf
Modifiez les lignes suivantes pour que PHP‑FPM s’exécute sous l’utilisateur et le groupe nginx
:
user = nginx
group = nginx
Utilisez un socket Unix pour la communication entre Nginx et PHP‑FPM :
listen = /run/php-fpm/php-fpm.sock
Décommentez et adaptez la propriété du socket :
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Limitez les extensions traitées par PHP :
security.limit_extensions = .php
Décommentez les variables d’environnement utiles :
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Créez le répertoire de sessions et fixez les permissions :
mkdir -p /var/lib/php/session/
chown -R nginx:nginx /var/lib/php/session/
Assurez-vous que le répertoire du socket existe et appartient à nginx :
chown -R nginx:nginx /run/php-fpm/
Démarrez et activez PHP‑FPM :
systemctl start php-fpm
systemctl enable php-fpm
Vérifiez le socket :
netstat -lx | grep php-fpm.sock
Conseil : si le socket n’apparaît pas, consultez les logs systemd : journalctl -u php-fpm -e
.
Étape 3 - Installer et configurer MariaDB
Nous utilisons MariaDB comme serveur de base de données. Installez les paquets :
yum -y install mariadb-server mariadb
Éditez /etc/my.cnf et ajoutez dans la section [mysqld] :
default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = Barracuda
Démarrez et activez le service :
systemctl start mariadb
systemctl enable mariadb
Sécurisez l’installation MySQL/MariaDB :
mysql_secure_installation
Répondez aux questions pour définir un mot de passe root et supprimer les comptes anonymes et la base test.
Créez la base de données et l’utilisateur pour Moodle. Remplacez les mots de passe avant usage en production.
Connectez‑vous :
mysql -u root -p
Puis :
CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
FLUSH PRIVILEGES;
Important : choisissez des mots de passe forts et stockez‑les dans un gestionnaire de secrets.
Étape 4 - Télécharger et préparer Moodle
Installez git :
yum -y install git
Créez le répertoire web root et clonez Moodle :
mkdir -p /var/www/
cd /var/www/
git clone https://github.com/moodle/moodle.git
Choisissez la branche stable 3.2 :
cd moodle/
git branch -a
# Exemple pour suivre la branche stable 3.2
git branch --track MOODLE_32_STABLE origin/MOODLE_32_STABLE
git checkout MOODLE_32_STABLE
Vérifiez l’état :
git status
Vous devriez voir :
# On branch MOODLE_32_STABLE
# nothing to commit, working directory clean
Créez le répertoire moodledata et fixez les permissions :
mkdir -p /var/moodledata
chown -R nginx:nginx /var/moodledata
chmod 777 /var/moodledata
Fixez le propriétaire du code Moodle :
chown -R nginx:nginx /var/www/moodle
chmod 755 /var/www/moodle
Note sur permissions : chmod 777 sur moodledata est pratique pour tests locaux. En production, préférez 770 et utilisateur de groupe restreint.
Étape 5 - Configurer SSL et hôte virtuel Nginx
Sur un serveur de production, utilisez un certificat valide (Let’s Encrypt ou CA commerciale). Ici, un certificat auto-signé convient pour tests.
Créez le répertoire SSL et générez le certificat :
mkdir -p /etc/nginx/ssl/
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/moodle.crt -keyout /etc/nginx/ssl/moodle.key
Sécurisez la clé privée :
chmod 600 /etc/nginx/ssl/moodle.key
Créez un fichier de configuration Nginx pour Moodle :
cd /etc/nginx/
vim conf.d/moodle.conf
Collez la configuration suivante (adaptez server_name
) :
# PHP Upstream Handler
upstream php-handler {
server unix:/run/php-fpm/php-fpm.sock;
}
# Nginx redirect HTTP to HTTPS - moodle.hakase-labs.com
server {
listen 80;
server_name moodle.hakase-labs.com;
# enforce https
return 301 https://$server_name$request_uri;
}
# HTTPS Configuration
server {
server_name moodle.hakase-labs.com;
listen *:443 ssl http2;
listen [::]:443 ssl http2;
# SSL Configuration
ssl on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_session_tickets off;
#ssl_stapling on;
#ssl_stapling_verify on;
resolver_timeout 5s;
ssl_certificate /etc/nginx/ssl/moodle.crt;
ssl_certificate_key /etc/nginx/ssl/moodle.key;
# Root Moodle Data DIrectory
root /var/www/moodle;
rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;
location ^~ / {
try_files $uri $uri/ /index.php?q=$request_uri;
index index.php index.html index.htm;
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass php-handler;
}
}
}
Testez la configuration et redémarrez Nginx :
nginx -t
systemctl restart nginx
Conseil sécurité : la liste des ciphers et protocoles ci-dessus contient TLSv1 et TLSv1.1 qui sont aujourd’hui déconseillés. Sur un serveur public, limitez à TLSv1.2 et TLSv1.3 si disponible.
Étape 6 - Configurer SELinux et Firewalld
Vérifiez l’état de SELinux :
sestatus
Si SELinux est en mode Enforcing, installez les outils si nécessaire :
yum -y install policycoreutils-python
Ajustez les contextes pour les répertoires web et moodledata :
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/moodle(/.*)?'
restorecon -Rv '/var/www/moodle/'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata(/.*)?'
restorecon -Rv '/var/moodledata/'
Ces commandes autorisent les processus HTTPd/Nginx à lire et écrire là où Moodle en a besoin.
Installez et configurez firewalld si requis :
yum -y install firewalld
systemctl start firewalld
systemctl enable firewalld
Ouvrez les services HTTP/HTTPS/SSH :
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
firewall-cmd --list-all
Note : adaptez les règles en cas d’utilisation de ports non standards.
Étape 7 - Installer Moodle via l’interface Web
Ouvrez un navigateur et rendez-vous sur l’URL configurée (ex. https://moodle.hakase-labs.com).
Choisissez la langue, indiquez :
- URL du site : moodle.hakase-labs.com
- Répertoire web : /var/www/moodle
- Répertoire moodledata : /var/moodledata
Sélectionnez le pilote de base de données MySQL et renseignez les paramètres :
- hôte : localhost
- base : moodledb
- utilisateur : moodleuser
- mot de passe : hakaselabs123
- préfixe de tables : moodle_
- port : 3306
- socket Unix : /var/lib/mysql/mysql.sock
Continuez, acceptez les mentions de copyright, puis laissez Moodle vérifier les extensions PHP requises.
Si tout est OK, cliquez pour démarrer l’installation automatique. Créez le compte administrateur puis configurez la page d’accueil.
Images d’exemples :
Étape 8 - Tests et vérifications
Visitez la page d’accueil : https://moodle.hakase-labs.com
Page de connexion : https://moodle.hakase-labs.com/login/
Accédez au tableau de bord, aux préférences utilisateur et à la zone d’administration :
L’installation est maintenant terminée.
Bonnes pratiques et sécurité
- Utilisez des certificats TLS valides (Let’s Encrypt automatisé via Certbot). Evitez les certificats auto-signés en production.
- Réduisez la surface d’attaque TLS : désactivez TLSv1 et TLSv1.1, privilégiez TLSv1.2/1.3.
- Sauvegardez régulièrement la base MariaDB et le répertoire moodledata.
- Appliquez les mises à jour de sécurité pour CentOS, PHP, Nginx et Moodle.
- Utilisez des mots de passe robustes et un coffre pour secrets.
Sauvegarde et restauration (mini méthodologie)
- Stoppez les cron/jobs qui écrivent dans Moodle si possible.
- Dump de la base :
mysqldump -u root -p moodledb > moodledb-YYYYMMDD.sql
. - Sauvegarde du code :
tar czf moodle-code-YYYYMMDD.tar.gz /var/www/moodle
. - Sauvegarde des données :
tar czf moodledata-YYYYMMDD.tar.gz /var/moodledata
. - Testez la restauration sur un serveur séparé régulièrement.
Dépannage courant
- Erreur 502 Bad Gateway : vérifiez que php-fpm tourne (
systemctl status php-fpm
) et que le socket est accessible (ls -l /run/php-fpm/php-fpm.sock
). - Erreur de permissions sur moodledata : vérifiez SELinux et owner/group (nginx:nginx) et contextes
httpd_sys_rw_content_t
. - Module PHP manquant : relisez la page de vérification des extensions Moodle et installez le paquet manquant (ex. php70w-intl).
- Problèmes de connexion à la base : testez
mysql -u moodleuser -p -h localhost moodledb
depuis le serveur.
Alternatives et approches différentes
- Apache au lieu de Nginx : si vous préférez mod_php ou prefork, Apache est officiellement pris en charge.
- Installer Moodle via Docker : images officielles Moodle disponibles, pratiques pour test et CI.
- Utiliser une image cloud/marketplace (AWS, Azure) si vous voulez déployer rapidement.
Compatibilité et migration
- Moodle 3.2 cible PHP 7.0 ; vérifier la compatibilité si vous migrez vers une version PHP plus récente.
- Sauvegardez la base et moodledata avant toute migration de version.
- Testez les plugins tiers sur un environnement de préproduction.
Checklist par rôle
Administrateur système
- Installer Nginx, PHP, MariaDB
- Ouvrir ports et configurer SELinux
- Créer comptes système et répertoires
- Mettre en place sauvegardes automatiques
Administrateur Moodle
- Effectuer l’installation web
- Créer comptes admin et vérifier notifications
- Configurer cron jobs (ex. /admin/cli/cron.php)
Formateur
- Créer cours de test
- Importer ressources et vériier droits
- Tester interactions et forums
Critères d’acceptation
- Le site moodle répond sur HTTPS avec certificat valide.
- La page d’accueil s’affiche et la connexion admin fonctionne.
- Les tâches cron de Moodle s’exécutent sans erreurs.
- Les sauvegardes de la base et du répertoire moodledata sont réalisables et restaurables.
Tests d’acceptation
- Tester la création d’un utilisateur, sa connexion et l’accès à un cours.
- Upload d’un fichier via interface enseignant et lecture via étudiant.
- Export d’une sauvegarde de cours et import sur autre instance.
Sécurité supplémentaire
- Forcer HSTS sur domaine principal.
- Installer fail2ban pour limiter les tentatives de login bruteforce.
- Désactiver l’accès direct aux répertoires sensibles via Nginx.
Migration vers une version supérieure
- Lisez la documentation officielle de la version cible.
- Mettez à jour PHP et extensions avant Moodle si nécessaire.
- Mettez à jour les plugins étape par étape et testez.
Glossaire (1 ligne)
- moodledata : répertoire stockant cours, fichiers et uploads séparé du code.
Annexe : commandes utiles récapitulatives
Démarrer/arrêter les services :
systemctl start nginx php-fpm mariadb
systemctl enable nginx php-fpm mariadb
Vérifier les logs :
journalctl -u nginx -e
journalctl -u php-fpm -e
journalctl -u mariadb -e
Vérifier la connectivité DB :
mysql -u moodleuser -p -h localhost moodledb
Référence
Fin du guide. Bonne installation et pensez à automatiser les sauvegardes et les mises à jour.
Matériaux similaires

Installer Chef Server sur Ubuntu 17.04

Erreur 500 Microsoft Teams : guide de résolution

Courtier en ligne fiable : 6 étapes essentielles

Discord : changer la couleur du texte
