Move from standalone container to separate web and data containers

Excellent. Nope that will be perfect. Thanks again! Very much appreciated.

1 Mi Piace

The command is now ./discourse-setup --two-container

worked as expected just now :smiling_face_with_three_hearts:

2 Mi Piace

Good catch! Did it print a message that made it easy to figure that out?

I’ve been meaning to clean up this topic since they change.

1 Mi Piace

Yes, very helpful thanks.

2 Mi Piace

Are there any plans to migrate from the old “container links” thing to proper setup with a custom network with two containers being connected to it?
“Links” are legacy and may be removed in the future according to Docker docs

1 Mi Piace

That sounds like a good idea.

Unless someone beats me to it, I’ll see about subunits /creating a PR to switch to networks and /or sockets (which some prefer anyway) and creating a howto to convert an existing setup to the new configuration.

5 Mi Piace

@pfaffman Non so se ci sei riuscito, ma se sì, vuoi linkarlo qui? :smiling_face:

3 Mi Piace

Dovremmo aggiungere un && ./launcher cleanup alla fine di questi comandi?

Ho scoperto che dopo essere passato a un’installazione a due container, non ci vuole molto per riempire lo spazio di archiviazione disponibile con vecchie immagini.

1 Mi Piace

Lo consiglio vivamente nella mia guida… Molte persone distribuiscono su sistemi abbastanza piccoli come i droplet di DO e so di aver aiutato altri che non si rendevano conto di dove andasse il loro spazio.

2 Mi Piace

@pfaffman, Ciao,
Qualche giorno fa ho installato AWS EC2 con un singolo container e tutto ha funzionato bene. Ma ho bisogno esattamente della configurazione a due container, web_only su EC2 e data su AWS RDS (PostgreSQL 15.3 sulla porta 5432 => non posso scegliere un’altra versione e il database non ha un parametro DB_NAME). Come cluster Redis ho provato a usare AWS ElastiCache, ma poi ho lasciato un link in data.yml al template esistente:

  #- "templates/postgres.template.yml"
  - "templates/redis.template.yml"

Dopo aver avviato con successo data e web_only, non riesco ad aprire la pagina web. “Questo sito non è raggiungibile”

Non ho apportato modifiche ai record DNS né modificato le impostazioni di accesso nei gruppi di sicurezza AWS (firewall per web e database).

Avviato con successo, per l'avvio usare ./launcher start data
root@ip-172-31-3-68:/var/discourse# ./launcher start data
Rilevata architettura x86_64.

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -h ip-172-31-3-68-data -e DOCKER_HOST_IP=172.17.0.1 --name data -t -v /var/discourse/shared/data:/shared -v /var/discourse/shared/data/log/var-log:/var/log --mac-address <...> local_discourse/data /sbin/boot
27b66e577d250e4178f5e145c9962be7b5f2d905cfacd233d3d2278e7b83aa93
Avviato con successo, per l'avvio usare ./launcher start web_only
root@ip-172-31-3-68:/var/discourse# ./launcher start web_only
Rilevata architettura x86_64.

+ /usr/bin/docker run --shm-size=512m --link data:data -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=2 -e UNICORN_SIDEKIQS=1 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET= -e DISCOURSE_DB_HOST=database-discourse.<...>.rds.amazonaws.com -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_FORCE_HTTPS=true -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_HOSTNAME=talk.furtherium.com -e DISCOURSE_DEVELOPER_EMAILS=hello@furtherium.com -e DISCOURSE_SMTP_ADDRESS=email-smtp.us-east-2.amazonaws.com -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=A<...>S -e DISCOURSE_SMTP_PASSWORD=B<...>M -e DISCOURSE_NOTIFICATION_EMAIL=noreply@talk.furtherium.com -e LETSENCRYPT_ACCOUNT_EMAIL=me@example.com -e DISCOURSE_DB_NAME= -e DISCOURSE_DB_USERNAME=postgres -e DISCOURSE_DB_PASSWORD=7<...>1 -e DISCOURSE_REDIS_HOST=data -h ip-172-31-3-68-web-only -e DOCKER_HOST_IP=172.17.0.1 --name web_only -t -p 80:80 -p 443:443 -v /var/discourse/shared/web-only:/shared -v /var/discourse/shared/web-only/log/var-log:/var/log --mac-address <...> local_discourse/web_only /sbin/boot
1233f1c660eb7cecc48d2a840aae037b46ecfd7afe029ef89b2e686b136b9886
  • Ho controllato la connessione al database da SSH usando telnet - OK
  • Vedo le connessioni al database nella dashboard AWS RDS
  • Ho riavviato le istanze 3 volte
  • Ho eseguito la ricostruzione 3-4 volte senza errori
  • Ho controllato l’elenco dei container e delle immagini attivi, ho ripulito quelli non necessari
CONTAINER ID   IMAGE                      COMMAND        CREATED          STATUS          PORTS                                                                      NAMES
1233f1c660eb   local_discourse/web_only   "/sbin/boot"   18 minutes ago   Up 18 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   web_only
27b66e577d25   local_discourse/data       "/sbin/boot"   47 minutes ago   Up 47 minutes                                                                              data

Cos’altro posso fare? Grazie per i vostri sforzi e il vostro tempo!

Non è necessario. Hai solo bisogno del container web ed eliminare i template di Postgres e Redis. Elasticache è, a mio parere, assurdamente costoso, quindi potresti eseguirlo sul tuo EC2 se stai usando un singolo host.

Basta aggiungere le variabili ENV al tuo app.yml esistente ed eliminare i template non necessari. Ho sentito di recente che questo sito è in esecuzione su PG15, quindi dovrebbe andare bene.

Grazie per la risposta, Jay (@pfaffman). Voglio solo chiarire:

  • dovrei usare l’installazione app.yml con container singolo e commentare le righe relative al database e a redis? e anche nel campo ENV di app.yml, quindi aggiungere le righe per il database remoto in AWS (DB_USER, ecc. - da web_only come ora)?
  • oppure lo lascio così com’è, ma fermo il container dati e lascio solo web-only?
  • Se non uso ElastiCache, devo lasciare la riga “templates/redis.template.yml”?

Il passaggio dallo standard a due container è andato quasi senza intoppi. Ho perso parecchio tempo a causa di alcuni spazi mancanti nel file yml, che hanno cercato di convincermi di avere problemi di localizzazione (nemmeno lontanamente), ma si è trattato di un errore dell’utente.

Ma quando ho avviato il forum, ho trovato un forum completamente vergine. È stato abbastanza facile da risolvere, perché avevo un backup aggiornato su S3, ma ora mi chiedo perché sia successo in primo luogo: qualche ipotesi?

Voglio dire, prendere la strada in cui installerei una configurazione completamente nuova a due container e poi la ripristinerei dai backup potrebbe far risparmiare un po’ di tempo. O no, perché dovrei comunque modificare lo yml, almeno aggiungendo plugin, correggendo le impostazioni email, maxmind ecc.

1 Mi Piace

[Non pertinente al post precedente]

Mi chiedo quale sia il vantaggio di utilizzare una configurazione a due container? Perché non il normale container singolo?

Penso che sia per non avere il forum offline quando si esegue una ricostruzione per aggiornamenti/installazione di un plugin.

2 Mi Piace

Per me è già stata menzionata una breve interruzione. Inoltre, aggiorno spesso, almeno una volta alla settimana, quindi la mia configurazione è soggetta a bug — non molto spesso, devo dire, ma ogni tanto ancora.

Le volte in cui la causa è un plugin — non spesso, per lo più è qualche componente — ho bisogno di tre o quattro tentativi per risolvere quello problematico. E quando ogni tentativo richiede circa 30 minuti, il mio forum sarebbe giù un po’ troppo a lungo, anche se è piccolo e basato su hobby.

E la terza ragione è perché potrei.

2 Mi Piace

Trovo estremamente stressante se una ricompilazione fallisce e il mio sito va offline. Fondamentalmente, richiede la mia attenzione immediata (e talvolta prolungata) per risolvere / trovare una soluzione alternativa. Non è divertente per niente!!!

L’installazione a due container converte questo in una mera seccatura, e il problema sottostante può solitamente essere affrontato in un momento che mi è congeniale. Inoltre, il problema che ha causato il problema è spesso già stato risolto a quel punto.

Se usassi stable, probabilmente non mi preoccuperei. Ma vivendo più vicino al limite usando tests-passed, è inestimabile per la resilienza che concede durante le ricompilazioni / aggiornamenti.

2 Mi Piace

Ah, capisco. Grazie per la spiegazione!
Mi ero completamente dimenticato di averlo pubblicato!

1 Mi Piace

Bel tutorial. Mi ci sono voluti 5 minuti, con un nuovo server, per creare e ripristinare il backup, quindi `./discourse-setup --two-container’.

Grazie

2 Mi Piace

Qualcuno può spiegare perché, se stai convertendo un server esistente con un database integro, questo passaggio è necessario?

Capisco che creare un backup sicuro off-site appena prima della migrazione sia una buona prassi, ma perché scaricarlo?

2 Mi Piace