Modalità di sola lettura in Discourse

:bookmark: Questa guida spiega le varie modalità di sola lettura disponibili in Discourse, come attivarle e disattivarle, e gli scenari in cui potresti voler utilizzare ciascuna modalità.

:person_raising_hand: Livello utente richiesto: Amministratore

Gestire una comunità online vivace su Discourse richiede occasionalmente agli amministratori di limitare temporaneamente le attività degli utenti. Queste situazioni possono variare dall’esecuzione della manutenzione del server, facilitando i backup o il trasferimento dei server. Durante questi periodi, è fondamentale limitare le attività del forum senza interrompere completamente l’accesso degli utenti.

Discourse offre varie Modalità di Sola Lettura che gli amministratori possono attivare per bloccare temporaneamente diversi tipi di interazioni all’interno di un sito.

Questa guida esplora queste modalità, concentrandosi in particolare su come attivarle e disattivarle, inclusa la gestione delle situazioni in cui alcune modalità si sovrappongono.

Comprendere le Modalità di Sola Lettura

Discourse supporta due diversi livelli di modalità di sola lettura, adattati alle diverse esigenze amministrative. Questi sono:

  1. Modalità di Sola Lettura Completa
  • Limita tutte le operazioni di scrittura nel forum, impedendo a qualsiasi utente di creare o modificare contenuti, come pubblicare post, commentare o mettere “mi piace”.
  • Consente al forum di essere essenzialmente “congelato” nel suo stato attuale, permettendo agli utenti di leggere e navigare tra i contenuti esistenti senza impattare il database.
  • Disabilita la modifica di qualsiasi impostazione del sito o personalizzazione del sito per preservare lo stato attuale del database.
  • Disabilita i nuovi accessi al forum per gli utenti normali. Gli amministratori possono ancora accedere utilizzando il flusso di accesso tramite email amministrativa (/u/admin-login).
  • Le chiamate API possono leggere (GET), ma non possono scrivere (POST/PUT/DELETE).
  • I webhook in uscita in coda verranno consegnati, ma non verranno attivati nuovi webhook poiché le azioni che li attivano saranno bloccate.
  • I webhook in entrata (rimbalzo email) verranno bloccati con una risposta 503. I provider di posta elettronica riproveranno secondo i propri programmi di backoff.
  1. Modalità di Scrittura Solo per lo Staff
  • Limita gli utenti standard alle operazioni di scrittura nel forum, come pubblicare post, commentare o mettere “mi piace”. Gli utenti non appartenenti allo staff sono limitati alle operazioni di sola lettura, ma possono ancora accedere ai propri account.
  • Consente alle attività di Amministratore e Moderatore di continuare normalmente. Gli amministratori possono modificare le impostazioni del sito e gli utenti dello staff possono eseguire operazioni di scrittura come pubblicare post, mettere “mi piace” o modificare i profili.
  • Le chiamate API possono leggere (GET). Solo le chiavi API dello staff possono scrivere (POST/PUT/DELETE).
  • I webhook in uscita in coda verranno consegnati. Le azioni dello staff possono attivare nuovi webhook in uscita che avranno successo, ma nessuna azione di un utente non appartenente allo staff attiverà webhook.
  • I webhook in entrata (rimbalzo email) verranno bloccati con una risposta 503. I provider di posta elettronica riproveranno secondo i propri programmi di backoff.

Queste modalità garantiscono flessibilità nella gestione dell’operatività del forum durante periodi amministrativi critici.

Come Attivare/Disattivare le Modalità di Sola Lettura

:warning: Gli amministratori devono gestire attentamente la transizione tra le diverse modalità di sola lettura. Prima di attivare qualsiasi modalità di sola lettura, assicurarsi che quella precedentemente attivata sia disattivata.

Modalità di Sola Lettura Completa

Tramite Console Rails

Se hai accesso alla tua installazione di Discourse, utilizza l’interfaccia a riga di comando Discourse rails per eseguire il seguente comando dopo essere entrato nel tuo container Docker con ./launcher enter app e poi nella console rails con rails c:

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Tramite Pannello di Amministrazione

Se hai accesso amministrativo tramite l’interfaccia web, puoi navigare in Admin > Backups > Enable Read-Only Mode per attivare la modalità di sola lettura.

Per disattivare la Modalità di Sola Lettura, esegui il seguente comando rails:

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Oppure, utilizza il pannello di amministrazione navigando in Admin > Backups > Disable Read-Only Mode.

Modalità di Scrittura Solo per lo Staff

:discourse: La modalità di Scrittura Solo per lo Staff può essere attivata/disattivata solo dalla console rails di Discourse. Se il tuo sito è ospitato da Discourse, contatta team@discourse.org se desideri attivare o disattivare una di queste modalità.

Per attivare la Modalità di Scrittura Solo per lo Staff, utilizza il seguente comando della console rails:

Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Per disattivare:

Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Best Practices

  • Comunicazione Tempestiva: Informa la tua comunità sui periodi di sola lettura programmati in anticipo per impostare le aspettative corrette.
  • Test: Prima di implementare queste modalità durante operazioni critiche, esegui dei test durante periodi di basso traffico per comprenderne l’impatto.
  • Documentazione: Tieni registri dettagliati di quando e perché ogni modalità è stata attivata o disattivata per assistere nella pianificazione operativa futura.

FAQ

  • Quanto tempo richiede attivare/disattivare la Modalità di Sola Lettura?

    • La modifica è immediata. Tuttavia, l’esperienza utente può variare leggermente a seconda delle loro azioni durante il periodo di transizione.
  • Aiuto! Sono bloccato fuori dal mio sito a causa della modalità di sola lettura - cosa posso fare per accedere di nuovo al mio sito?

  • Ho notato che ci sono altre modalità READ-ONLY elencate in discourse/lib/discourse.rb, cosa fanno queste modalità?

    • READONLY_MODE_KEY è utilizzata principalmente per il processo di backup e ripristino ed è attivata dall’applicazione stessa. Questa modalità può anche essere attivata o disattivata dall’interfaccia a riga di comando di Discourse con discourse enable_readonly e discourse disable_readonly. Tuttavia, questa chiave non sopravvive al riavvio del container.
    • USER_READONLY_MODE_KEY viene utilizzata quando un amministratore clicca sul pulsante di sola lettura nell’interfaccia di amministrazione. La particolarità di questa chiave è che non viene impostata come chiave a scadenza, poiché la sola lettura attivata da un utente deve sopravvivere ai riavvii del container. Altre chiavi sono impostate con un TTL (60 secondi per READONLY_MODE_KEY, 300 secondi per PG_READONLY_MODE_KEY) e abbiamo un thread che estende la scadenza ogni 30 secondi per garantire che un’applicazione non rimanga bloccata in modalità di sola lettura.
    • PG_READONLY_MODE_KEY e PG_FORCE_READONLY_MODE_KEY sono utilizzate per il failover di PG. La prima è impostata come chiave a scadenza, mentre la seconda è non scadente.
9 Mi Piace

Non vedo una differenza! Queste descrizioni potrebbero essere modificate di conseguenza, se effettivamente c’è una differenza?

1 Mi Piace

Ho aggiornato la guida per fornire maggiore chiarezza in merito, fateci sapere se avete ancora domande su una qualsiasi delle modalità di sola lettura. :slightly_smiling_face:

1 Mi Piace

Ma cosa fa discourse enable_readonly?

Utilizza READONLY_MODE_KEY, che imposta ttl a 60, quindi si disattiva a un certo punto. Ora vedo che

C’è qualche motivo per cui questo è il comportamento predefinito per questo comando? Mi ci sono voluti quasi dieci anni per imparare che questo comando è totalmente diverso dalla modalità di sola lettura dell’interfaccia web, anche dopo essermi bruciato un bel po’ di volte. E ora ricordo che qualcuno ha cercato di parlarmi di queste chiavi una volta e non sono riuscito a capirne il significato.

IMHO una cosa molto più sensata da fare per discourse enable_readonly sarebbe eseguire Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY). Vorrei averlo notato molti anni fa!

Potrei inviare una PR qualcosa del genere:

  desc "enable_readonly", "Abilita la modalità di sola lettura, consentendo la scrittura da parte dello staff"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'Il sito è ora in modalità di sola lettura con scrittura consentita allo staff.'
  end

Non ho molta familiarità con questo, ma penso che sarebbe confusionario per enable_readonly_mode impostare il sito su una staff_writes_only_mode. Sono modalità diverse, quando si eseguono determinate operazioni, si vorrebbe che allo staff non fosse consentita la scrittura nel DB (durante un ripristino, ad esempio, verranno rimossi).

Forse invece possiamo fare alcune altre cose qui:

  1. chiarire che la modalità di sola lettura imposta una TTL nella descrizione di quel task
  2. aggiungere un task che invochi keep_readonly_mode in modo che possa essere esteso a più di 60 minuti
  3. aggiungere i task enable_staff_writes_only e disable_staff_writes_only
2 Mi Piace

Sarei d’accordo, ma sarebbe molto meno confusionario di “imposta la modalità di sola lettura per un po’”.

Sono abbastanza sicuro che lo script di ripristino imposti la modalità di sola lettura da solo, quindi non è influenzato da questo comando.

Preferirei che proclamasse che è impostata per X minuti quando viene impostata. Non è così facile trovare la descrizione.

Forse. Non mi è chiaro chi lo userebbe.

Sarebbe fantastico!

Inoltre, dobbiamo essere chiari sul fatto che non stiamo confondendo i rake task con i comandi disponibili tramite il comando discourse.

2 Mi Piace

Ha senso. C’è la possibilità che tu possa inviare questo come PR? Lo stesso per i comandi enable_staff_writes_only e disable_staff_writes_only, se possibile. Grazie!

3 Mi Piace

Sono curioso di sapere quali orologi si fermano dopo aver iniziato la modalità di sola lettura? Gli incrementi degli argomenti avverranno dopo aver impostato la modalità di sola lettura?

sembra anche che gli aggiornamenti non funzionino se la modalità di sola lettura è impostata dall’interfaccia utente web

Sembra che l’interfaccia utente sia stata aggiornata, quindi non vedo l’opzione per disabilitare la modalità di sola lettura nella sezione Backup di Amministrazione. Come posso disabilitarla tramite l’interfaccia utente?

È strano. Vedo i pulsanti Abilita e Disabilita e funzionano correttamente. Potresti inviare uno screenshot di ciò che vedi?

Ciao @Lucian_Chung,

Indica anche se il tuo sito è self-hosted o ospitato da Discourse e, nel secondo caso, su quale piano. Disabilitare la modalità di sola lettura dall’interfaccia non è un’opzione in alcune condizioni per un sito ospitato.