Excellent. Nope that will be perfect. Thanks again! Very much appreciated.
The command is now ./discourse-setup --two-container
worked as expected just now 
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.
Yes, very helpful thanks.
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
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.
@pfaffman Non so se ci sei riuscito, ma se sì, vuoi linkarlo qui? ![]()
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.
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.
@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.
[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.
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.
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.
Ah, capisco. Grazie per la spiegazione!
Mi ero completamente dimenticato di averlo pubblicato!
Bel tutorial. Mi ci sono voluti 5 minuti, con un nuovo server, per creare e ripristinare il backup, quindi `./discourse-setup --two-container’.
Grazie
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?