Queste istruzioni dovrebbero essere considerate beta e per coloro che hanno familiarità con una configurazione standard
Ma al momento (2023.02.11) queste istruzioni non funzionano!! (Vedi Set up Let’s Encrypt with multiple domains / redirects per come aggiornare l’impostazione letsencrypt per aggiungere la parte fullpath. Aggiornerò questo per riflettere tali modifiche Molto Presto.)
Ho sviluppato questa guida un paio di settimane fa ma ho bisogno che qualcuno la testi e veda se funziona per qualcun altro. Per favore, rispondi se provi e fammi sapere se funziona e se qualcosa non è chiaro.
E ora lo spettacolo…
Questa guida documenta in modo generale come impostare una configurazione multisito con 2 host aggiuntivi (3 in totale).
Password del database (la stessa di DISCOURSE_DB_PASSWORD) o discourse in app.yml
Ai fini della semplicità, questo è per un sito principale chiamato =domain=, con due siti aggiuntivi =two=.=domain= e =three=.=domain=. Puoi usare i nomi che vuoi, ma ai fini di questo modello, non avere un nome breve (per il nome del database e il titolo del sotto-forum) e un hostname completo diversi è un po’ più facile.
Aggiungi in hooks dopo i plugin in app.yml o web_only.yml
before_bundle_exec:
- file:
path: $home/config/multisite.yml
contents: |
=two=:
adapter: postgresql
database: =two=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =two=.=domain=
=three=:
adapter: postgresql
database: =three=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =three=.=domain=
after_db_migrate:
- exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate
after_ssl:
# dire a letsencrypt quali certificati aggiuntivi ottenere
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /-d =domain= /
to: "-d =domain= -d =two=.=domain= -d =three=.=domain="
global: true
# non reindirizzare tutti gli host al nome di dominio principale
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /if \\(\\$http_host[^\\}]*\\}/m
to: ""
Aggiungi alla sezione after_postgres in app.yml o data.yml
- exec: sudo -u postgres createdb =two= || exit 0
- exec:
stdin: |
grant all privileges on database =two= to discourse;
cmd: sudo -u postgres psql =two=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists pg_trgm;"'
- exec: sudo -u postgres createdb =three= || exit 0
- exec:
stdin: |
grant all privileges on database =three= to discourse;
cmd: sudo -u postgres psql =three=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists pg_trgm;"'
Dopo di che,
./launcher rebuild app
o
./launcher rebuild data
./launcher rebuild web_only
L’ho appena provata, anzi l’ho provata due volte perché non riuscivo a credere che funzionasse già senza problemi la prima volta Ho solo copiato, modificato i domini e la password, e poi incollato nei rispettivi file di una nuova installazione con 2 container.
Fammi sapere se qualcosa non è chiaro. Ho dovuto riflettere un po’ su questo paragrafo:
Sembra suggerire che sia necessario un setup a 2 container per seguire la guida, ma in realtà non lo è. Inoltre, non ho capito perché si colleghi al post 48 del topic invece che al post iniziale.
Grazie! Ci darò un’occhiata. Entrambe sembrano quelle distrazioni che speravo tu mi avresti fatto notare!
MODIFICA: Grazie! Avevo copiato in modo disattento la mia posizione attuale nel argomento a 2 contenitori, quindi l’ho corretta e ho modificato il testo per indicare che funzionerà con qualsiasi installazione funzionante.
Ciao
Ho iniziato con un’installazione standard di Discourse (su DigitalOcean), poi ho configurato nginx (usando queste istruzioni) perché volevo ospitare alcuni siti Drupal sullo stesso droplet.
Se volessi avere un’altra istanza di Discourse, dovrei seguire le istruzioni sopra?
Queste istruzioni si riferiscono all’uso senza un reverse proxy. Ti consiglio di seguire la configurazione multisito con Docker. Le istruzioni a cui hai fatto riferimento potrebbero funzionare, ma ti suggerisco di seguire prima quanto riportato qui.
Grazie; noto che con quella configurazione entrambi i siti utilizzerebbero le stesse impostazioni SMTP
c’è un modo per evitarlo?
o sarebbe meglio seguire la guida alternativa (sembra che richiederebbe un po’ di lavoro per mettere il sito esistente sulla rete docker)
in alternativa, è possibile installare un altro codice sorgente, ad esempio in /var/discourse2?
(costerà circa 500 MB ma ne vale la pena se mi risparmia mal di testa)
Sì, ma devi semplicemente creare un’installazione a due container e poi avere un file web_only2.yml. (Penso che tu possa avere due file di tipo app.yml, ma in quel caso avresti due istanze di Postgres in esecuzione inutilmente). Penso, però, che siano necessarie due istanze di Redis.
Grazie; dato che non sono molto familiare con la separazione dei dati e del contenitore web, ho creato un altro contenitore autonomo seguendo queste linee guida (e i certificati generati da certbot sembrano funzionare). Tuttavia, attualmente sembra esserci un problema con la configurazione di Mailgun: invia email di attivazione a Gmail, ma qualsiasi email ospitata presso il mio registrar (DreamHost) fallisce
Quanto carico aggiuntivo causerebbe l’istanza Postgres extra?
Ho letto il tuo post sulla separazione e proverò a implementarla se il risparmio fosse significativo.
Recentemente ho provato a seguire questa guida, ma ho riscontrato delle difficoltà con alcuni punti:
Non riesco a trovare la password del database (o a cosa serva esattamente nel file).
Il mio file app.yml non conteneva inizialmente una sezione after_postgres, quindi l’ho aggiunta sotto hooks per allinearla alle altre (after_ssl, after_db_migrate, ecc.). Se è stata inserita nella sezione sbagliata, fammelo sapere: sono completamente nuovo a questo tipo di cose.
Quando controllo la sintassi del file YAML su http://www.yamllint.com/, ricevo l’errore (<unknown>): did not find expected key while parsing a block mapping sulla riga in cui ho inserito la sezione after_postgres sotto la sezione hooks.
Se potessi chiarire i passaggi per modificare il file app.yml, ti sarei molto grato.
Sto pensando di configurarlo, dato che io e il mio amico vogliamo testare alcuni forum diversi prima di decidere se investire di più su di essi, possibilmente avendo hosting separati e cose del genere.
Stavo pensando di metterli su domini diversi, capisco che possa creare un po’ di confusione dato che le persone riceveranno le email solo dall’indirizzo SMTP principale, tuttavia, sai se domini separati creerebbero altri grattacapi?
Discourse ha un unico dominio per tutti i suoi clienti aziendali e standard. Puoi impostare l’indirizzo email di notifica come preferisci, ad esempio shortname@whatevermail.com.
Sfortunatamente, ho un problema nell’eseguire ulteriori discourse su un singolo server/IP.
Innanzitutto, ho seguito la documentazione per avviare un sito standalone ed è stato un successo.
(ad es. test.john.com - un sottodominio che reindirizza all’IP singolo)
Ora, quando ho provato ad aggiungere altri discourse (ad es. test.joe.com e test.doe.com - altri sottodomini da altri siti).
Ho provato a seguire i tuoi passaggi ma non ci sono riuscito e ora sono perso.
Alcune domande:
Come verranno installati questi altri due siti? Come copiare /standalone.yml nella directory containers e rinominarlo? E fare semplicemente l’installazione regolare? (ad es. ./launcher rebuild joe)
Le tue istruzioni affermano che le modifiche dovrebbero essere in app.yml, aggiungendo tutto il codice sopra - che presumo debba essere aggiunto nel primo file installato con successo (test.john.com)?
Oltre a quelli nella directory container, ho creato un config/multisite.yml e questo è il codice che ho:
secondsite:
adapter: postgresql
database: b_discourse
username: postgres
password: postgres
host: dbhost
pool: 5
timeout: 5000
host_names:
- test.joe.com
...
...
# e la configurazione del terzo sito
Non sono sicuro, però, se ci siano altre cose che devo configurare.
No. Aggiungi le cose a app.yml come descritto. Questo creerà mutlisite.yml all’interno del container. Ci sarà una singola istanza e funzionerà per tutti i domini, dato che il DNS per tutti punta lì. Questo non serve ad avere più container di Discourse, uno per ogni nome di dominio.
Per quanto ne so, quelle istruzioni funzionavano così come erano scritte. Aggiungi solo le righe al tuo app.yml e dovrebbe funzionare. Non è necessario toccare nessun altro file.
Per quanto riguarda la migrazione, tutte le combinazioni sono sempre fallite… >> bundle exec rake multisite:migrate
********************** ultima parte del processo**************************
2023-02-11 17:50:43.853 UTC [61] LOG: spegnimento in corso
162:M 11 Feb 2023 17:50:43.866 # Richiesta di spegnimento dall'utente...
162:M 11 Feb 2023 17:50:43.866 * Salvataggio dello snapshot RDB finale prima dell'uscita.
162:M 11 Feb 2023 17:50:43.881 * DB salvato su disco
162:M 11 Feb 2023 17:50:43.882 # Redis è ora pronto per uscire, arrivederci...
2023-02-11 17:50:44.007 UTC [57] LOG: sistema di database spento
FALLITO
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate fallito con ritorno #<Process::Status: pid 582 exit 1>
Posizione del fallimento: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec fallito con i parametri "cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate"
bootstrap fallito con codice di uscita 1
** FALLITO IL BOOTSTRAP ** si prega di scorrere verso l'alto e cercare messaggi di errore precedenti, potrebbero essercene più di uno.
./discourse-doctor potrebbe aiutare a diagnosticare il problema.
Ho controllato cosa è stato creato e cosa non è stato creato fino al fallimento.
I database dei sottodomini sono stati creati ma la migrazione è fallita. Le configurazioni nginx dei sottodomini o multisite.yml non sono state create quando ho controllato le cartelle overlay2 o altrove.
./launcher bootstrap,destroy,start,stop,rebuild o fresh setup molte volte… Ho provato tutti i comandi ma non è successo nulla…
Questo tutorial è ancora valido per v3.1.0.beta 2 o cosa potrei star missing?
Qualche idea, per favore?
No. Qualcosa riguardo a Let’s Encrypt è cambiato a un certo punto. Ti farò dare un’occhiata più da vicino a tutto ciò che deve essere modificato all’interno del container per gestire più domini.
Utilizzo questa configurazione da anni con i miei server di staging. Tuttavia, dopo l’aggiornamento a 3.5.0.beta5-dev, vengo reindirizzato al sito principale ogni volta che inserisco un sottodominio.
Ero così felice di non dovermi occupare di tutte le questioni relative alle certificazioni. Ma ora sono piuttosto perso, ci sono strumenti per eseguire il debug di ciò che sta accadendo?