Nutmeg est la dernière version nommée Open edX. Il est sorti le 9 juin 2022. Dans cet article, nous examinerons les modifications récentes apportées à l'expérience de l'opérateur et du développeur (c'est-à-dire les personnes qui écrivent du code pour Open edX ou déploient une instance Open edX). Cela inclut certaines des modifications les plus récentes et les plus importantes de Tutor, un coup de projecteur sur les événements et les filtres Open edX, et quelques notes critiques concernant les dépréciations, les suppressions et les mises à jour de sécurité.

Faits saillants du tuteur

Les changements apportés à Tutor depuis la version de Maple sont détaillés sur le Journal des modifications du tuteur – versions 13.0.1 à 14.0.0. Certains faits saillants sont :

Fonctionnalités et améliorations du tuteur

  • Une nouvelle et élargie API du plug-in "Version 1" autour de l'idée de "crochets", qui sont des points d'extension qui permettent aux plugins de réagir aux actions de Tutor et de modifier le comportement de Tutor à l'aide de filtres de données. L'ancien API du plug-in "Version 0" est toujours pris en charge, bien que les développeurs de plugins soient encouragés à passer à la nouvelle API.
  • Instructions plus complètes lors de la mise à niveau
  • Plusieurs nouvelles commandes :
    • `tutor k8s apply` : une interface directe avec `kubectl apply`
    • `tutor [dev|local|k8s] status` : fournit l'état des informations système
    • `tutor dev quickstart` : une variante de `tutor local quickstart` qui réduit les frictions dans le processus de configuration du développement
    • `tutor [local/dev] copyfrom` : copie le contenu d'un conteneur
    • -m/–mount` : une option ajoutée à plusieurs commandes locales et dev pour lier automatiquement les dossiers de montage à partir de l'hôte, remplaçant l'ancienne commande `bindmount` et les options `–volume`.
  • `tutor dev start SERVICE` autorise désormais l'attachement au service pour le débogage des points d'arrêt.
  • Le démarrage des conteneurs `dev` arrête désormais les conteneurs `local`, et vice versa.
  • Possibilité d'installer des packages personnalisés et d'exécuter des commandes en tant que root dans l'image Docker
  • Possibilité de remplacer `EDX_PLATFORM_REPOSITORY` et `NPM_REGISTRY` via `config.yml` au lieu d'arguments de construction Docker.
  • Possibilité de masquer les cours de la page de recherche /course du LMS en définissant la visibilité des cours sur « aucune » dans Studio.
  • Les notes persistantes sont désormais activées par défaut.

Dépréciations du tuteur et modifications avec rupture

  • `tutor dev runserver` est obsolète au profit de `tutor dev start`.
  • `tuteur k8s exec " ”` (avec guillemets) est obsolète ; utilisez plutôt `tutor k8s exec `. Cela correspond à la syntaxe de `tutor local exec `.
  • Suppression de la prise en charge de la variable d'environnement `TUTOR_EDX_PLATFORM_SETTINGS`. Il est maintenant recommandé de créer un plugin à la place.
  • lms.env.json & cms.env.json sont maintenant `lms.env.yml` & cms.env.yml; Les développeurs de plugins doivent reformater plusieurs correctifs pour utiliser le format YAML.

Et plusieurs correctifs de sécurité et de bogues Tutor ; voir le Journal des modifications du tuteur – versions 13.0.1 à 14.0.0 pour plus.

Ouvrir les événements et les filtres edX

Ouvrir les événements et les filtres edX ajouter une nouvelle façon d'étendre le noyau sans avoir à se soucier des composants internes de la plate-forme edx (ce travail fait partie de OEP-50 : cadre d'extension des crochets).

  • Open edX Events : cette version standardisée de Django Signals permet aux développeurs d'étendre les fonctionnalités de la plate-forme simplement en écoutant l'événement envoyé après la fin d'un processus clé, par exemple après l'inscription, la connexion, l'enregistrement, etc.
  • Filtres edX ouverts : via la configuration uniquement, les développeurs d'extensions peuvent définir une liste de fonctions à exécuter avant le démarrage d'un processus clé, par exemple avant l'inscription, la connexion, l'enregistrement, etc.

Pour plus d'informations, lisez l'OEP, les Documentation, ou regardez Felipe Montoya Présentation de la conférence Open edX 2022 sur le contexte, l'architecture et l'utilisation de ce produit.

Commande de gestion importante à exécuter et variable de configuration à définir

Une amélioration des performances internes appelée "séquences d'apprentissage" a été opt-in pour quelques versions, mais est désormais toujours active pour Nutmeg. Si vous avez des cours qui n'ont pas été republiés sur Koa ou plus tard, exécutez la commande simulator_publish cms django sur vos cours avant la mise à niveau, pour remplir les données de la séquence d'apprentissage.

Le fait de ne pas définir la valeur de configuration CLOSEST_CLIENT_IP_FROM_HEADERS peut entraîner une limitation du trafic légitime ou l'échec du blocage des attaques par force brute, selon la configuration de votre proxy.

Dépréciations et suppressions

Les dépréciations et suppressions suivantes ont été effectuées depuis la version de Maple :

  • Le référentiel edx-certificates a été archivé
  • Bok-choy (une plateforme de test) a été archivé
  • La bibliothèque django-ratelimit-backend a été supprimée de la plate-forme edx ; le backend standard django-ratelimit est maintenant utilisé. Cela a pour effet secondaire de supprimer la fenêtre de connexion par défaut de l'administrateur Django ; les utilisateurs doivent maintenant se connecter d'abord via le LMS.
  • L'accès au cours "Old Mongo" a finalement été entièrement supprimé. Cela signifie que les séquences de cours qui ont des clés comme Org/Cours/Run plutôt que course-v1:Org+Cours+run (visible dans l'URL de n'importe quelle page de cours) ne sont pas accessibles aux apprenants.

Pour plus d'informations à ce sujet, veuillez consulter le Dépréciations et suppressions section de la page wiki Nutmeg.

Améliorations de la sécurité

Il y a deux améliorations de sécurité majeures à comprendre : une nouvelle valeur de configuration (CLOSEST_CLIENT_IP_FROM_HEADERS) qui doit être définie et les modifications apportées au SafeSessionMiddleware qui nécessitent une attention particulière avant la mise à niveau vers Nutmeg.

  • CLOSEST_CLIENT_IP_FROM_HEADERS est une nouvelle valeur de configuration que tous les déploiements doivent définir.
    • Ne pas le définir peut entraîner une limitation du débit du trafic légitime ou l'échec du blocage des attaques par force brute, selon la configuration de votre proxy.
    • Il s'agit d'un paramètre ayant un impact sur la sécurité qui indique à votre déploiement comment déterminer l'adresse IP du client. Voir openx.core.djangoapps.util.ip pour la documentation sur comment (et pourquoi) configurer cela (ainsi que le paramètre NUM_PROXIES associé pour django-rest-framework).
  • SafeSessionMiddleware est un middleware existant qui fournit plusieurs protections contre les vulnérabilités pouvant résulter de mauvaises configurations de cache ou d'autres bogues entraînant l'obtention par un utilisateur de la session d'un autre utilisateur.
    • Auparavant, si une incompatibilité d'utilisateur était détectée entre la requête ou la session et la réponse, le middleware enregistrait des avertissements ; maintenant, il invalidera la session et enverra une réponse d'erreur. La bascule ENFORCE_SAFE_SESSIONS est activée par défaut, mais peut être désactivée pour revenir uniquement aux avertissements de journalisation.
    • Avant de passer à Nutmeg : Vérifiez que vos logs ne contiennent pas d'avertissements commençant par « SafeCookieData user at request », ou que ces avertissements sont très rares. S'ils sont courants, il y a probablement un faux positif causé par une connexion personnalisée, un masquage ou un code d'enregistrement qui doit appeler mark_user_change_as_expected. Sinon, les demandes valides peuvent être rejetées.

Pour plus d'informations, consultez le notes de version au sein de l’ Page wiki de la noix de muscade.

 419 vues totales