Esporta un sito statico di Discourse mentre Discourse è in aggiornamento

Attualmente gestisco due forum Discourse separati, entrambi ospitati su istanze Scaleway autonome e aggiornati in questo modo:

# Aggiorna l'installazione Docker di Discourse
cd /var/discourse
git pull origin master

# Ricompila Discourse
/var/discourse/launcher rebuild app

Questo comporta l’arresto del forum per circa 5-15 minuti ogni volta.

Uno dei siti è protetto dal proxy di Cloudflare, quindi serve la cache offline senza problemi. L’altro invece non utilizza Cloudflare.

Mi chiedo se Discourse possa esportare un sito statico contenente solo, ad esempio, i thread pubblici per un utente anonimo, con i pulsanti di interazione disabilitati e un banner in alto che recita: “Questo sito web è attualmente in modalità sola lettura in quanto sta subendo aggiornamenti”, per poi servire tale versione durante l’aggiornamento del forum e, una volta tornato online, eliminare la cache statica.

1 Mi Piace

Se il DNS è gestito da Cloudflare (anche se non utilizza il proxy), di solito si aggiorna in pochi secondi. Durante l’aggiornamento, puoi puntare il dominio a un altro server (come una pagina di manutenzione su Netlify/Vercel/Firebase/Surge/altro, dove tutti i percorsi puntano a un file index.html).

Non l’ho ancora provato, ma potrebbe essere possibile servire temporaneamente un altro backend utilizzando resolveOverride in un Cloudflare Worker (funzione “serverless”).

1 Mi Piace

Sì, sia che si tratti di una modifica DNS o dell’avvio di un container Docker temporaneo con nginx in ascolto sulla stessa porta, la parte più semplice è quella che serve dei contenuti.

Al momento, la parte più difficile è un’esportazione statica con l’interattività disabilitata e l’aggiunta di un banner, rispettando le pagine di topic, post, categoria e indice (la ricerca può essere disattivata). Successivamente, integrare questa sostituzione nel processo di aggiornamento, il che però è abbastanza semplice.

Cercando nei forum per “esportazione statica”, non sembra che esista una soluzione del genere. Ho già creato un client API per Discourse per un progetto precedente, quindi potrei sviluppare qualcosa che non emuli il design, suppongo.

Un altro fattore nel servire un’esportazione statica per questo scopo sarebbe garantire che le pagine statiche non vengano memorizzate nella cache dai browser né dai motori di ricerca.


Mi chiedo se How do I export the complete forum as static html pages? - #3 by wangerin possa bastare, tuttavia sembra che richiederebbe comunque la disattivazione degli elementi interattivi e l’iniezione di un banner.

Se esegui un’installazione con due container, il tempo di inattività è inferiore a un minuto. Oppure, se sei disposto a utilizzare un load balancer, puoi ridurlo a zero. È più semplice di quanto stai descrivendo.

3 Mi Piace

Sì, penso di sì. Puoi indicarmi l’opzione (o le opzioni) consigliata per due container?

(Move from standalone container to separate web and data containers), ma potresti dover trascinare) cercare altri

Scopri anche SKIP_POST_DEPLOYMENT_MIGRATIONS=1. In breve, impostalo quando ricostruisci il contenitore bed per evitare che danneggi il database di quello esistente, quindi esegui di nuovo la migrazione senza di esso dopo aver avviato quello nuovo.

2 Mi Piace