Modos de solo lectura en Discourse

:bookmark: Esta guía explica los diversos modos de solo lectura disponibles en Discourse, cómo habilitarlos y deshabilitarlos, y los escenarios en los que podría desear utilizar cada modo.

:person_raising_hand: Nivel de usuario requerido: Administrador

Gestionar una comunidad en línea vibrante en Discourse ocasionalmente requiere que los administradores limiten temporalmente las actividades de los usuarios. Estas situaciones pueden ir desde realizar mantenimiento del servidor, facilitar copias de seguridad o realizar transiciones de servidores. Durante estos momentos, es crucial restringir las actividades del foro sin cerrar por completo el acceso de los usuarios.

Discourse ofrece varios Modos de Solo Lectura que los administradores pueden habilitar para congelar temporalmente diferentes tipos de interacciones dentro de un sitio.

Esta guía explora estos modos, centrándose específicamente en cómo habilitarlos y deshabilitarlos, incluyendo el manejo de situaciones en las que ciertos modos se intersectan.

Comprender los Modos de Solo Lectura

Discourse admite dos niveles diferentes de modos de solo lectura adaptados para satisfacer diversas necesidades administrativas. Estos son:

  1. Modo de Solo Lectura Completo
  • Restringe todas las operaciones de escritura en el foro, evitando que cualquier usuario cree o modifique contenido, como publicar, comentar o dar me gusta.
  • Permite que el foro esencialmente se “congele” en su estado actual, de modo que los usuarios aún puedan leer y navegar por el contenido existente sin afectar la base de datos.
  • Deshabilita el cambio de cualquier configuración del sitio de administrador o personalizaciones del sitio para preservar el estado actual de la base de datos.
  • Deshabilita los nuevos inicios de sesión en el foro para usuarios regulares. Los administradores aún pueden iniciar sesión utilizando el flujo de inicio de sesión con correo electrónico de administrador (/u/admin-login).
  • Las llamadas a la API pueden leer (GET), pero no pueden escribir (POST/PUT/DELETE).
  • Los webhooks salientes en cola se entregarán, pero no se activarán nuevos webhooks, ya que las acciones que los activan estarán bloqueadas.
  • Los webhooks entrantes (rebote de correo electrónico) se bloquearán con una respuesta 503. Los proveedores de correo electrónico reintentarán según sus propios programas de retroceso.
  1. Modo de Escritura Solo para Personal
  • Restringe a los usuarios estándar las operaciones de escritura en el foro, como publicar, comentar o dar me gusta. Los usuarios que no son personal están limitados a operaciones de solo lectura, pero aún pueden iniciar sesión en sus cuentas.
  • Permite que las actividades de administrador y moderador continúen con normalidad. Los administradores pueden cambiar la configuración del sitio, y los usuarios del personal pueden realizar operaciones de escritura como publicar, dar me gusta o modificar perfiles.
  • Las llamadas a la API pueden leer (GET). Solo las claves de API del personal pueden escribir (POST/PUT/DELETE).
  • Los webhooks salientes en cola se entregarán. Las acciones del personal pueden activar nuevos webhooks salientes que también tendrán éxito, pero ninguna acción de usuario que no sea del personal activará webhooks.
  • Los webhooks entrantes (rebote de correo electrónico) se bloquearán con una respuesta 503. Los proveedores de correo electrónico reintentarán según sus propios programas de retroceso.

Estos modos garantizan flexibilidad en la gestión de la operatividad del foro durante períodos administrativos críticos.

Cómo Habilitar/Deshabilitar los Modos de Solo Lectura

:warning: Los administradores deben gestionar cuidadosamente la transición entre diferentes modos de solo lectura. Antes de habilitar cualquier modo de solo lectura, asegúrese de que cualquier modo previamente activado esté deshabilitado.

Modo de Solo Lectura Completo

Vía Consola de Rails

Si tiene acceso a su instalación de Discourse, utilice la interfaz de línea de comandos de Discourse rails para ejecutar el siguiente comando después de ingresar a su contenedor Docker con ./launcher enter app y luego la consola de rails con rails c:

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Vía Panel de Administración

Si tiene acceso administrativo a través de la interfaz web, puede navegar a Admin > Backups > Enable Read-Only Mode para habilitar el modo de solo lectura.

Para deshabilitar el Modo de Solo Lectura, ejecute el siguiente comando de rails:

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

O, utilice el panel de administración navegando a Admin > Backups > Disable Read-Only Mode.

Modo de Escritura Solo para Personal

:discourse: El modo de Escritura Solo para Personal solo se puede habilitar/deshabilitar desde la consola de rails de Discourse. Si su sitio está alojado por Discourse, comuníquese con team@discourse.org si desea habilitar o deshabilitar cualquiera de estos modos.

Para habilitar el Modo de Escritura Solo para Personal, utilice el siguiente comando de la consola de rails:

Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Para deshabilitar:

Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Mejores Prácticas

  • Comunicación Oportuna: Informar a su comunidad sobre los períodos de solo lectura programados con anticipación para establecer expectativas adecuadas.
  • Pruebas: Antes de implementar estos modos durante operaciones críticas, realice pruebas durante períodos de bajo tráfico para comprender su impacto.
  • Documentación: Mantenga registros detallados de cuándo y por qué se habilitó o deshabilitó cada modo para ayudar en la planificación operativa futura.

Preguntas Frecuentes (FAQs)

  • ¿Cuánto tiempo toma habilitar/deshabilitar el Modo de Solo Lectura?

    • El cambio es inmediato. Sin embargo, la experiencia del usuario puede variar ligeramente dependiendo de sus acciones durante el período de transición.
  • ¡Ayuda! Estoy bloqueado fuera de mi sitio debido al modo de solo lectura, ¿qué puedo hacer para acceder a mi sitio nuevamente?

  • Noté que hay otros modos READ-ONLY listados en discourse/lib/discourse.rb, ¿qué hacen estos modos?

    • READONLY_MODE_KEY se utiliza principalmente para el proceso de copia de seguridad y restauración y es activado por la aplicación misma. Este modo también se puede habilitar o deshabilitar desde la interfaz de línea de comandos de Discourse con discourse enable_readonly y discourse disable_readonly. Sin embargo, esta clave no sobrevivirá a un reinicio del contenedor.
    • USER_READONLY_MODE_KEY se utiliza cuando un administrador hace clic en el botón de solo lectura en la interfaz de administración. Lo especial de esta clave es que no la establecemos como una clave con fecha de caducidad, ya que el modo de solo lectura habilitado por un usuario debe sobrevivir a los reinicios del contenedor. Otras claves se establecen con un TTL (60 segundos para READONLY_MODE_KEY, 300 segundos para PG_READONLY_MODE_KEY) y tenemos un hilo para extender la caducidad cada 30 segundos para asegurar que una aplicación nunca quede atrapada en modo de solo lectura.
    • PG_READONLY_MODE_KEY y PG_FORCE_READONLY_MODE_KEY se utilizan para la conmutación por error de PG. La primera se establece como una clave con fecha de caducidad, mientras que la segunda no caduca.
9 Me gusta

¡No veo ninguna diferencia! ¿Podrían ajustarse estas descripciones en consecuencia, si es que existe alguna diferencia?

1 me gusta

He actualizado la guía para proporcionar más claridad aquí, por favor, háganos saber si todavía tiene alguna pregunta sobre alguno de los modos de solo lectura. :slightly_smiling_face:

1 me gusta

Pero, ¿qué hace discourse enable_readonly?

Utiliza READONLY_MODE_KEY, que establece que ttl sea 60, por lo que se desactiva en algún momento. Ahora veo que

¿Hay alguna razón por la que este sea el comportamiento predeterminado de este comando? Me ha llevado casi una década aprender que este comando es totalmente diferente del modo de solo lectura de la interfaz web, incluso después de haberme equivocado un montón de veces. Y ahora recuerdo que alguien intentó hablarme de estas claves una vez y no logré comprender su importancia.

En mi opinión, algo mucho más sensato que haría discourse enable_readonly sería hacer un Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY). ¡Ojalá me hubiera dado cuenta de eso hace muchos años!

¿Podría enviar una PR algo como esto?

  desc "enable_readonly", "Habilita el modo de solo lectura, permitiendo escrituras del personal"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'El sitio ahora está en modo de solo lectura con escrituras permitidas para el personal.'
  end

No estoy muy familiarizado con esto, pero creo que sería confuso que enable_readonly_mode configurara el sitio en un staff_writes_only_mode. Son modos diferentes, cuando se realizan ciertas operaciones, no se permitirían escrituras a la base de datos para el personal (durante una restauración, por ejemplo, se eliminarán).

Quizás en su lugar podamos hacer algunas otras cosas aquí:

  1. Aclarar que el modo de solo lectura establece una TTL en la descripción de esa tarea.
  2. Añadir una tarea que invoque keep_readonly_mode para que pueda extenderse a más de 60 minutos.
  3. Añadir tareas enable_staff_writes_only y disable_staff_writes_only.
2 Me gusta

Estaría de acuerdo, pero sería mucho menos confuso que “establecer modo de solo lectura por un tiempo”.

Estoy bastante seguro de que el script de restauración establece el modo de solo lectura por sí mismo, por lo que no se ve afectado por este comando.

Preferiría que proclamara que se establece por X minutos cuando se establece. No es tan fácil encontrar la descripción.

Quizás. No tengo claro quién lo usaría.

¡Eso sería genial!

Además, debemos dejar claro que no estamos confundiendo las tareas de rake con los comandos disponibles a través del comando discourse.

2 Me gusta

Tiene sentido. ¿Hay alguna posibilidad de que puedas enviar esto como un PR? Lo mismo para los comandos enable_staff_writes_only y disable_staff_writes_only, si es posible. ¡Gracias!

3 Me gusta

¿Tengo curiosidad de qué relojes se detienen después de iniciar el modo de solo lectura? ¿Se producirán cambios en los temas después de configurar el modo de solo lectura?

también parece que las actualizaciones no funcionan si el modo de solo lectura está configurado por la interfaz de usuario web

Parece que la interfaz de usuario se ha actualizado, por lo que no veo la opción para desactivar el modo de solo lectura en la sección de Copias de seguridad de administración. ¿Cómo puedo desactivarlo mediante la interfaz de usuario?

Eso es extraño. Veo los botones Habilitar y Deshabilitar, y funcionan bien. ¿Podrías enviar una captura de pantalla de lo que estás viendo?

Hola @Lucian_Chung,

Por favor, indica también si tu sitio es autoalojado o está alojado por Discourse, y en este último caso, en qué plan. Desactivar el modo de solo lectura desde la interfaz de usuario no es una opción bajo ciertas condiciones en un sitio alojado.