Configurazione server High Availability 3

Discourse supporta più macchine (ciascuna con un singolo container Docker) dietro un load balancer autonomo?

Ho bisogno di una configurazione di Discourse che gestisca il guasto di un server, quindi la mia risposta standard è configurare 3 server dietro un load balancer (con il LB che gestisce il certificato SSL).

Ho configurato server PostgreSQL e Redis esterni autonomi per Discourse. (Tutto questo è su Google Cloud Platform). Sto utilizzando il launcher di Discourse per configurare il container Docker dedicato solo al web.

  1. Discourse supporta l’esecuzione di più container quando ogni container si trova su una macchina diversa?
  2. Dovrei semplicemente copiare il container Docker creato dalla prima macchina sulle altre macchine?
  3. Come vengono gestiti i loghi caricati?
  4. I loghi caricati, i favicon, ecc. sono archiviati nel database?

Grazie mille per l’aiuto.

5 Mi Piace

Sì, è così che lo gestiamo nel nostro servizio di hosting.

  1. Dovresti configurare l’uso dello storage oggetti per i caricamenti (S3 e cloni)
  2. No, vengono salvati nello storage oggetti come indicato al punto 3.
7 Mi Piace

Grazie, Rafael. Molto apprezzato.

Ho riscontrato un problema con la terminazione SSL sul load balancer. Discourse specifica tutti i suoi link come HTTP.

C’è un modo per far sì che Discourse sappia che i suoi link dovrebbero essere https?

Sì, apri una console Rails e impostala su https con:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.force_https = true
2 Mi Piace

Ottimo. Grazie ancora.

Presumo che potrei farlo nell’app.yml
- exec: rails c "SiteSetting.force_https = true"

Non so nulla di Rails. Nel mio comando sopra, dovrebbe essere ‘rails c’ o ‘rails r’?

2 Mi Piace

Abbiamo un esempio di modifica delle impostazioni del sito durante l’avvio nel nostro file di esempio:

3 Mi Piace

Sì, è da lì che ho copiato il mio comando.

Ultima domanda: il contenitore Docker è monitorato? Se il contenitore Docker si arresta per qualsiasi motivo, launcher ha configurato qualcosa per riavviarlo?

Sì, launcher chiede a Docker di riavviare automaticamente i container.

2 Mi Piace

Ok. Quindi ora ho un Discourse funzionante su una singola macchina. Ho altre due macchine. Il volume condiviso dell’host Docker è puntato a una directory NFS per consentire a tutte le macchine di accedere ai file caricati (in particolare loghi, ecc.).

Ho copiato le immagini Docker sulle macchine 2 e 3 (docker save -o app-image local_discourse/app e poi docker load -i app-image).

Avevo l’impressione che un semplice ./launcher start app avrebbe funzionato, ma tenta di verificare containers/app.yml.

Incontrerò problemi se permetto che app.yml venga verificato (e le modifiche apportate) al database dalla macchina 2 e 3?

C’è un modo migliore per avere tre macchine che eseguono un’unica configurazione?

1 Mi Piace

Hai due opzioni:

  • Usa – credo sia ./launcher start-command app – sulla macchina completamente configurata (la “macchina di build”) per ottenere una riga di comando Docker completa
  • Copia il file app.yml ed esegui quello che hai appena provato (launcher start).
5 Mi Piace

Imposta l’ENV DISCOURSE_FORCE_HTTPS: true

6 Mi Piace