Режимы только для чтения в Discourse

:bookmark: Это руководство объясняет различные режимы только для чтения, доступные в Discourse, как их включать и выключать, а также сценарии, в которых может потребоваться использование каждого режима.

:person_raising_hand: Требуемый уровень пользователя: Администратор

Управление живой онлайн-сообществом в Discourse иногда требует от администраторов временного ограничения активности пользователей. Такие ситуации могут возникать при выполнении технического обслуживания сервера, создании резервных копий или миграции серверов. В такие моменты крайне важно ограничить активность на форуме, не отключая полностью доступ для пользователей.

Discourse предлагает различные режимы только для чтения, которые администраторы могут включить, чтобы временно заморозить различные типы взаимодействий на сайте.

В этом руководстве рассматриваются эти режимы, с особым вниманием к тому, как их включать и выключать, включая ситуации, когда некоторые режимы пересекаются.

Понимание режимов только для чтения

Discourse поддерживает два различных уровня режимов только для чтения, адаптированных под различные административные потребности. Это:

  1. Полный режим только для чтения
  • Ограничивает все операции записи на форуме, не позволяя пользователям создавать или изменять контент, например, публиковать сообщения, комментировать или ставить лайки.
  • Позволяет фактически «заморозить» форум в его текущем состоянии, чтобы пользователи могли продолжать читать и навигировать по существующему контенту без воздействия на базу данных.
  • Отключает возможность изменения любых настроек сайта администратором или кастомизаций сайта, чтобы сохранить текущее состояние базы данных.
  • Отключает новые входы в систему для обычных пользователей. Администраторы по-прежнему могут входить в систему через поток входа администратора по электронной почте (/u/admin-login).
  1. Режим «Только запись для сотрудников»
  • Ограничивает обычных пользователей от операций записи на форуме, таких как публикация, комментирование или лайки. Обычные пользователи ограничены операциями только для чтения, но могут продолжать входить в свои учетные записи.
  • Позволяет администраторам и модераторам продолжать свою деятельность в обычном режиме. Администраторы могут изменять настройки сайта, а сотрудники могут выполнять операции записи, такие как публикация, лайки или изменение профилей.

Эти режимы обеспечивают гибкость в управлении работоспособностью форума в критические административные периоды.

Как включить/выключить режимы только для чтения

:warning: Администраторы должны внимательно управлять переходом между различными режимами только для чтения. Перед включением любого режима только для чтения убедитесь, что ранее активированный режим отключен.

Полный режим только для чтения

Через консоль Rails

Если у вас есть доступ к установке Discourse, используйте командную строку Discourse Rails для выполнения следующей команды после входа в контейнер Docker с помощью ./launcher enter app и запуска консоли Rails с помощью rails c:

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Через панель администратора

Если у вас есть доступ к административной панели через веб-интерфейс, перейдите в Admin > Backups > Enable Read-Only Mode, чтобы включить режим только для чтения.

Чтобы выключить режим только для чтения, выполните следующую команду rails:

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Или используйте административную панель, перейдя в Admin > Backups > Disable Read-Only Mode.

Режим «Только запись для сотрудников»

:discourse: Режим «Только запись для сотрудников» можно включить или выключить только через консоль Rails Discourse. Если ваш сайт размещен в Discourse, пожалуйста, обратитесь в team@discourse.org, если вы хотите включить или выключить этот режим.

Чтобы включить режим «Только запись для сотрудников», используйте следующую команду консоли Rails:

Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Чтобы выключить:

Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Лучшие практики

  • Своевременное информирование: Заранее сообщите вашему сообществу о запланированных периодах работы в режиме только для чтения, чтобы установить правильные ожидания.
  • Тестирование: Перед применением этих режимов во время критических операций проведите тесты в периоды низкой нагрузки, чтобы понять их влияние.
  • Документирование: Ведите подробные записи о том, когда и почему каждый режим был включен или выключен, чтобы помочь в будущем планировании операций.

Часто задаваемые вопросы

  • Сколько времени занимает включение/выключение режима только для чтения?

    • Изменение вступает в силу немедленно. Однако пользовательский опыт может незначительно отличаться в зависимости от действий пользователей в период перехода.
  • Помогите! Я заблокирован на своем сайте из-за режима только для чтения — что я могу сделать, чтобы снова получить доступ к сайту?

  • Я заметил, что в discourse/lib/discourse.rb перечислены другие режимы READ-ONLY. Что делают эти режимы?

    • READONLY_MODE_KEY в основном используется для процесса резервного копирования и восстановления и активируется самим приложением. Этот режим также можно включить или выключить через командную строку Discourse с помощью discourse enable_readonly и discourse disable_readonly. Однако этот ключ не сохраняется после перезапуска контейнера.
    • USER_READONLY_MODE_KEY используется, когда администратор нажимает кнопку только для чтения в административном интерфейсе. Особенность этого ключа в том, что мы не устанавливаем его как истекающий ключ, так как режим только для чтения, включенный пользователем, должен сохраняться после перезапуска контейнера. Другие ключи устанавливаются с TTL (60 секунд для READONLY_MODE_KEY, 300 секунд для PG_READONLY_MODE_KEY), и у нас есть поток, который каждые 30 секунд продлевает срок действия, чтобы гарантировать, что приложение никогда не застрянет в режиме только для чтения.
    • PG_READONLY_MODE_KEY и PG_FORCE_READONLY_MODE_KEY используются для переключения на резервный сервер PostgreSQL (failover). Первый устанавливается как истекающий ключ, а второй — как не истекающий.
9 лайков

I can’t see a difference! Could these descriptions be tweaked accordingly, if indeed there is a difference?

1 лайк

I’ve updated the guide to provide some additional clarity here, please let us know if you still have any questions about any of the read-only modes. :slightly_smiling_face:

1 лайк

But what does

discourse enable_readonly do?

It uses READONLY_MODE_KEY, which sets that ttl to 60, so it turns back off at some point. Now I see that

Is there some reason that this is the default behavior for this command? It’s taken me nearly a decade to learn that this command is totally different from the web interface readonly mode even after being burned a bunch of times. And I now remember that someone tried to tell me about these keys once and I failed to understand their significance.

IMHO a much more sane thing for discourse enable_readonly to do would be to do a Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY). I wish I’d noticed that many years ago!

Could I submit a PR something like this:

  desc "enable_readonly", "Enable the readonly mode, allowing staff writes"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'The site is now in readonly mode with staff writes permitted.'
  end

I’m not too familiar with this, but I think it would be confusing for enable_readonly_mode to set the site to a staff_writes_only_mode. They are different modes, when doing certain operations, you’d want staff to not be allowed writes on the DB (during a restore, for example, they’ll get removed).

Maybe instead we can do a few other things here:

  1. clarify that the readonly moed sets a TTL in that task’s description
  2. add a task that invokes keep_readonly_mode so it can be extended to more than 60 mins
  3. add enable_staff_writes_only and disable_staff_writes_only tasks
2 лайка

I would agree, but it would be much less confusing than “set read only mode for a while”.

I’m pretty sure that the restore script sets read-only mode itself, so it’s not affected by this command.

I’d rather it proclaim that it is set for X minutes when it’s set. It’s not that easy to find the description.

Perhaps. I’m not clear who would use it.

That would be great!

Also, we need to be clear that we’re not conflating the rake tasks with the commands available through the discourse command.

2 лайка

Makes sense. Any chance you can submit this as a PR? Same for the enable_staff_writes_only and disable_staff_writes_only commands, if possible. Thanks!

3 лайка

I’m curious which clocks’ stop after starting read-only? will topic bumps happen after setting read-only?

it also looks like updates don’t work if read only mode is set by the web UI