Chamilo est un logiciel (libre) de gestion de l’apprentissage, ou LMS (Learning Management System, en anglais) très versatile et simple d’utilisation.
Il est développé principalement par BeezNest et d’autres fournisseurs officiels de Chamilo y contribuent, alors que l’association Chamilo se concentre sur la diffusion de son existence au travers de publications et d’organisation d’événements communautaires.
Dans cet article, nous repassons de façon succinte et relativement technique, sans détours d’explications sur ce qu’est le cloud ou ce qu’est un serveur de base de données, sur la procédure d’installation de Chamilo sur les serveurs virtuels du service « Cloud » de Gandi.net, en mettant l’accent sur une configuration flexible et extensible.
Dans cette optique, nous installerons donc un serveur web et un serveur de bases de données séparés, chacun avec un disque de données indépendant, de telle sorte qu’on puisse, plus tard, réutiliser chacun des composants et les agrandir ou multiplier afin de suivre l’évolution de notre portail web. Ce guide est écrit en octobre 2016, donc selon la date de lecture, vous pourriez avoir à prendre en compte de sérieuses modifications visuelles ou de mesures. À vous de voir.
La procédure de base se découpe donc en une série de phases assez simples, puisque toutes au niveau de l’interface web de Gandi, d’autant que Gandi nous offre, au travers d’un simple formulaire d’explication de notre projet, 30.000 « crédits » que nous pourrons dépenser gratuitement pour tester l’infrastructure.
Etape 1: Créer un compte chez Gandi
Si vous n’avez pas de compte Gandi, dirigez-vous sur https://www.gandi.net/contact/create et créez votre compte en français.
Une fois le compte créé, identifiez-vous.
Etape 2: Demander vos 30000 crédits gratuits
Une fois loggé, cliquez sur « Serveurs » (dans la seconde barre de navigation en onglets, sous « Services »). Suivez les liens pour activer votre compte d’hébergement et demander des crédits (attention, le lien est assez discret, mais vous y parviendrez).
Etape 3: Créer vos serveurs
Pour Chamilo, nous recommandons plutôt (pour des raisons de gestion de paquets et de permissions par défaut) l’utilisation de Debian ou Ubuntu. Dans ce cas-ci, nous utiliserons Ubuntu 16.04 parce qu’il offre PHP 7.1 et que PHP 7.1, c’est plus drôle que PHP 5.x.
Cliquez sur « Créer un serveur »
Dans le formulaire suivant, il faudra indiquer les spécifications du serveur. Comme on va directement commencer avec un serveur pour un millier d’apprenants, on va y aller franchement et prendre 4 CPUs + 4GB de RAM. Comme ce premier serveur sera le serveur web et que, pour l’instant, on n’utilisera pas d’accélérateur web, on va prendre une interface IPv4. Nous choisissons un centre de données en France (pour un hébergement en France, ça vaut mieux) et d’augmenter l’espace disque à 30GB, histoire de pouvoir y conserver les logs du serveur web pendant quelques années. Plus tard, on rajoutera un disque en plus pour les données, mais pour l’instant ce sera tout.
Sur la page suivante, il nous faut choisir la distribution (Ubuntu 16.04), le nom du disque système de 30GB qu’on a défini à l’étape antérieure (petite erreur dans le formulaire ici qui m’indique encore 3GB), ainsi que le nom de la machine (celui-ci sera défini comme le nom de la machine dans notre terminal Linux par la suite – on peut changer ça mais c’est pas tout simple et il vaut mieux l’avoir bien choisi du premier coup), le nom de l’utilisateur admin (mieux vaut éviter « admin » ou « root » qui sont très communs) et son mot de passe.
On a le choix entre:
- mot de passe
- clef SSH
- clef SSH + mot de passe
Si vous ne savez pas ce que c’est une clef SSH, mieux vaut tout simplement choisir « mot de passe », ou aller lire un autre tuto sur ce que c’est une clef SSH et à quoi ça sert. Pas de problème avec le mot de passe, simplement. Après tout, c’est une clef d’identification comme une autre (un petit peu moins sécurisée mais on est juste dans un tuto rapide, là… pas besoin de sécuriser à mort non plus).
Si vous choisissez « clef SSH », cependant, pensez à sélectionner l’option « clef SSH + mot de passe », parce que sinon vous allez coincer plus tard, au moment de passer en mode « root » sur le serveur: Gandi prétend qu’on doit utiliser le mot de passe indiqué à cette étape, mais en fait il n’y en a aucun, et du coup on ne peut pas devenir root. C’est bête et ça fait perdre du temps, donc: « clef SSH + mot de passe ». Après, sous Linux, vous pourrez modifier les options pour interdire le login par mot de passe, mais ici on veut aller vite.
On confirme avec le bouton en bas à droite, et voilà le travail!
La même procédure peut être suivie pour le serveur de bases de données (à peu de choses près, qui dépendent essentiellement de vous).
Même si la machine de base de données n’a pas *vraiment* besoin d’une IP publique, il semblerait qu’il y ait des petits soucis pour accéder au serveur MySQL depuis le serveur web seulement avec une IPv6 (gratuite). Il faudra donc penser à assigner une adresse IPv4 au serveur de base de données également.
Le résumé des machines créées indique que la machine est en cours de création. La page ne se met pas à jour toute seule, donc il faudra penser à rafraîchir si vous attendez que la machine soit créée.
Étape 4: ajout de disques de données
Comme on voudrait stocker des données (fichiers uploadés dans Chamilo et données de la base de données) sur chacun des serveurs, nous ajouterons un disque un peu plus grand (et réservé aux données) à chacune de ces machines. L’ajout d’un disque « par la suite » nous permet de configurer une politique de snapshots qui nous serviront de backups par la suite (soyons prudents, avec les machines virtuelles, on n’est jamais à l’abri d’un gros souci).
Dans l’onglet « Disques », on retrouve les 2 disques système de 30 GB créés pendant la création des VMs.
Nous allons donc créer 2 disques: un de 200GB pour Chamilo (on prévoit gros), et un autre de 50GB pour la base de données. Notez que les dimensions des disques peuvent apparemment varier très facilement, donc on peut commencer petit et augmenter par la suite. Si cela peut être fait « à chaud » ou pas est une autre histoire.
Cliquons sur le bouton « Créer un disque » en bas à droite.
On remplit alors le formulaire. Pour plus de clarté, mieux vaut donner un nom en relation avec l’objectif de la VM sur laquelle le disque va être monté. Ici, nous donnons le nom « webshare » pour indiquer un disque partagé pour le(s) serveur(s) web. Si la VM se trouve en France, ce serait bête de mettre le disque au Luxembourg (latence inutile). La taille dépend de ce qu’on veut en faire.
Finalement, les options de snapshots sont très intéressantes, puisqu’elles permettent notamment de fonctionner comme un backup (une copie par jour pendant 7 jours). Notez que le prix varie selon l’option de snapshot choisie, et que celle-ci n’est pas obligatoire. Encore une fois, à vous de voir… La dernière option (Activer la répulsion) n’est utile que pour des configurations franchement complexes, donc nous passerons ici, mais merci à Gandi d’y avoir pensé!
On peut suivre exactement la même procédure pour le disque qu’on utilisera pour la base de données (en changeant le nom du disque). En revenant sur la liste des disques, on pourra maintenant sélectionner, à l’aide de l’icône de maillon, la VM à laquelle on souhaite attacher chaque disque.
La popup de sélection de la VM apparaît. Rien de compliqué.
La liste des disques apparaît maintenant avec une icône de maillon cassé à côté de chacun des disques de données. Cette icône nous permettra, plus tard, de dissocier un disque d’une VM.
Notez qu’on ne peut apparemment pas, à ce stade, partager de disque entre plusieurs VMs. C’est une limitation qui existe chez de nombreux fournisseurs Cloud, donc pas de surprise (positive) ici. Pour avoir plusieurs machines web qui accèdent au même disque de données, il nous faudra redoubler d’ingéniosité, mais étant donné qu’une VM peut monter jusqu’à 16 coeurs, on devrait être relax avec Chamilo pour quelques dizaines de milliers d’utilisateurs avant d’avoir de gros soucis de charge.
Étape 5: Configurer les VMs en ligne de commande
Voilà, une fois les machines configurées, il suffira de retourner sur la liste des « serveurs », de noter les adresses IP de chacun d’entre eux (ou de vérifier votre boîte mail, parce qu’un mail pour chacune des VMs créées devrait vous y attendre) et de vous y connecter en SSH:
- ssh [utilisateur@]95.142.168.166 par exemple
Une fois connecté, suivre la liste des commandes suivantes et confirmer quand c’est nécessaire:
su –
apt-get update
apt-get -y upgrade
Ensuite il y a une différence entre le serveur web et le serveur de base de données.
Sur le serveur web:
echo « deb http://ppa.launchpad.net/ondrej/php/ubuntu xenial main » >> /etc/apt/sources.list/ondrej.list
echo « deb-src http://ppa.launchpad.net/ondrej/php/ubuntu xenial main » >> /etc/apt/sources.list/ondrej.list
apt-get update
apt-get install -y apache2 libapache2-mod-php7.0 php-pear php7.0-dev php7.0-gd php7.0-curl php7.0-mysql php7.0-zip php7.0-intl php7.0-mbstring php7.0-acpu mysql-client vim screen make libicu-dev build-essential
cd /var/www
wget https://github.com/chamilo/chamilo-lms/releases/download/v1.11.0/chamilo-lms-1.11.0.tar.gz
tar zxf chamilo-lms-1.11.0.tar.gz
rm chamilo-lms-1.11.0.tar.gz
rm -rf html
mv chamilo-lms-1.11.0 html
cd html
chmod -R 0777 app main/default_course_document/images/ main/lang/ web
vim /etc/apache2/sites-available/000-default.conf
Après le « DocumentRoot /var/www/html », ajouter ce qui suit:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>php_admin_value date.timezone « Europe/Paris »
Sauver et sortir avec ESC+:wq+enter, puis lancer:
a2enmod rewrite
service apache2 restart
Sur le serveur DB:
apt-get install mysql-server mysql-client vim screen (donner un mot de passe – 2 fois – pour le compte « root » de la base de données)
vim /etc/mysql/mysql.conf.d/mysqld.cnf (et changer une ligne qui dis « bind-address=127.0.0.1 » en « bind-address=0.0.0.0″ », puis sauver avec ESC+:wq+enter)
mysql -u root -p (indiquer le mot de passe)
mysql> GRANT ALL PRIVILEGES ON chamilo.* to chamilo@'[ip du serveur web]’ IDENTIFIED BY ‘mot-de-passe’;
mysql> CREATE DATABASE chamilo;
mysql> FLUSH PRIVILEGES;
mysql> exit
service mysql restart
Enfin, sur le serveur web (pour configurer Chamilo), on va simplement charger la page d’installation de Chamilo. Il y a différentes techniques pour faire ça, mais disons que la plus simple (vraiment) est d’utiliser directement l’adresse IP publique du serveur et d’attendre une demi-seconde que la page d’installation de Chamilo se charge.
Étape 6: Installation de Chamilo
Il suffit de suivre les écrans de l’installateur, un par un en suivant bien les instructions, et le tour est joué: Chamilo 1.11 installé sur le Cloud de Gandi!
Remarques
Vous aurez remarqué que, pour ce tutoriel, j’ai parlé de créer des disques additionnels pour les données mais qu’au final je ne les ai pas utilisé… Pour pouvoir en faire usage, il nous faudra éditer le fichier /etc/fstab sur chacun des serveurs et, à l’aide de la commande « fdisk -l », vérifier quelle partition monter où. Notez qu’à la différence des partitions « normales » de Linux, celles exposées par les VMs de Gandi n’utilisent pas de numéro (/dev/sda et non pas /dev/sda1), et que Gandi dimensionne la mémoire RAM de chaque machine comme des partitions différentes de 64MB chacune (ça en fait un paquet, oui). Je laisse donc cette tâche comme exercice pour les curieux.
Typiquement, on fera quelque chose comme ceci:
vim /etc/fstab (édition pour ajouter une ligne /dev/sdc /var/www [..])
umount /srv/webshare
cd /var/
mv www www2
mkdir www
mount www
mv www2/* www/
rm -rf www2
…et le tour est joué!
Comme vous avez pu le constater, l’installation de Chamilo chez un fournisseur avec lequel nous n’avons pas l’habitude de gérer d’hébergement n’a pas été extrêmement difficile (vu que nous avons pu l’expliquer en seulement quelques pages de blog). Cela dit, c’est à partir de là que les choses peuvent se compliquer. Pour rendre votre portail Chamilo totalement extensible, il sera nécessaire de partager le disque entre plusieurs machines virtuelles, et d’utiliser des balanceurs de charge avant les VMs web. Enfin, pour optimiser votre portail, il sera possible d’augmenter le temps durant lequel les ressources pourront rester en mémoire cache du navigateur, de diminuer la quantité de ressources à télécharger, d’utiliser des icônes SVG, d’optimiser l’utilisation de mémoire RAM sur le serveur, de réduire le temps d’exécution des queries, etc.
Pour tous ces services, n’hésitez pas à nous contacter. Nous sommes les experts incontestables en termes d’implémentations de Chamilo.