Modes en lecture seule dans Discourse

:bookmark: Ce guide explique les différents modes en lecture seule disponibles dans Discourse, comment les activer et les désactiver, ainsi que les scénarios dans lesquels vous pourriez souhaiter utiliser chaque mode.

:person_raising_hand: Niveau utilisateur requis : Administrateur

La gestion d’une communauté en ligne dynamique sur Discourse nécessite parfois que les administrateurs limitent temporairement les activités des utilisateurs. Ces situations peuvent aller de la maintenance du serveur à la réalisation de sauvegardes, en passant par la migration de serveurs. Pendant ces périodes, il est crucial de restreindre les activités du forum sans pour autant couper l’accès aux utilisateurs.

Discourse propose divers modes en lecture seule que les administrateurs peuvent activer pour figer temporairement différents types d’interactions au sein d’un site.

Ce guide explore ces modes, en se concentrant spécifiquement sur leur activation et leur désactivation, y compris la gestion des situations où certains modes se chevauchent.

Comprendre les modes en lecture seule

Discourse prend en charge deux niveaux distincts de modes en lecture seule, adaptés aux différents besoins administratifs. Il s’agit de :

  1. Mode Lecture Seule Complet
  • Restreint toutes les opérations d’écriture dans le forum, empêchant tout utilisateur de créer ou de modifier du contenu, comme publier, commenter ou aimer.
  • Permet de « figer » essentiellement le forum dans son état actuel, permettant aux utilisateurs de lire et de naviguer dans le contenu existant sans affecter la base de données.
  • Empêche la modification des paramètres du site ou des personnalisations administratives afin de préserver l’état actuel de la base de données.
  • Désactive les nouvelles connexions au forum pour les utilisateurs réguliers. Les administrateurs peuvent toujours se connecter en utilisant le flux de connexion par e-mail admin (/u/admin-login).
  • Les appels API peuvent lire (GET), mais ne peuvent pas écrire (POST/PUT/DELETE).
  • Les webhooks sortants mis en file d’attente seront livrés, mais aucun nouveau webhook ne sera déclenché car les actions les provoquant seront bloquées.
  • Les webhooks entrants (rebond d’e-mail) seront bloqués avec une réponse 503. Les fournisseurs de services e-mail réessaieront selon leurs propres calendriers de rétrogradation.
  1. Mode Écritures Staff Uniquement
  • Restreint les utilisateurs standards des opérations d’écriture dans le forum, telles que la publication, le commentaire ou le like. Les utilisateurs non membres du personnel sont limités aux opérations en lecture seule, mais peuvent toujours se connecter à leurs comptes.
  • Permet aux activités des administrateurs et des modérateurs de se poursuivre normalement. Les administrateurs peuvent modifier les paramètres du site, et les membres du personnel peuvent effectuer des opérations d’écriture comme publier, aimer ou modifier des profils.
  • Les appels API peuvent lire (GET). Seules les clés API du personnel peuvent écrire (POST/PUT/DELETE).
  • Les webhooks sortants mis en file d’attente seront livrés. Les actions du personnel peuvent déclencher de nouveaux webhooks sortants qui seront également réussis, mais aucune action d’un utilisateur non membre du personnel ne déclenchera de webhooks.
  • Les webhooks entrants (rebond d’e-mail) seront bloqués avec une réponse 503. Les fournisseurs de services e-mail réessaieront selon leurs propres calendriers de rétrogradation.

Ces modes garantissent une flexibilité dans la gestion de l’opérabilité du forum pendant les périodes administratives critiques.

Comment activer/désactiver les modes en lecture seule

:warning: Les administrateurs doivent gérer soigneusement la transition entre les différents modes en lecture seule. Avant d’activer un mode en lecture seule, assurez-vous que tout mode précédemment activé est désactivé.

Mode Lecture Seule Complet

Via la console Rails

Si vous avez accès à votre installation Discourse, utilisez l’interface de ligne de commande Discourse Rails pour exécuter la commande suivante après avoir entré votre conteneur Docker avec ./launcher enter app, puis la console Rails avec rails c :

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Via le panneau d’administration

Si vous avez un accès administratif via l’interface web, vous pouvez naviguer vers Admin > Sauvegardes > Activer le mode lecture seule pour activer le mode lecture seule.

Pour désactiver le mode Lecture Seule, exécutez la commande Rails suivante :

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Ou, utilisez le panneau d’administration en naviguant vers Admin > Sauvegardes > Désactiver le mode lecture seule.

Mode Écritures Staff Uniquement

:discourse: Le mode Écritures Staff Uniquement ne peut être activé/désactivé que depuis la console Rails de Discourse. Si votre site est hébergé par Discourse, veuillez contacter team@discourse.org si vous souhaitez activer ou désactiver l’un de ces modes.

Pour activer le mode Écritures Staff Uniquement, utilisez la commande suivante dans la console Rails :

Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Pour désactiver :

Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Bonnes pratiques

  • Communication opportune : Informez votre communauté des périodes de lecture seule prévues à l’avance pour établir des attentes appropriées.
  • Tests : Avant de mettre en œuvre ces modes lors d’opérations critiques, effectuez des tests pendant les périodes de faible trafic pour comprendre leur impact.
  • Documentation : Tenez des registres détaillés de la date et de la raison pour laquelle chaque mode a été activé ou désactivé afin d’aider à la planification opérationnelle future.

FAQ

  • Combien de temps faut-il pour activer/désactiver le mode Lecture Seule ?

    • Le changement est immédiat. Cependant, l’expérience utilisateur peut varier légèrement en fonction de leurs actions pendant la période de transition.
  • Aide ! Je suis exclu de mon site à cause du mode lecture seule - que puis-je faire pour y accéder à nouveau ?

  • J’ai remarqué qu’il existe d’autres modes READ-ONLY listés dans discourse/lib/discourse.rb, que font-ces modes ?

    • READONLY_MODE_KEY est principalement utilisé pour le processus de sauvegarde et de restauration et est déclenché par l’application elle-même. Ce mode peut également être activé ou désactivé depuis l’interface de ligne de commande Discourse avec discourse enable_readonly et discourse disable_readonly. Cependant, cette clé ne survivra pas au redémarrage d’un conteneur.
    • USER_READONLY_MODE_KEY est utilisé lorsqu’un administrateur clique sur le bouton lecture seule dans l’interface d’administration. La particularité de cette clé est que nous ne la définissons pas comme une clé expirable, car la lecture seule activée par un utilisateur doit survivre aux redémarrages de conteneurs. Les autres clés sont définies avec un TTL (60 secondes pour READONLY_MODE_KEY, 300 secondes pour PG_READONLY_MODE_KEY) et nous avons un thread pour étendre l’expiration toutes les 30 secondes afin de garantir qu’une application ne reste jamais bloquée en mode lecture seule.
    • PG_READONLY_MODE_KEY et PG_FORCE_READONLY_MODE_KEY sont utilisés pour la bascule PG. Le premier est défini comme une clé expirable, tandis que le second est non expirable.
9 « J'aime »

Je ne vois pas de différence ! Ces descriptions pourraient-elles être ajustées en conséquence, s’il y a effectivement une différence ?

1 « J'aime »

J’ai mis à jour le guide pour apporter des précisions supplémentaires à ce sujet. N’hésitez pas à nous faire savoir si vous avez encore des questions sur les modes lecture seule. :slightly_smiling_face:

1 « J'aime »

Mais que fait discourse enable_readonly ?

Il utilise READONLY_MODE_KEY, qui définit ce ttl à 60, donc il se désactive à un moment donné. Maintenant, je vois que

Y a-t-il une raison pour que ce soit le comportement par défaut de cette commande ? Il m’a fallu près d’une décennie pour apprendre que cette commande est totalement différente du mode lecture seule de l’interface web, même après m’être fait avoir plusieurs fois. Et je me souviens maintenant que quelqu’un a essayé de me parler de ces clés une fois et que je n’ai pas réussi à comprendre leur importance.

IMHO, une chose beaucoup plus sensée pour discourse enable_readonly serait de faire un Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY). J’aurais aimé le remarquer il y a de nombreuses années !

Pourrais-je soumettre une PR quelque chose comme ceci :

  desc "enable_readonly", "Activer le mode lecture seule, autorisant les écritures du personnel"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'Le site est maintenant en mode lecture seule avec les écritures du personnel autorisées.'
  end

Je ne suis pas très familier avec cela, mais je pense que ce serait déroutant que enable_readonly_mode mette le site en mode staff_writes_only_mode. Ce sont des modes différents. Lors de certaines opérations, vous ne voudriez pas que le personnel soit autorisé à écrire dans la base de données (lors d’une restauration, par exemple, ils seront supprimés).

Peut-être pouvons-nous faire quelques autres choses ici :

  1. clarifier que le mode lecture seule définit un TTL dans la description de cette tâche
  2. ajouter une tâche qui invoque keep_readonly_mode afin qu’elle puisse être étendue à plus de 60 minutes
  3. ajouter les tâches enable_staff_writes_only et disable_staff_writes_only
2 « J'aime »

Je serais d’accord, mais ce serait beaucoup moins déroutant que “mettre le mode lecture seule pendant un certain temps”.

Je suis à peu près sûr que le script de restauration met lui-même le mode lecture seule, donc il n’est pas affecté par cette commande.

Je préférerais qu’il proclame qu’il est défini pour X minutes lorsqu’il est défini. Il n’est pas si facile de trouver la description.

Peut-être. Je ne suis pas sûr de qui l’utiliserait.

Ce serait génial !

De plus, nous devons être clairs sur le fait que nous ne confondons pas les tâches rake avec les commandes disponibles via la commande discourse.

2 « J'aime »

C’est logique. Y a-t-il une chance que vous puissiez soumettre cela sous forme de PR ? Idem pour les commandes enable_staff_writes_only et disable_staff_writes_only, si possible. Merci !

3 « J'aime »

Je me demande quelles horloges s’arrêtent après le passage en lecture seule ? Les augmentations de sujets se produiront-elles après le passage en lecture seule ?

il semble également que les mises à jour ne fonctionnent pas si le mode lecture seule est activé par l’interface utilisateur web

Il semble que l’interface utilisateur ait été mise à jour, car je ne vois plus l’option pour désactiver le mode lecture seule dans la section Sauvegardes administrateur. Comment puis-je le désactiver via l’interface utilisateur ?

C’est étrange. Je vois les boutons Activer et Désactiver, et ils fonctionnent parfaitement. Pourriez-vous m’envoyer une capture d’écran de ce que vous voyez ?

Bonjour @Lucian_Chung,

Veuillez également indiquer si votre site est auto-hébergé ou hébergé par Discourse, et dans ce dernier cas, sur quel forfait. La désactivation du mode lecture seule depuis l’interface n’est pas une option dans certaines conditions sur un site hébergé.