Sebbene il multisito sia supportato nell’applicazione Discourse, questa è una configurazione avanzata per amministratori di sistema. Se non sai cosa stai facendo, non configurare il multisito. Il team di Discourse non è in grado di fornire supporto per la configurazione multisito.
Se desideri ospitare più domini su un’unica configurazione Docker, avrai bisogno di una configurazione multisito. Ecco i blocchi di base per una.
Comprendere gli hook
Il multisito è un argomento piuttosto avanzato. Prima di tentare una configurazione multisito, dedicati un po’ di tempo per impararli.
I modelli di Discourse utilizzano pups; le sue regole sono semplici e potenti.
Ogni regola che esegui può definire un hook:
run:
exec:
cd: some/path
hook: my_hook
cmd:
- echo 1
Più avanti nel tuo container puoi inserire regole prima o dopo un hook:
hooks:
before_my_hook:
- exec: echo "I ran before"
after_my_hook:
- exec: echo "I ran after"
Quindi nell’esempio sopra vedrai un output simile al seguente:
I ran before
1
I ran after
Puoi leggere i modelli in /var/discourse/templates per vedere quali hook hai a disposizione.
Modificare il container standalone per fornire il tenant del secondo sito
Sostituisci l’intera sezione hooks con:
hooks:
after_postgres:
- exec: sudo -u postgres createdb b_discourse || exit 0
- exec:
stdin: |
grant all privileges on database b_discourse to discourse;
cmd: sudo -u postgres psql b_discourse
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists pg_trgm;"'
after_code:
- exec:
cd: $home/plugins
cmd:
- mkdir -p plugins
- git clone https://github.com/discourse/docker_manager.git
before_bundle_exec:
- file:
path: $home/config/multisite.yml
contents: |
secondsite:
adapter: postgresql
database: b_discourse
pool: 25
timeout: 5000
host_names:
- b.discourse.example.com
after_bundle_exec:
- exec: cd /var/www/discourse && sudo -H -E -u discourse bundle exec rake multisite:migrate
Ci sono 4 hook in gioco:
-
after_postgresassicura che dopo l’installazione di postgres venga creato un db aggiuntivo chiamatob_discoursecon i permessi appropriati e le estensioni richieste. -
after_codeassicura chedocker_managervenga clonato nella directory dei plugin. -
before_bundle_execassicura che il filemultisite.ymlsia presente (che definisce dove trovare i database). -
after_bundle_execesegue l’attività di migrazione db personalizzatarake multisite:migrate— questo assicura che tutti i db siano aggiornati.
Nota sulla configurazione
L’esempio sopra può essere suddiviso in container dati / container app, se necessario. Esegui semplicemente l’hook after_postgres nel container dati e il resto nel container web.
L’esempio sopra può essere esteso per fornire ancora più DB. Per farlo, fornisci più DB duplicando le chiamate di creazione db ecc., e assicurati di aggiungere siti aggiuntivi in multisite.yml.
Assicurati di modificare il nodo host_names in multisite.yml in modo che corrisponda al nome host effettivo che desideri ospitare.
Inoltre, se hai intenzione di eseguire HTTPS, avrai bisogno di un proxy davanti al sito per gestirlo, poiché la funzionalità letsencrypt integrata non funzionerà in uno scenario multisito.