5.3. configuration Jupyterhub pour le système « validation »#

  • configuration de jupyterhub avec le système de validation de cours

les fichiers de configuration systemd sont à placer dans /etc/systemd/system

5.3.1. configuration#

les fichiers de configuration jupyter sont sous l’environnement jupyter dans $VIRTUAL_ENV/etc/jupyter

Le principal fichier de configuration est jupyterhub_config.py

Dans conf.d , on a les fichiers de configurations des services gérées par jupyterhub, à savoir les applications flask de gestion des cours et les cours.

Le service jupyterhub (qui lance jupyterhub) exécute un script start_jupyterhub, qui se trouve $VIRTUAL_ENV/etc/jupyter, et qui permet de lancer jupyterhub dans l’environnement virtuel.

attention dans $VIRTUAL_ENV/var se trouvent des fichiers jupyterhub.pid et proxy.pid que l’on peut supprimer en cas de problème avant de redémarrer le service.

5.3.2. mise à jour jupyterhub#

version 2.3.1

pip3 install jupyterhub==2.3.1
cd /var/lib/jupyterhub/venvs/py3.9/etc/jupyter
jupyterhub upgrade-db
# attention modif repertoire exchange (chgt defaut)
cd /usr/local/share
ln -s /srv/nbgrader .

il faut mettre à jour validation_flask et la configuration apache (module apache headers.load)

    RequestHeader     set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

5.3.3. mise à jour nbgrader#

  • update nbgrader

pip3 install nbgrader==0.7.1
jupyter nbextension install --sys-prefix --py nbgrader --overwrite
jupyter nbextension enable --sys-prefix --py nbgrader
jupyter serverextension enable --sys-prefix --py nbgrader
  • build jupyterlab

jupyter lab build

5.3.4. limitation cpu/mémoire / arret en cas d’inactivite#

dans jupyterhub.service

c.SystemdSpawner.mem_limit = '2G'
c.SystemdSpawner.cpu_limit = 2

l’utilisation de SystemdSpawner permet l’isolation des processus utilisateurs en utilisant les cgroups Unix et la limitation cpu et memoire

le service cull-idle permet d’arreter les serveurs inactifs pendant 1h=3600s

c.JupyterHub.services = [
        {
       'name': 'cull-idle',
       'admin': True,
       'command': [
           VIRTUAL_ENV+'/bin/python3',
           '-m', 'jupyterhub_idle_culler',
           '--timeout=3600'
           ]
       }
    ]

Configuration d’un choix au démarrage entre version classique et jupyterlab en incluant

#c.Spawner.default_url = '/lab'
#c.Spawner.default_url = '/tree'
c.Spawner.cmd = [VIRTUAL_ENV + '/bin/jupyterhub-singleuser',
                 # '--SingleUserNotebookApp.default_url=/tree', # → done in form
                ]

et en copiant le fichier form_config.py dans conf.d

5.3.5. mise ajour automatique des services#

la configuration de mise ajour automatique des services se fait avec update-validation.service

On configure le service en spécifiant la liste des noms des meta-cours (entre  » « ) pour la mise ajour de flask

ExecStart=/var/lib/jupyterhub/venvs/py3/bin/update-validation.sh "cours  ..."

5.3.6. authentification#

Par défaut jupytherhub utilise PAM, dont le fichier de configuration est dans /etc/pamd.d/jupyter-pam.

Le système d’authentification Unix PAM utilise la base LDAP de l’université pour vérifier le compte et fournir des informations sur le statut (personnel ou étudiant).

On peut aussi utiliser LTI pour utiliser l’authentification avec le LMS Moodle (voir le site jupyterhub/ltiauthenticator)

5.3.7. extension containDS dashboard#

A Dashboard publishing solution for Data Science teams to share results

installation extension dashboard

pip3 install cdsdashboards
pip3 install jhsingle-native-proxy

modification dans jupyterhub_config.py

# replace
#  Should be a subclass of Spawner.
#c.JupyterHub.spawner_class = 'systemdspawner.SystemdSpawner'
#
# avec cdsdashboard
#
c.JupyterHub.spawner_class = 'cdsdashboards.hubextension.spawners.variablesystemd.VariableSystemdSpawner'
c.SystemdSpawner.unit_name_template = 'jupyter-{USERNAME}{DASHSERVERNAME}'
#
# add at the end
#
# cdsdashboard
#
c.CDSDashboardsConfig.builder_class = 'cdsdashboards.builder.processbuilder.ProcessBuilder'

from cdsdashboards.app import CDS_TEMPLATE_PATHS
from cdsdashboards.hubextension import cds_extra_handlers

c.JupyterHub.template_paths = CDS_TEMPLATE_PATHS
c.JupyterHub.extra_handlers = cds_extra_handlers

5.3.8. Authors and acknowledgment#

Marc BUFFAT, dpt mécanique, Université Lyon 1

5.3.9. License#

Projet sous licence libre, mais sans garantie

5.3.10. Project status#

projet en cours de développement