3. Configuration de Flask et d’Apache#

Le système jupyter nbgrader nécessite la mise en place d’un serveur Apache pour:

  1. la gestion d’un reverse proxy pour rentre accessible le serveur jupyterhub en https vers l’extérieur

  2. la mise en place de l’application flask de gestion des cours

Dans l’environnement virtuel il faut installer les 2 paquets Python

  • Flask serveur d’application Flask

  • mod_wsgi mod apache permettant la gestion d’un serveur Flask

Les fichiers de configuration supplémentaires par rapport à une installation Apache de base sont dans le dépot git:

  • validation_apache2 sous git@forge.univ-lyon1.fr:nbgrader/validation_apache2.git

Les fichiers de configuration Apache à modifier sont à déposer dans le répertoire apache2 /etc/apache2

ils sont dans les sous répertoires suivants:

.
├── conf-available
│   └── flask_cours.conf
├── mods-available
│   ├── wsgi.conf
│   └── wsgi.load
├── README.md
└── sites-available
    └── site_nbgrader.conf

Prudence

évitez si possible les accents dans les fichiers de configuration !

Il faut configurer le site nbgrader à mettre en place en partant du fichier site_nbgrader.conf en modifiant le nom du site.

3.1. autorisation#

l’application flask de gestion de cours utilise des scripts qui se trouvent dans le répertoire bin. Pour l’exécution de certains de ces scripts, il faut autoriser le compte du meta-cours à exécuter des commandes systèmes en utilisant la commande sudo

Pour cela sous Unix, il faut configurer le service sudo dans le répertoire /etc/sudoers.d en créant par exemple un fichier de configuration jupyter

Defaults  secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                        
cours  ALL=(root) NOPASSWD: /home/cours/FlaskApp/bin/purge_cours.sh, /usr/sbin/usermod


qui autorise le compte de meta-cours cours à exécuter les scripts purge_cours.sh et la commande usermod pour modifier les groupes des étudiants (nécessaire pour la gestion des étudiants par groupe). On peut aussi ajouter les scripts set_acl.sh et reset_acl.sh qui sont dans dans FlaskApp/bin pour la gestion des droits acl (Access Control List).

3.2. vérification du service apache2#

la commande systemctl status apache2.service permet de vérifier l’état du service apache2 et doit renvoyer une information du type ci-dessous

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2022-07-22 11:48:25 CEST; 6min ago
     Docs: https://httpd.apache.org/docs/2.4/
  Process: 646 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 723 (apache2)
    Tasks: 91 (limit: 4915)
   Memory: 51.4M
      CPU: 157ms
   CGroup: /system.slice/apache2.service
           ├─723 /usr/sbin/apache2 -k start
           ├─732 Validation-Cours  -k start
           ├─733 Validation-Cours1 -k start
           ├─734 /usr/sbin/apache2 -k start
           └─735 /usr/sbin/apache2 -k start

avec les services de gestion des méta-cours Validation-Cours (application flask)

3.3. configuration de la gestion des cours#

Pour chaque méta-cours, on configure un fichier flask à partir de flask_cours.conf

gestion des cours du meta-cours

sous le compte du meta cours, dans le répertoire principal, on crée un répertoire FlaskApp en clonant le déport git

  • git@forge.univ-lyon1.fr:nbgrader/FlaskApp.git

On configure ensuite l’application (voir README.md), en spécifiant la liste des cours à gérer.

Il faut ajouter le compte du meta-cours dans la liste USERS du fichier update-validation dans \bin de l’environnement virtuel, qui met à jour régulièrement les dépôts git.

répertoire d’échange

Le répertoire par défaut pour échanger des fichiers avec les étudiants est sous /srv/nbgrader/exchanges/nom_cours

Avertissement

attention au permission de ce fichier

par ex pour le cours MGC2005L du meta-cours cours:

drwxr-x—+ 4 cours cours 4,0K févr. 1 11:03 MGC2005L/

Le fichier de purge des cours purge_cours.sh doit aussi avoir les droits sudo , en créant (modifiant) un fichier dans /etc/sudoers.d avec une ligne du type:

cours  ALL=(root) NOPASSWD: /home/cours/FlaskApp/bin/purge_cours.sh

3.3.1. commandes apache2#

  • a2ensite site_nbgrader pour installer le site sous apache

  • a2enconf flask_cours pour installer l’application Flask de gestion du meta-cours

  • a2enmod wsgi pour installer le mod de gestion Flask sous apache

3.4. configuration des cours#

Pour chaque cours on définit un fichier de configuration hub_config.py et un lien dans etc/jupyter/conf.d .

de plus si le cours contient beaucoup d’étudiants (>500), le système de gestion des droits d’accès sous unix (ACL) peut être limité, et on ne peut gérer individuellement avec les ACL un très grands nombres d’étudiants. Dans ce cas , il faut créer un groupe unix ayant le nom du cours, par exemple pour le cours MGC2367M

groupadd MGC2367M

ensuite la gestion des droits d’accès aux cours par les étudiants se fait à partir du groupe.

Pour repasser à une gestion classique étudiant par étudiant, il suffit d’effacer le groupe avec la commande:

groupdel MGC2367M