Debian 9 – Serveur LEMP (Nginx, PHP7.0 FPM & MariaDB) pour Moodle avec Let’s Encrypt

L’idée de l’article, c’est d’installer un serveur web avec une base de données, du PHP7, l’application Moodle et de mettre en place un certificat Let’s Encrypt par dessus.

Je ne traiterai pas de l’installation de Debian 9 ici, uniquement des étapes qui m’ont permis d’arriver au bout de mes peines. De plus, il n’y a que très peu voir aucune sécurité pour le moment, il s’agit d’une étape complémentaire qu’il faut effectuer…


I. Préparation du serveur

Avant de se lancer dans les installations, commençons par mettre à jour notre distribution. Je pars ici d’une Debian 9.4 en « netinst ».

sudo apt update && sudo apt dist-upgrade

Lorsque toutes les mises à jour sont OK, c’est le moment d’installer les paquets nécessaires pour le serveur web, le serveur SQL et PHP !

sudo apt install git nginx-full mariadb-server php7.0-fpm php7.0-mysql php7.0-mcrypt php7.0-mbstring php7.0-curl php-gd php-xml php7.0-zip php7.0-intl php7.0-xmlrpc php7.0-soap

J’en profite également pour installer les extensions PHP nécessaires pour le bon fonctionnement de Moodle. Dans tous les cas, s’il vous manque un paquet, l’installeur de Moodle sera en mesure de vous dire approximativement quel est le paquet en cause.

Les services ne sont pas actifs au démarrage du serveur, je les passent donc « enable » pour qu’ils puissent démarrer en même temps que le serveur (en cas de redémarrage machine par exemple) :

systemctl enable php7.0-fpm && systemctl enable nginx && systemctl enable mariadb

II. Préparation de l’applicatif Moodle

Moodle se télécharge comme une application web tel que Nextcloud et bien d’autres – une archive est à récupérer sur le site officiel puis doit être décompressée sur votre serveur. Lors de la saisie de cet article, Moodle est en version 3.4 stable.

wget https://download.moodle.org/download.php/direct/stable34/moodle-latest-34.tgz

Pour les patchs français, vous pouvez télécharger cette archive officielle :

wget https://download.moodle.org/download.php/direct/langpack/3.4/fr.zip

Décompressez l’archive et copiez tout le contenu à la racine du dossier /var/www/ – un dossier dans /opt/ est créé pour permettre l’ajout d’extensions à Moodle, le serveur web devra pouvoir y accéder :

tar xzf moodle-latest-34.tgz
cp -R moodle /var/www/.
mkdir /opt/moodle
chown -R www-data:www-data /opt/moodle
chown -R www-data:www-data /var/www
chmod -R 0755 /var/www/

III. Configuration du serveur web et du serveur SQL

Maintenant que l’application est à sa place, il faut configurer le serveur web pour qu’il puisse nous diriger sur Moodle et interpréter les fichiers PHP. Je suis parti de la configuration par défaut d’un « host » nginx pour pouvoir y apporter le nécessaire pour Moodle. Je supprime aussi la configuration qui est active par défaut sur nginx, puisque nous n’en avons pas besoin.

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/moodle
rm /etc/nginx/sites-enabled/default

Plutôt que faire des « copier/coller » dans tous les dossiers et devoir maintenir plusieurs fichiers, je crée un lien symbolique entre le dossier « sites-available » et le dossier « sites-enabled » (nginx ne lira et interpretera que les configurations dans le dossier « sites-enabled ») :

ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/.

Enfin, nous pouvons modifier la configuration de notre « host moodle » – vous trouverez ci-dessous ma configuration « basique » pour un Moodle fonctionnel lors du « first-use » :

nano /etc/nginx/sites-available/moodle

Contenu du fichier de configuration :

server {
  listen 80;
  listen [::]:80;

  access_log /var/log/nginx/moodle-access.log;
  error_log /var/log/nginx/moodle-error.log;

  root /var/www/moodle;
  index index.php;

  server_name _;

  location / {
      try_files $uri $uri/ =404;
  }

    location ~ [^/]\.php(/|$) {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_index index.php;
      fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
      include fastcgi_params;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

  location ~ /\.ht {
      deny all;
  }
}

N’oubliez pas de recharger la configuration de votre serveur web, via un « systemctl reload nginx« .

Le serveur web étant prêt, il convient de préparer ensuite le serveur SQL. Pour se faire, lancez la configuration via la commande ci-dessous :

mysql_secure_installation

L’assistant de configuration vous aidera à avoir au plus vite une configuration « fiable » de votre serveur SQL. De plus, vous pourrez (vous devez !) mettre un mot de passe fort pour l’utilisateur « root ».


Avant de se lancer dans l’interface Moodle, il faut encore créer une base de données et y faire des « tweaks ». Sans cette phase, vous ne pourrez pas utiliser Moodle.
Connectez-vous sur votre serveur SQL, en tant qu’utilisateur « root » (mysql -u root -p)- nous allons alors créer une base de données et un utilisateur pour cette base de données, comme ci-dessous :

create user 'user'@'localhost' identified by 'password';

Par la suite, la « BDD » :

CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=ON;
SET GLOBAL innodb_large_prefix=1;

Vous noterez qu’il y a plusieurs commandes passées pour l’installation : les lignes « SET GLOBAL… » sont nécessaires pour le bon fonctionnement de l’application Moodle. La base de données doit être optimisée pour être pleinement exploitable.

Enfin, l’utilisateur qui a été créé doit avoir les droits nécessaires pour exploiter la base de données et ainsi permettre à Moodle d’être utilisable.

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'user'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

IV. Lancement de l’installation de Moodle

Votre serveur est enfin prêt à permettre l’exploitation de Moodle ! Ouvrez une page web, puis saisissez l’adresse de votre serveur pour accéder à Moodle – une page web comme ci-dessous doit alors s’ouvrir :

Choississez la langue d’installation et d’utilisation de Moodle (cette langue peut être changée par la suite), puis cliquez sur le bouton « Suivant ». Si des paquets PHP sont manquants, l’assistant saura vous le dire. Vous ne pourrez pas passer outre l’installation tant que certaines dépendances critiques n’ont pas été satisfaites.

Des informations complémentaires seront fournies quant à l’installation, notamment les chemins d’accès – utile à savoir en cas de maintenance sur votre Moodle.

Choix important pour l’application, le type de serveur SQL exploité. Ne vous trompez pas dans le choix, sans quoi votre application pourrait être inexploitable ! Dans le cas ici d’un serveur « LEMP », choisissez le type « MariaDB ».

La fenêtre suivante vous demande les informations relatives à la base de données MariaDB – il s’agit des commandes passées plus haut, où vous avez créer un utilisateur et son mot de passe. Remplissez les champs comme il se doit.
Le port de la base de données et le socket Unix peuvent être laissés vides.

Un récapitulatif complet de votre installation sera alors présenté – selon le statut à droite, vous pourrez avancer ou pas dans l’installation. Un statut en état « Vérifier » ne vous permettra pas de continuer – il faut régler le problème avant d’aller plus loin.

Tous les modules par défaut de Moodle s’installeront, automatiquement. La liste est assez importante, attendez-vous donc à avoir un petit temps d’attente lors du chargement de la page web.

A la fin de cette étape, Moodle est installé ! Vous vous retrouverez sur la page d’accueil de l’application, pour modifier les options associées au compte « Administrateur ».


V. Passer Moodle en HTTPS sous Let’s Encrypt

Let’s Encrypt « s’installe » via l’outil « Certbot ». Sous Debian 9, un « apt install » suffit à faire tourner la machine.

apt install python-certbot-nginx

Des paquets Python vont être installés pour exploiter Certbot. L’utilitaire est ainsi installé en même temps que les outils Python. Nous allons dès maintenant exploiter Certbot pour générer une paire de clé, un certificat et en même temps effectuer la configuration HTTPS nécessaire pour Nginx (sous certaines conditions).

PS : Les commandes de cette partie HTTPS sont tirées directement du site web Certbot à cette adresse.

certbot certonly --authenticator standalone --pre-hook "nginx -s stop" --post-hook "nginx"

Avec cette commande ci dessus, un certificat va être généré et mis dans le dossier « /etc/letsencrypt/live/nom_de_domaine« . C’est dans ce dossier que vous aurez votre paire de clés et le certificat nécessaire pour la configuration HTTPS.
Ouvrez le fichier de configuration du vhost de Moodle (/etc/sites-available/moodle) – nous devons y ajouter la configuration SSL comme suit, dans la rubrique « server {« . De plus, il faut mettre en place une seconde partie « server { » pour forcer la redirection HTTP 80 vers du HTTPS 443.

server {
 listen 80;
 server_name www.moodle.computerz.solutions moodle.computerz.solutions;
 return 301 https://moodle.computerz.solutions$request_uri;
}
server {
  listen 443 ssl;
  listen [::] ssl
  ssl on;
  ssl_certificate /etc/letsencrypt/live/moodle.computerz.solutions/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/moodle.computerz.solutions/privkey.pem;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128$

Lorsque la configuration du vhost nginx est terminée, enregistrez le fichier, contrôlez la configuration (« sudo nginx -t« ) puis rechargez le service web (« sudo systemctl reload nginx« ). Dès à présent, vous avez un serveur web capable de diffuser sur le web l’application Moodle avec la couche SSL.

/!\ l’article n’est pas totalement terminé, des bouts / des explications sont peut être encore manquantes

Via
Moodle official docMoodle nginx doc

Julien H

Passionné depuis toujours par l'informatique, je transforme ma passion en expertise. J'utilise quotidiennement les outils et systèmes Microsoft. Je ne délaisse pas mon côté ouvert, notamment via l'utilisation des OS Debian et Archlinux. L'infosec m'ouvre les yeux sur les enjeux actuels et futurs de l'IT.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Share This
Fermer
Fermer