Guide des technologies

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

8 min read Sysadmin Mis à jour 08 Oct 2025
Installer Moodle 3.2 sur CentOS 7
Installer Moodle 3.2 sur CentOS 7

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

  1. Installer Nginx
  2. Installer et configurer PHP‑FPM 7.0
  3. Installer et configurer MariaDB
  4. Télécharger et préparer Moodle
  5. Configurer SSL et hôte virtuel Nginx
  6. Configurer SELinux et Firewalld
  7. Lancer l’installation via l’interface web
  8. 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

Installation de Nginx sur CentOS 7

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;

Configuration de la base de données pour Moodle

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

Téléchargement et configuration de Moodle

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

Génération d'un certificat auto-signé

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

Vérification de l'état de SELinux sur CentOS 7

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 :

Choix de la langue pour l'installation Moodle

Configuration des chemins et URL Moodle

Sélection du pilote de base de données

Vérification des prérequis système

Installation Moodle en cours

Configuration compte admin Moodle

Configuration de la page d'accueil Moodle

Tableau de bord administrateur Moodle

Étape 8 - Tests et vérifications

Visitez la page d’accueil : https://moodle.hakase-labs.com

Page d'accueil Moodle

Page de connexion : https://moodle.hakase-labs.com/login/

Page de connexion Moodle

Accédez au tableau de bord, aux préférences utilisateur et à la zone d’administration :

Tableau de bord utilisateur Moodle

Administration du site Moodle

Préférences utilisateur Moodle

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)

  1. Stoppez les cron/jobs qui écrivent dans Moodle si possible.
  2. Dump de la base : mysqldump -u root -p moodledb > moodledb-YYYYMMDD.sql.
  3. Sauvegarde du code : tar czf moodle-code-YYYYMMDD.tar.gz /var/www/moodle.
  4. Sauvegarde des données : tar czf moodledata-YYYYMMDD.tar.gz /var/moodledata.
  5. 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.

Auteur
Édition

Matériaux similaires

Installer Chef Server sur Ubuntu 17.04
DevOps

Installer Chef Server sur Ubuntu 17.04

Erreur 500 Microsoft Teams : guide de résolution
Support

Erreur 500 Microsoft Teams : guide de résolution

Courtier en ligne fiable : 6 étapes essentielles
Finance

Courtier en ligne fiable : 6 étapes essentielles

Discord : changer la couleur du texte
Guides Discord

Discord : changer la couleur du texte

Installer Moodle 3.2 sur CentOS 7
Sysadmin

Installer Moodle 3.2 sur CentOS 7

Faire démarrer les programmes au démarrage de Windows
Dépannage

Faire démarrer les programmes au démarrage de Windows