L'année 2020 a bouleversé notre monde et bien que cette réalité ne soit pas complètement nouvelle pour la plupart des générations de notre siècle, elle nous a tous conduit à réexaminer nos modes de vie.

En effet, nous avons été obligés de réévaluer nos habitudes, nos vies familiales, nos relations, notre routine professionnelle, et la manière dont ils interagissent avec le reste de la société, ainsi que d'autres éléments que nous considérions auparavant comme acquis. Un nouveau mode de vie est ainsi apparu, où l'intégration des connexions à distance est une priorité.

Dans ce contexte, l'éducation a été très fortement impactée et les circonstances inédites ont poussé à la consolidation de l'apprentissage en ligne, pensée non plus seulement comme une évolution naturelle des systèmes éducatifs, mais surtout comme une alternative plus immédiate pour assurer une formation continue lors de situations extrêmes.

Un grand nombre de gouvernements et institutions ont choisi de gérer la situation en faisant appel aux médias traditionnels comme la radio et la télévision. Certains ont pu profiter des plateformes d’apprentissage déjà existantes, mais pour cela ils ont dû augmenter les infrastructures informatiques hébergeant leurs solutions en raison de l’augmentation des connexions simultanées. De nombreux autres gouvernements se sont, quant à eux, appuyés sur les structures traditionnelles du secteur public, tout en travaillant avec les entreprises de la EdTech afin de bénéficier de structures d'apprentissage électronique évolutives.

Chez Scaleway, nous avons mis notre expertise en tant que développeurs au service des entreprises et écoles en leur permettant de maintenir leurs activités à distance pendant le confinement avec la création et l'hébergement des salles de vidéoconférence Jitsi et BigBlueButton.

Dans ce même esprit, nous proposons ce tutoriel pour vous montrer comment installer Moodle ; la plateforme d'apprentissage en ligne (LMS) open-source la plus utilisée au monde.

Moodle habilite les éducateurs avec les outils nécessaires à la création d’un environnement d’apprentissage virtuel collaboratif et fournit aux étudiants la possibilité d’y participer. Il intègre des outils permettant le partage de contenus, les exercices, les examens, l’apprentissage interactive et les jeux.

Depuis sa création en 2002, la LMS a reçu des contributions de plusieurs développeurs open-source dans le monde et a pu aider des institutions et des étudiants dans plus de 175 pays à travers plus de 25 000 sites web.

Dans ce tutoriel, nous allons créer une plateforme d'apprentissage en installant Moodle sur une instance virtuelle avec une stack LEMP (constituée d’Ubuntu Focal Fossa 20.04 LTS, Nginx, MariaDB et PHP).

Pré requis :

  • Vous avez un compte et êtes connecté à console.scaleway.com
  • Vous avez configuré votre clé SSH
  • Vous disposez d’une Instance Virtuelle Scaleway fonctionnant sur Ubuntu Focal Fossa (20.04 LTS)
  • Vous avez un nom de domaine ou un sous-domaine pointant vers l'instance

Installation et configuration de la stack LEMP

Moodle nécessite les logiciels suivants :

  • un serveur web ;
  • PHP ;
  • un serveur de base de données.

Dans ce tutoriel, nous allons installer et configurer une stack LEMP à l'aide de Nginx, MariaDB et PHP.

Mettez à jour les informations du référentiel apt du système et mettez ce dernier à niveau pour vous assurer que le système est à jour et dispose des derniers correctifs et mises à jour installés. Puis utilisez le gestionnaire de paquets apt d’Ubuntu pour installer la stack.

apt update && apt -y upgrade
apt install nginx mariadb-server mariadb-client php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-soap php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip

Installation de MariaDB

1. Si un mot de passe root pour le serveur de base de données n’a pas déjà été enregistré, vous pouvez en configurer un en exécutant les commandes suivantes :

mysql_secure_installation

2. Répondez aux questions lorsque vous y êtes invité par le gestionnaire de paquets :

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 

3. Appuyez sur Entrée.

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] 
  1. Tapez y. Insérez votre nouveau mot de passe, appuyez sur Entrée et l'insérer de nouveau.
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
  1. Tapez y pour les quatre prochaines invites de commande.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

6 . Une fois l’installation terminée, lancez la commande pour vérifier qu’elle soit réussie :

mysql -u root -p

Quand on vous le demande, insérez le mot de passe root. Si l'installation a réussi, le message de bienvenue de MariaDB sera affiché.

Certains paramètres doivent être ajoutés au fichier de configuration par défaut de MariaDB pour que Moodle soit correctement installé par la suite.

  1. Ouvrez le fichier dans l'éditeur de texte de votre choix. (Dans cet exemple on utilise nano) :
nano /etc/mysql/mariadb.conf.d/50-server.cnf

8. Ajoutez les lignes suivantes à la fin de la section Basic Settings.

innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = ON

Voici comment :

# * Basic Settings
#
user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
#port                   = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
#skip-external-locking
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = ON

9 . Redémarrez MariaDB :

systemctl restart mariadb.service

Paramétrage de PHP

Pour obtenir les meilleurs performances, Moodle vous conseille de vérifier et ajuster certains des paramètres PHP qui sont prédéfinis.

  1. Ouvrez php.ini dans l'éditeur de texte de votre choix :
nano /etc/php/7.4/fpm/php.ini

2. Modifiez les informations suivantes :

memory_limit = 128M (paramétrer en fonction de la taille du système)
session.save_handler = files
file_uploads = On
session.auto_start = 0
allow_url_fopen = On
short_open_tag = On
cgi.fix_pathinfo = 0
upload_max_filesize =  128M (paramétrer la taille maximale du téléchargement d’un fichier)

Note : Pour les paramètres utilisant ON/OFF comme valeurs, vous pouvez utiliser 1 à la place de ON et 0 à la place de OFF si vous le souhaitez.

Créer une base de données

  1. Connectez-vous à MariaDB en exécutant la commande suivante. Quand on vous le demande, insérez le mot de passe déjà enregistré.
mysql -u root -p
  1. Exécutez la commande suivante pour créer une base de données nommée moodle :
CREATE DATABASE moodle;
  1. Créez un utilisateur moodleuser et puis enregistrez un mot de passe pour la base de données en remplaçant insert_password par le mot de passe de votre choix.
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'insert_password';

4. Accordez à l'utilisateur un accès complet à la base de données.

GRANT ALL ON moodle.* TO 'moodleuser'@'localhost' WITH GRANT OPTION;

5. Enregistrez et quittez.

FLUSH PRIVILEGES;
EXIT;

Installation de Moodle

On va utiliser git et curl pour accéder à et cloner la dernière version de Moodle.

  1. Installez les paquets et allez dans le répertoire Nginx root.
apt install git curl
cd /var/www/
  1. Vérifiez la version la plus récente de Moodle sur cette liste de chaque branche disponibile.

Ensuite remplacez # par le numéro de branche correspondante avant de télécharger les paquets Moodle.

git clone -b MOODLE_#_STABLE git://git.moodle.org/moodle.git moodle

3. Configurez les autorisations par le biais des commandes suivantes :

mkdir -p /var/www/moodledata
chown -R www-data:www-data /var/www/
chmod -R 755 /var/www/
chown www-data:www-data /var/www/moodledata 

Configuration du serveur web

  1. Utilisez un éditeur de texte pour créer un nouveau fichier VirtualHost de bloc serveur nommé moodle sous le répertoire /etc/nginx/sites-available pour inclure les paramètres de demande client de votre serveur Web.
nano /etc/nginx/sites-available/moodle
  1. Copiez-collez la configuration ci-dessous dans le fichier. Remplacez example.com par votre nom de domaine et enregistrez.
server {
    listen 80;
    listen [::]:80;
    root /var/www/moodle;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

    client_max_body_size 100M;
    autoindex off;
    location / {
        try_files $uri $uri/ =404;
    }

    location /dataroot/ {
      internal;
      alias /var/www/moodledata/;
    }

    location ~ [^/].php(/|$) {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

3. Créez un lien symbolique pour activer le bloc serveur et redémarrez Nginx.

ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/
systemctl restart nginx.service

Vous pouvez vérifier si Moodle est accessible via une interface Web en accédant à http://localhost à l'aide de l'IP du serveur ou de votre domaine.

Configuration d’un certificat TLS avec Let's Encrypt

Par défaut, la connexion entre votre ordinateur et le serveur n'est pas cryptée. This makes your connection more vulnerable to external access. Afin de protéger les identifiants utilisateur et d'autres informations confidentielles qui seront stockées dans Moodle, vous pouvez créer un certificat TLS généré gratuitement par Let's Encrypt.

1. Vérifiez que le système est à jour et puis installez Let’s Encrypt.

apt update && apt -y upgrade
apt-get install letsencrypt

On va utiliser un certbot fourni avec Let’s Encrypt, pour générer un certificat wildcard. Cela garantit non seulement la couverture du nom de domaine, mais aussi celle de tous les sous-domaines possibles (*.example.com).

Un challenge DNS est requis pour obtenir les certificats wildcard.

  1. Pour obtenir un certificat, utilisez vos enregistrement DNS pour prouver que vous controller le domaine, spécifiez le endpoint et acceptez les terms d’utilisations ACME simultanément et exécutez la commande suivante. Remplacez admin@example.com par votre adresse mail et example.com par votre nom de domaine.
certbot certonly --manual --preferred-challenges=dns --email admin@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d example.com -d *.example.com
  1. Répondez aux questions lorsque vous y êtes invité par Let’s Encrypt. Si vous êtes d’accord, tapez y et appuyez sur Entrée.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

Puis, vous devrez ajouter un enregistrement TXT dans votre zone DNS depuis l’interface de votre fournisseur de zone DNS.

Please deploy a DNS TXT record under the name
`_acme-challenge.example.com` with the following value:

`yOdiaGhHq4zLPTmG8eHOUr5bfBTiYZ-w-3_oFqmZuZw`

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

Après le déploiement de cet enregistrement, attendez quelques minutes puis Press Enter to Continue. Vous aurez peut être à ajouter un nouvel enregistrement.

Note : en fonction de votre fournisseur DNS, un enregistrement peut prendre du temps avant d’être effectivement déployé.

Lorsque le processus d'authentification est réussi, les certificats wildcard seront prêts et vous verrez le résultat suivant :

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/scaleway-test.ga/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/scaleway-test.ga/privkey.pem
   Your cert will expire on 2020-09-16. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
  1. Continuez la configuration de Let’s Encrypt en relançant le serveur bloc de moodle.
nano /etc/nginx/sites-available/moodle
  1. Ajoutez les nouveaux paramètres, comme indiqué ci-dessous. Remplacez example.com par votre nom de domaine quand nécessaire.
server {
    listen 80;
    listen [::]:80;
    server_name *.example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    root /var/www/moodle;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

    if ($host != "example.com") {
      return 301 https://example.com$request_uri;
    }

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS13+AESGCM+AES128:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1;

    client_max_body_size 100M;
    autoindex off;
    location / {
        try_files $uri $uri/ =404;
    }

    location /dataroot/ {
       internal;
       alias /var/www/moodledata/;
    }

    location ~ [^/].php(/|$) {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

6.  Redémarrez PHP et Nginx.

systemctl reload nginx
systemctl reload php7.4-fpm

Terminer l’installation dans le navigateur web

Accédez à votre interface Moodle interface via un navigateur web en utilisant votre nom de domaine ou adresse IP. L’assistant de configuration Moodle s’affiche.

  1. Sélectionnez la langue et cliquez sur Suivant.
  1. Vérifiez et confirmez les chemins d'accès aux répertoires Moodle de votre serveur en cliquant sur suivant.
  1. Il vous est demandé de sélectionner un pilote de base de données. Sélectionnez MariaDB (native/mariadb) dans le menu déroulant et continuez.
  1. Insérez le nom d’utilisateur de la base de données et le mot de passe de la base de données déjà enregistrées et cliquez sur suivant.
  1. Les termes d'utilisation de Moodle seront affichées. Cliquez Continue si vous “Have read these conditions and understood them”.
  1. Sur la page suivante, une liste de contrôle du serveur s'affiche et vous informe si votre environnement de serveur répond aux exigences minimales pour le fonctionnement de Moodle.

Si toutes les exigences sont marquées comme OK, cliquez sur Suivant pour continuer. If they are not, click on the Report link of the requirement in question for more information.

  1. Les dernières étapes de l’installation de Moodle seront effectuées, celles-ci peuvent prendre quelques minutes. Une fois l’installation terminée, faites défiler jusqu'en bas de la page et cliquez sur Continue.
  1. On vous demandera ensuite de créer un compte administrateur (root). Complétez les champs requis et cliquez sur Update profile.
  1. Afin de terminer l’installation, il suffit d’enregistrer le Full site name et le Short name for site. Vous pouvez également insérer un résumé et gérer l'authentification et les fuseaux horaires.

  2. Cliquez sur Save changes pour terminer et vous serez alors redirigé vers la page d'accueil de votre Moodle.

La configuration de votre plateforme d'apprentissage Moodle est terminée. Vous pouvez dès à présent ajouter des cours et des étudiants à votre instance. Pour plus d'informations sur la configuration et l’utilisation de Moodle après installation, veuillez consulter la documentation officielle.

La version de ce même tutoriel existe aussi en anglais dans notre documentation Scaleway.