Déploiement de Nextcloud pour un établissement scolaire
Ci-dessous un exemple de déploiement fonctionnel d'un Nextcloud à destination de 200 élèves (6 à 17 ans) et 50 professeurs.
Pourquoi Nextcloud ?
L'établissement (privé hors contrat) n'ayant pas d'ENT ni d'outils numérique en ligne, il semblait peu envisageable d'utiliser une plateforme type moodle alors que la plupart des professeurs privilégient le papier dans leurs cours (pour des raisons pédagogiques).
Il semblait plus simple d'envisager que les professeurs partagent des documents type traitement de texte ou photos.
Le module de discussion Nextcloud talk permet par ailleurs de maintenir le lien entre toutes les personnes de l'école. Ainsi que d'organiser des réunions audios à 3 personnes (l'optimisation de ce point est en cours).
Retour temporel sur le déploiement
Ce déploiement a été réalisé dans le but d'aider les professeurs à accompagner leurs élèves dans la période de confinement ayant débuté le 17 mars 2020. Elle a été réalisée en peu de temps, suivant ce calendrier:
- Lundi matin: approbation de la mise en place de l'outil
- Lundi après-midi: création d'un fichier CSV des comptes à créer (élèves et professeurs)
- Lundi soir: création du VPS chez Alsace Réseau Neutre, déploiement YunoHost/Nextcloud, premières configurations
- Mardi: activation des comptes des professeurs et accompagnement de ces derniers, optimisation correctives en termes de performances
- Mercredi: ajout de contenus et propositions par les professeurs
- Jeudi: ouverture aux élèves
Configuration matériel
La plateforme est hébergée sur un VPS Alsace Réseau Neutre, l'école étant déjà adhérente de l'association.
Le VPS choisi a les caractèristiques suivantes:
- 4 vcpu
- 4 Go de RAM
- 10G de disques SSD (RAID5+drbd) (pour le système)
- 200G de disque dur (drbd)
- 1 IPv4 et 1 ipv6
- connectivité maximale mutualisée entre les adhérents 100Mbps
Coût du vps chez ARN (24€/mois).
Configuration logicielle
En résumé: Le Nextcloud 18 a été installé avec YunoHost 3.6. Le paquet d'application testing a été utilisé car la version de production est à la version Nextcloud 15 et que ljf qui a fait le déploiement a évalué qu'il y avait plus de stabilité avec la version testing. La configuration standard a été éditée en ce qui concerne le nombre de processus nginx et php-fpm, sans quoi impossible de supporter plus de 5 utilisateurs simultanés.
Pour le déploiement une recette ansible a été utilisée, mais ce n'est pas forcément nécessaire.
Commander un VPS yunohost ou debian stretch
Le VPS a été commandé chez ARN: https://vps.arn-fai.net
NB: il a fallu corriger quelques éléments dans la config du VPS ARN concernant IPv6 et le apt sources list, ces problèmes ont été remontés.
Le VPS d'ARN ne monte pas le disque de 200G, donc je l'ai monté sur /home et j'ai modifié fstab en conséquence.
Création des sous-domaines
yunohost tools postinstall -d adistance.ECOLE.fr yunohost domain add office.ECOLE.fr
Configuration DNS
yunohost domain dns-conf adistance.ECOLE.fr yunohost domain dns-conf office.ECOLE.fr
Il faut répercuter ça dans la zone DNS du domaine chez le registrar (le plus souvent).
Génération des certificats Let's Encrypt
yunohost domain cert-install
Installation Nextcloud
yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing
Note: à l'heure où j'écris ce tuto il faut utiliser la branche testing mais une fois sorti on peut remplacer cette URL par nextcloud.
Optimisation pour supporter la charge
Dans /etc/nginx/nginx.conf
worker_connections 4; # à la place de auto, ici j'ai mis le nombre de vcpu worker_connections 4096; # à la place de 758
Dans /etc/php/7.3/fpm/pool.d/nextcloud.conf
pm.max_children = 100
Installation OnlyOffice
yunohost app install onlyoffice
Installation BorgBackup 1 et BorgBackup 2
yunohost app install borg
yunohost app install borg
Installation Unattended Upgrade
yunohost app install unattended_upgrades
Modules activés
Les modules suivants ont été activés:
- Audio Player : pour lire des audio directement sur la plateforme
- Calendar : en vue de partager des agenda pour chaque classe ou un calendrier de réunion
- Custom CSS : pour faire un petit hack pour supprimer le bouton “#contactsmenu” (on va faire ça mieux après)
- External Sites : pour ajouter le lien vers le webamil des profs et le portail numérique des profs
- Link editor : pour permettre l'ajout de lien cliquable en tant que fichier, permet de mettre un fichier “Visio conf” par exemple
- Plain text editor: éditeur de code pour un cours d'informatique
- OnlyOffice : pour permettre au professeur et élèves d'éditer des documents même via smartphone
- Talk : pour avoir un chat type mattermost et de la visio (réduite) afin de délester les instances jistsi public
Modules désactivés
Les modules suivants ont été désactivés:
- Activity: ce module alourdis l'interface dans ce cas par rapport au gain
- Auditing / Logging
- Comments : Nous ne souhaitons pas que les élèves commentent les fichiers des professeurs
- Contacts : pas l'utilité
- First run wizard: il y avait un bug et nous ne souhaitons pas forcément que tous les élèves mettent en place le logiciel client de synchro
- Photos: pour l'instant pas le besoin
- Recommendations: ce module affiche les fichiers fréquement modifier entre l'aperçu du readme et la liste des fichiers, nous l'avons jugé non souhaitable pour notre usage
Paramétrage de Nextcloud
Arborescence
Il a été choisi de créer un dossier par classe. Dans chacun de ces dossiers les professeurs de classe organisent le contenu de la façon jugée la plus pertinente, le plus souvent un dossier par matière (ou période).
La fonctionnalité Readme de Nextcloud 18 permet de mettre un message de bienvenue et expliquant les instructions.
Groupes et utilisateurs
Des groupes représentant chaque classe ont été créés, ainsi qu'un groupe Professeurs, les comptes ont été ajouté en ligne de commande comme ceci:
cd /var/www/nextcloud sudo -u nextcloud OC_PASS=XXXXX php7.3 ./occ user:add --group='1e classe' --display-name='André Dupont' adupont sudo -u nextcloud php7.3 ./occ user:setting adupont settings email 'adupont@example.com'
Les lignes de commandes ont été générées à partir du tableur, avec la fonction CONCATENER (tout bêtement)
Éviter les fichiers par défauts
rm -Rf /var/www/nextcloud/core/skeleton/*
Options à modifier
Paramètres de base
Il faut configurer l'adresse source et tester la réception du mail.
Partage
Autorisations de partage par défaut, il faut décocher “Créer” “Modifier” “Supprimer” “Repartager” pour éviter que les professeurs se trompent et voient leur travaux supprimés ou édités par les élèves.
Il faut également enlever les options de partage fédérés.
Stockage externe
Il faut enlever les stockages externes multimedia et home configurés par Yunohost
Personnaliser l'apparence
Mettre logo, favicon et photo de l'école
Configurer le CSS suivant:
#contactsmenu { display: none; }
OnlyOffice
Application par défaut pour ouvrir le format : csv, doc, docx, ods, odt, ppt, pttx, rtf, xls, xlsx Ouvrir le fichier pour édition: csv, odp, ods, odt, rtf, txt
Sites externes
Ajout des liens que l'on souhaite. Attention à sélectionner les bons groupes si on veut que ces liens ne soient par exemple visible que des professeurs.
Il y a un bug sur l'ajout d'icône voir section bug plus bas.
Discussion
Le module discussion ne permet pas la modération du chat, nous avons toutefois fait le choix de laisser les élèves créés des discussions et nous agirons si certains ont des comportements inappropriés. Nous pensons qu'en ces temps de confinement, leur permettre d'échanger entre elles et eux est important.
A noter que la visio ne fonctionne qu'avec 3 personnes. Il faudrait ajouter un serveur de signalement (pas encore fait).
Support
Les 2 premiers jours nous avons eu pas mal de support à faire à destination des professeurs notamment pour se connecter.
Cas qui sont arrivés plusieurs fois:
- Erreur de jeton car la personne a cliqué plusieurs fois sur réinitialiser le mot de passe et à cliquer sur le premier mail arrivé
- Incompréhension: tentative de connexion avec le mot de passe de son compte mail de l'école
- Difficultés à comprendre le fonctionnement pour partager les contenus
- Sensibilisation des professeurs pour bien choisir le nom des fichiers pour éviter que les élèves soient perdus
Bugs identifiés à reporter
- La visualisation de l'héritage des permissions affiche un message d'erreur
- Sur certaines tailles d'écrans le menu de gauche du panneau des utilisateurs ne saffiche pas même si on clique sur le menu hamburger
- Le dossier icônes de l'app external site n'est pas créé, il était impossible de charger des icônes, l'opération a été faites en CLI