Questo metodo di installazione non è ufficialmente supportato. Utilizzatelo a vostro rischio e pericolo.
Il team di Discourse consiglia esclusivamente l’installazione tramite la guida ufficiale di installazione
Questa è un’installazione non supportata, adatta a chi ha esperienza con CloudPanel, è un amministratore di sistema esperto, conosce Docker e i proxy inversi, e ha completato con successo un’installazione standard.
Perché CloudPanel
Perché potreste voler installare un forum Discourse su un VPS o un server dedicato con CloudPanel?
Ecco i miei motivi:
Preferisco utilizzare un’interfaccia grafica per l’amministrazione del server e del sito. Ho utilizzato, in momenti diversi, la maggior parte dei pannelli di controllo per l’hosting web.
Rispetto agli altri, CloudPanel è molto snello e minimale e pulito. Ha tutte le funzionalità di cui ho bisogno, presentate in modo semplice e intuitivo. E basta. Non ha nulla di superfluo.
Sviluppo, ospito e gestisco molti blog Ghost, siti Wordpress, siti Drupal e altri tipi di siti, oltre ai forum Discourse. Mi serve davvero un solo server dove poter ospitare i miei forum Discourse insieme ai miei blog Ghost e ai miei siti Wordpress e Drupal. (Non voglio pagare e mantenere un server separato per ogni istanza di Discourse.)
CloudPanel include (già pronto all’uso) Nginx integrato e un’interfaccia semplice per configurare e gestire i proxy inversi, necessari per eseguire una o più istanze di Discourse sullo stesso server o insieme ad altri tipi di siti web.
Il team di Discourse (e lo staff del forum Meta qui) non fornisce supporto per ambienti server alternativi come Cpanel, Plesk o (come in questo caso) CloudPanel, o altri che nascono dalla riga di comando.
Quindi ho pensato di condividere la mia configurazione e il mio processo, nel caso ci siano altre persone che potrebbero trovarli utili.
[Se qualcuno prova questo metodo, fate sapere come è andata o se posso migliorare questo tutorial!
]
Installare Docker
In Putty (o un altro terminale), dalla directory root, eseguite:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
Creare un sito Proxy Inverso in CloudPanel
→ Cliccate sul pulsante + Aggiungi sito…
Per la mia istanza di Discourse sto usando il mio dominio noobish.me, quindi d’ora in poi, ovunque lo vediate in queste istruzioni, sostituite noobish.me con il vostro dominio effettivo (ad esempio, vostrosito.com)
→ Creiamo un nuovo “Sito Proxy Inverso” in CloudPanel per il dominio dove vogliamo ospitare il nostro forum Discourse (ovviamente, il record DNS A del dominio deve puntare allo stesso indirizzo IP del nostro CloudPanel.)
Preparare il dominio e configurare SSL
Per il mio sito sto usando i nameserver di Cloudflare per puntare il dominio. In Cloudflare ho impostato SSL su Full o Full (strict).
Ho anche creato una Cloudflare Page Rule. Visitate questo post per sapere perché.
Sto anche usando un certificato SSL Origin gratuito di Cloudflare per il mio dominio, che ho “importato” in CloudPanel nelle impostazioni del sito “SSL/TLS” per quel sito (semplicemente incollando sia il Certificato che la Chiave Privata che avevo scaricato per quel nome di dominio dal mio account Cloudflare.)
Installare Discourse
Tornate in Putty (o un altro terminale), dalla directory root (c d Invio per tornare alla root) → Installate la installazione standard di Discourse usando questi comandi…
git clone https://github.com/discourse/discourse_docker.git /var/discourse
Invio
cd /var/discourse
Invio
chmod 700 containers
Copiare la configurazione Standalone
Ora copiamo il file /var/discourse/standalone.yml in /var/discourse/containers/ come app.yml prima di modificarlo in base alle impostazioni del nostro sito.
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml
Modificare il file app.yml
Oltre a modificare il file app.yml in base alle impostazioni specifiche del nostro sito, dobbiamo cambiare 3 cose in quel file prima di salvarlo…
Nella sezione templates: dobbiamo aggiungere
- "templates/web.socketed.template.yml"
Poiché sto usando Cloudflare, nella sezione templates: aggiungo anche
- "templates/cloudflare.template.yml"
Nella sezione expose: dobbiamo commentare
#- "80:80" # http
#- "443:443" # https
Nella sezione env: dobbiamo aggiungere
DISCOURSE_FORCE_HTTPS: true
Per riferimento, potete cliccare qui per vedere il contenuto del mio app.yml funzionante su noobish.me dove sto usando sia Cloudflare che Mailgun...
## questo è il template del contenitore Docker Discourse standalone tutto-in-uno ## ## Dopo aver apportato modifiche a questo file, DOVETE ricostruire ## /var/discourse/launcher rebuild app ## ## SIATE *MOLTO* CAUTI DURANTE LA MODIFICA! ## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI NEGLI SPAZI O NELL'ALLINEAMENTO! ## visitate http://www.yamllint.com/ per validare questo file quando necessario templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/web.socketed.template.yml" - "templates/cloudflare.template.yml" params: db_default_text_search_config: "pg_catalog.english" ## Impostate db_shared_buffers a un massimo del 25% della memoria totale. ## verrà impostato automaticamente dal bootstrap in base alla RAM rilevata, oppure potete sovrascrivere db_shared_buffers: "4096MB" ## può migliorare le prestazioni di ordinamento, ma aumenta l'uso di memoria per connessione #db_work_mem: "40MB" ## Quale revisione Git dovrebbe usare questo contenitore? (default: tests-passed) #version: tests-passed env: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 LANGUAGE: en_US.UTF-8 # DISCOURSE_DEFAULT_LOCALE: en DISCOURSE_FORCE_HTTPS: true ## Quante richieste web concorrenti sono supportate? Dipende dalla memoria e dai core CPU. ## verrà impostato automaticamente dal bootstrap in base alle CPU rilevate, oppure potete sovrascrivere UNICORN_WORKERS: 8 ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse ## Obbligatorio. Discourse non funzionerà con un indirizzo IP nudo. DISCOURSE_HOSTNAME: 'noobish.me' ## Scommentate se volete che il contenitore venga avviato con lo stesso ## hostname (opzione -h) specificato sopra (default "$hostname-$config") #DOCKER_USE_HOSTNAME: true ## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori ## alla registrazione iniziale, esempio 'user1@example.com,user2@example.com' DISCOURSE_DEVELOPER_EMAILS: 'admin@noobish.me' ## TODO: Il server SMTP utilizzato per validare nuovi account e inviare notifiche ## INDIRIZZO SMTP, nome utente e password sono obbligatori ## ATTENZIONE: il carattere '#' nella password SMTP può causare problemi! DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org DISCOURSE_SMTP_PORT: 587 DISCOURSE_SMTP_USER_NAME: postmaster@noobish.me DISCOURSE_SMTP_PASSWORD: pYdRLyQW #DISCOURSE_SMTP_ENABLE_START_TLS: true # (opzionale, default true) #DISCOURSE_SMTP_DOMAIN: noobish.me # (richiesto da alcuni provider) DISCOURSE_NOTIFICATION_EMAIL: noreply@noobish.me # (indirizzo da cui inviare le notifiche) ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per recuperare) ## vedere https://meta.discourse.org/t/14857 per i dettagli #DISCOURSE_CDN_URL: https://discourse-cdn.example.com ## La chiave IP di geolocalizzazione Maxmind per la ricerca degli indirizzi IP ## vedere https://meta.discourse.org/t/-/137387/23 per i dettagli #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456 ## Il contenitore Docker è senza stato; tutti i dati sono archiviati in /shared volumes: - volume: host: /var/discourse/shared/standalone guest: /shared - volume: host: /var/discourse/shared/standalone/log/var-log guest: /var/log ## I plugin vanno qui ## vedere https://meta.discourse.org/t/19157 per i dettagli hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git ## Qualsiasi comando personalizzato da eseguire dopo la costruzione run: - exec: echo "Inizio comandi personalizzati" ## Se volete impostare l'indirizzo email 'From' per la vostra prima registrazione, scommentate e modificate: ## Dopo aver ricevuto la prima email di registrazione, riscommentate la riga. Deve essere eseguita solo una volta. #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'" - exec: echo "Fine comandi personalizzati"
Poi salviamo ed usciamo dal file app.yml…
CTRL-X
y
Invio
Ora impostiamo i permessi per il file app.yml…
chmod o-rwx containers/app.yml
poi…
Avviare il Bootstrap dell’App
cd /var/discourse
./launcher bootstrap app
Ci vorrà un tempo considerevole. Alla fine del processo di bootstrap, vi verrà chiesto di:
./launcher start app
Modificare il file Vhost
Ora torniamo in CloudPanel e incolliamo il codice sottostante nell’“Editor Vhost” per il nostro sito Discourse (sovrascrivendo quello già presente). Ovviamente, sostituite vostrosito.com con il vostro dominio effettivo.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
{{ssl_certificate_key}}
{{ssl_certificate}}
server_name yoursite.com;
{{root}}
{{nginx_access_log}}
{{nginx_error_log}}
if ($scheme != "https") {
rewrite ^ https://$host$uri permanent;
}
location ~ /.well-known {
auth_basic off;
allow all;
}
{{settings}}
add_header Cache-Control no-transform;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
Riavviare Nginx
Successivamente dobbiamo riavviare Nginx, il che possiamo fare cliccando su un pulsante nell’Area Amministrativa di CloudPanel…
Congratulazioni!
Ora, nel nostro browser, possiamo andare all’URL del nostro sito e avviare la procedura guidata di configurazione di Discourse…
Convivere in Pace
Ora posso ospitare e gestire autonomamente il mio sito Discourse insieme ai miei siti Ghost, Wordpress, Drupal e altri tipi di siti, utilizzando un pannello di gestione pulito e snello, con la necessità minima di usare il terminale/riga di comando in futuro.
Per installare istanze aggiuntive di Discourse…








