Questa è una configurazione avanzata. Non seguirla a meno che tu non abbia esperienza con l’amministrazione di server Linux e Docker. Devi anche prestare molta attenzione ai commit su discourse_docker per assicurarti di notare se c’è un aumento di versione per postgres o redis.
Conversione della configurazione corrente
Sono riuscito a migrare a due container. Se qualcun altro ha bisogno di istruzioni, ecco come ha funzionato per me.
Il processo include backup, configurazione di container web e dati separati e ripristino dei dati.
-
Esegui il backup della tua istanza di discourse e scarica il backup. Puoi seguire la guida semplice o eseguire il backup e ripristinare manualmente più tardi.
-
Ferma il container standalone corrente
./launcher stop app -
Copia
web_only.ymledata.ymldasamples/acontainers/rinominali come preferisci, ad esempioweb_rocks.ymledata2.yml. -
Se li rinomini, presta attenzione alle voci
volumes:indata.ymleweb_only.yml
Se hai rinominatoweb_only.ymlinweb_rocks.ymldevi modificare la voce inWeb_rocks.ymlin questo modo:
volumes:
- volume:
host: /var/discourse/shared/web_rocks
guest: /shared
- volume:
host: /var/discourse/shared/web_rocks/log/var-log
guest: /var/log
Allo stesso modo, esegui modifiche simili anche in data.yml.
Configurazione del container dati
Inizia con data.yml e imposta una password per il database. Quindi:
- vai alla cartella root del container
/var/discourse - esegui
./launcher bootstrap data2(data2 o qualsiasi nuovo nome tu gli abbia dato) - esegui
./launcher start data2(usando di nuovo il nuovo nome) - se tutto procede senza problemi puoi connetterti al container tramite:
./launcher enter data2(usando di nuovo il nuovo nome) - Esci dal container con
exit.
Configurazione del container web
Modifichiamo web_only.yml.
Innanzitutto, cambia il template ed esponi le porte come fa il tuo app.yml.
In secondo luogo, assicurati di collegarti al container dati corretto. Se hai rinominato data.yml in ‘something_else’ inseriscilo per ‘name’.
# Usa la chiave 'links' per collegare i container, ovvero usa il flag Docker --link.
links:
- link:
name: data
alias: data
Anche se non vogliamo più esporre ssh o altre porte, dovrai comunque esporre le porte 80 e 443 per l’accesso web. Questo dipende dal fatto che tu abbia un nginx in esecuzione frontalmente e da come colleghi il container ad esso.
Da qualche parte troverai questo blocco:
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: mypassword
DISCOURSE_DB_HOST: data
DISCOURSE_REDIS_HOST: data
- Inserisci la password che hai impostato all’interno del container dati.
- Inserisci l’alias del container dati che hai appena scritto. Per
DB_HOSTe perREDIS_HOST. Deve corrispondere al blocco links che abbiamo menzionato. - Probabilmente non hai cambiato
DB_USERNAME.
Troverai i valori per DISCOURSE_DEVELOPER_EMAILS e DISCOURSE_HOSTNAME e molti altri. Hai già questi valori nel tuo app.yml. Copiali da lì.
Nella sezione hooks ricorda di impostare eventuali plugin aggiuntivi che usi già in app.yml
Ora dovresti essere pronto per avviarlo:
./launcher bootstrap web_only (di nuovo con il tuo nuovo/proprio nome)
Una volta avviato, puoi avviare web_only (usa il tuo nuovo nome):
./launcher start web_only
Quando Discourse è pronto, accedi e ripristina il tuo sito.
Dopo questo, tutto ha funzionato di nuovo per me e la mia installazione di discourse è tornata operativa, ma ora in due container separati.
Come aggiornare quando si utilizzano container web e dati separati
Se non ti interessa il breve tempo di inattività – o quando i dati devono essere aggiornati. Le modifiche a postgres e redis sono infrequenti e lasciare in esecuzione il container dati è ciò che rende possibile costruire un nuovo container web_only mentre quello vecchio è in esecuzione.
./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
Questo funziona per un aggiornamento minore di Postgres e/o un aggiornamento di redis.
Se ti interessa ogni minuto di inattività e i dati non devono essere aggiornati (il che accade la maggior parte delle volte):
aggiorna solo web_only:
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only
È sufficiente ricostruire web_only e saltare data tranne quando c’è un aggiornamento a postgres o redis. Questi avvengono nell’ordine di una volta all’anno e vedrai un annuncio come PostgreSQL 15 update quando accade, anche se gli aggiornamenti a redis e gli aggiornamenti minori di postgres non sono annunciati in modo così evidente.
La ricostruzione dei dati richiede tempi di inattività (per la stessa ragione per cui lo fa la versione a container singolo: non puoi aggiornare postgres mentre un altro processo sta accedendo agli stessi file di database. Inoltre, quando costruisci un nuovo container dati, devi distruggere e avviare il container web_only perché tenterà di connettersi al vecchio container).
Non hai spesso bisogno di ricostruire il container dati (motivo per cui questo metodo consente di risparmiare tempi di inattività). Devi prestare attenzione a quando c’è un aggiornamento in postgres o redis; il frontend non lo saprà; questa è una configurazione avanzata che richiede più attenzione rispetto a un singolo container.
Gestione di un’installazione a due container
@pfaffman creerà un argomento su questo un giorno, ma nel frattempo, c’è questo: Managing a Two-Container Installation - Documentation - Literate Computing Support

