Non riesco più a far funzionare il metodo secondosite, quindi ora sto pensando di eseguire i miei due siti in container separati sullo stesso server.
Se qualcuno ha esperienza in merito, mi contatti.
Non riesco più a far funzionare il metodo secondosite, quindi ora sto pensando di eseguire i miei due siti in container separati sullo stesso server.
Se qualcuno ha esperienza in merito, mi contatti.
È per lo più fattibile su una macchina di dimensioni discrete, avrai bisogno di un reverse proxy come minimo per gestire ssl. E forse usa il template socketed invece di esporre le porte.
una rete Docker sarebbe appropriata?
Se sai quello che stai facendo, allora sì. Non dovrebbero esserci problemi.
L’ho fatto con traefik e nginx proxy qualcosa. Utilizza più risorse rispetto al multisito. Devi comunque capire come far sì che postgres abbia più database (a meno che tu non voglia eseguire due copie di postgres, il che richiederà ancora più risorse).
Questo server ha 12 processori e 16 GB e questi non sono forum ad alto volume, quindi non sono preoccupato per le risorse aggiuntive per avere due container che eseguono entrambi postgres.
Devi creare un altro file yml, come app2.yml e cambiare tutte le cose che sono in conflitto con l’altro.
Ciao Jay
Quando dici
intendi che dovrei trattare i due container come un unico sito dietro un hostname sensato e una configurazione di failover (cioè lo stesso DISCOURSE_HOSTNAME e un load balancer/health-check davanti), piuttosto che cercare di esporre entrambi i container direttamente?
Immagino che entrambe le configurazioni possano accettare il parametro di rete piuttosto che esporre le porte, il che aiuta con potenziali conflitti?
I bind delle mount dei volumi devono essere diversi per ciascun container?
Aspetta. Hai clonato Discourse due volte? Devi clonare Discourse una volta e poi avere più file yml nella directory dei container.
Forse dai un’occhiata a Use Nginx Proxy Manager to manage multiple sites with Discourse, anche se https://hub.docker.com/r/jwilder/nginx-proxy è quello che ho usato. Devi solo aggiungere alcune variabili d’ambiente al tuo YML per farlo connettere, ma ci sono ancora un sacco di cose che devi capire per farlo funzionare.
Ogni sito ha il proprio hostname. Questo è il punto di tutto questo, giusto?
Ho il reverse proxy che parla alla porta 80 del container. Altri preferiscono usare i socket. Non dovresti esporre alcuna porta.
No. Nessuno di questi file può essere condiviso.
Ogni sito necessita di un database postgres (può essere sullo stesso server postgres se sai come farlo).
Ogni sito necessita del proprio redis. Non possono condividere redis, che è uno dei vantaggi della configurazione multisito.
Se vuoi eseguire due postgres, cambia semplicemente hostname, smtp e percorsi dei volumi e rimuovi/commenta i template ssl e letsencrypt. Puoi anche usare discourse-setup se rinomini app.yml in, ad esempio, hostname.yml prima di eseguire nuovamente ./discourse-setup.
potresti approfondire questo punto, ho adattato entrambi gli esempi qui sotto per adattarli a una configurazione di secondo sito anziché a un singolo sito
##########################################
# app1.yml (web + sidekiq)
##########################################
templates:
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- docker_args: "--network=discourse-net"
+ docker_args: "--network=discourse-net-1"
expose:
- "8001:80"
params:
version: tests-passed
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: "physicsyear2.site"
DISCOURSE_DEVELOPER_EMAILS: "tvgazebo5@gmail.com"
DISCOURSE_SMTP_ADDRESS: smtp-relay.brevo.com
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_USER_NAME: "YOUR_BREVO_USERNAME"
DISCOURSE_SMTP_PASSWORD: "YOUR_BREVO_PASSWORD"
DISCOURSE_NOTIFICATION_EMAIL: "noreply@physicsyear2.site"
## External Postgres
DISCOURSE_DB_HOST: pg
DISCOURSE_DB_PORT: 5432
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: "REPLACE_ME_discordb_strong"
DISCOURSE_DB_NAME: discourse
DISCOURSE_DB_SOCKET: ""
## External Redis
DISCOURSE_REDIS_HOST: redis
DISCOURSE_REDIS_PORT: 6379
DISCOURSE_REDIS_PASSWORD: "REPLACE_ME_redis_strong"
## MUST be identical on app1 and app2
SECRET_KEY_BASE: "REPLACE_ME_secret_key_base"
volumes:
- volume:
- host: /var/discourse/shared/web-only
+ host: /var/discourse/shared/web-only-1
guest: /shared
- volume:
- host: /var/discourse/shared/web-only/log/var-log
+ host: /var/discourse/shared/web-only/log/var-log-1
guest: /var/log
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
run:
- exec: echo "App1 starting — Sidekiq ENABLED"
# Note: NO sidekiq/down file here → Sidekiq runs
- exec: echo "App1 ready"
##########################################
# app2.yml (web + sidekiq)
##########################################
templates:
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- docker_args: "--network=discourse-net"
+ docker_args: "--network=discourse-net-2"
expose:
- "8002:80"
params:
version: tests-passed
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: "physicsyear2.site"
DISCOURSE_DEVELOPER_EMAILS: "ppyem3@gmail.com"
DISCOURSE_SMTP_ADDRESS: smtp-relay.brevo.com
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_USER_NAME: "YOUR_BREVO_USERNAME"
DISCOURSE_SMTP_PASSWORD: "YOUR_BREVO_PASSWORD"
DISCOURSE_NOTIFICATION_EMAIL: "noreply@physicsyear2.site"
## External Postgres
DISCOURSE_DB_HOST: pg
DISCOURSE_DB_PORT: 5432
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: "REPLACE_ME_discordb_strong"
DISCOURSE_DB_NAME: discourse
DISCOURSE_DB_SOCKET: ""
## External Redis
DISCOURSE_REDIS_HOST: redis
DISCOURSE_REDIS_PORT: 6379
DISCOURSE_REDIS_PASSWORD: "REPLACE_ME_redis_strong"
## MUST be identical on app1 and app2
SECRET_KEY_BASE: "REPLACE_ME_secret_key_base"
volumes:
- volume:
- host: /var/discourse/shared/web-only
+ host: /var/discourse/shared/web-only-2
guest: /shared
- volume:
- host: /var/discourse/shared/web-only/log/var-log
+ host: /var/discourse/shared/web-only/log/var-log-2
guest: /var/log
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
run:
- exec: echo "App2 starting — Sidekiq ENABLED"
# IMPORTANT: we DO NOT create /etc/service/sidekiq/down here
# so Sidekiq also runs in app2
- exec: echo "App2 ready"
Puoi anche usare
discourse-setupse rinomini app.yml in, ad esempio,hostname.ymlprima di eseguire nuovamente./discourse-setup.
questo sembra buono, e probabilmente spiega perché .\discourse-setup non funzionava con un app.yml invece che il file yml avesse il nome dell’hostname previsto?
Ho due copie separate di Discourse, almeno per ora, che mi permetteranno di giocarci un po’. Come ho detto prima, questo sistema è abbastanza grande e i siti sono abbastanza piccoli da non pensare che sia un problema duplicare le cose.
Come ho detto prima, questo sistema è abbastanza grande e i siti sono abbastanza piccoli che non penso sia un problema duplicare le cose.
Non è lo spazio. È solo confusionario. È progettato per avere un singolo clone di discourse e tutti i container nella directory dei container. Ecco perché si chiama containers.
Capito. Probabilmente lo sistemerò domani, sembra una correzione facile.