Installa Discourse su CloudPanel

:warning: 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

:information_source: 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! :heart_eyes: ]

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…

3 Mi Piace

Dovresti eliminare questi passaggi e creare app.yml senza generare questo errore. È confusionario.

(Se stai per sostituire l’intero file, perché copiare l’esempio?) La cosa migliore da fare è dire cosa deve essere modificato dall’esempio esistente. Sembra che si tratti del modello socket e di forzare https.

Questo ti dà due copie di postgres, che utilizza più RAM di quanto farebbe un singolo postgres. Funziona, ma non è una best practice.

Ci sono una serie di cose che rendono questo un cattivo esempio da seguire e sarà molto difficile da supportare. Sono felice che tu abbia trovato una soluzione per te, ma non penso che questo sia un buon percorso da consigliare alle persone.

3 Mi Piace

Grazie @pfaffman

Hai ragione. Fa il suo lavoro, ma la procedura è troppo disordinata. È nell’ordine sbagliato. Apprezzo i tuoi suggerimenti e la sistemerò.

Potresti chiarire perché la pensi così?

Perché è complicato ed è una buona idea solo per le persone che riescono a capirlo da sole. È piuttosto dispendioso e, se l’obiettivo è solo eseguire due discorsi, due VM separate sono una soluzione più economica e semplice nella maggior parte dei casi.

2 Mi Piace

Grazie ancora @pfaffman – ho semplificato la procedura e rimosso la sezione sull’aggiunta di un secondo sito Discourse sullo stesso server.

1 Mi Piace

Ho ricevuto questo messaggio

sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
usage: gpg [options] --dearmor [file]
curl: (23) Failed writing body

Perché?

Ciao Antonio. Benvenuto.

Questo sembra un problema di Docker e non di Discourse. Probabilmente otterrai risultati migliori cercando con il tuo sistema operativo e aggiornando docker-ce piuttosto che chiedere qui.

Stai cercando di usare Discourse? O CloudPanel?

1 Mi Piace

Ho appena seguito la guida qui. Ho eseguito il primo comando, per l’installazione di docker, e il server ha risposto questo
il comando è:

1 Mi Piace

Non dovrebbero esserci barre rovesciate alla fine di ciascuna di quelle righe. La barra rovesciata annulla il carattere di nuova riga, il che significa che la shell considera la riga successiva come una continuazione della stessa riga.

In questo caso, ciò comporterà il tentativo di eseguire questo come un singolo comando, che è la causa dell’errore:
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\"

Basta rimuovere quelle barre rovesciate alla fine delle righe per risolvere il problema:

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
2 Mi Piace

grazie, ora funziona bene

2 Mi Piace

Grazie @Simon_Manning – ho rimosso le barre rovesciate nello snippet di codice nel post del tutorial in cima.

2 Mi Piace

Mi dispiace, ora ho questo errore: FAILED

Pups::ExecError: /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end' failed with return #<Process::Status: pid 112 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params "/usr/local/bin/ruby -e 'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'"
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
214c73c4474ed59e7b6fb7f42143ce126d2b453022b08770da3af31ca2fdaaba

Non conosco CloudPanel, ma i messaggi di errore sembrano autoesplicativi:

'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end'
'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'\"

Sembra che la tua email non sia stata configurata durante ./discourse-setup o all’interno di app.yml (puoi modificarlo manualmente in qualsiasi momento). :thinking:

2 Mi Piace

Mi scusi tutti, sono un professore della scuola superiore Fermi e sto cercando di installare la community di Discourse per la nostra scuola. Dato che utilizziamo pannelli cloud, ho seguito questa guida ma apparentemente manca qualcosa. È possibile ricevere aiuto e una guida più dettagliata da seguire? Mille grazie

1 Mi Piace

Penso che l’uso di un’installazione avanzata potrebbe non essere quello che stai cercando se non hai molta conoscenza di sysadmin. Un altro punto importante da considerare è che tale installazione ricadrà sotto unsupported-install, rendendo meno probabile ricevere aiuto qui in caso di problemi.

Se hai il budget e a seconda delle dimensioni della tua community, potrebbe essere meglio ospitare Discourse su un altro server e seguire l’installazione standard.

1 Mi Piace

Mi dispiace e a cosa servirebbe un servizio come questo? A mio parere, forse la guida non è molto dettagliata, è fatta per amministratori di sistema, basterebbe indicare semplicemente i vari passaggi. Da dove vengo si dice: nessuno nasce già istruito. Grazie per il tuo aiuto e il tuo tempo.

1 Mi Piace

Esatto. Ecco perché è stata raccomandata l’installazione standard.

E questo, @denvergeeks, è il motivo per cui non pensavo che creare una guida del genere fosse una buona idea in primo luogo. È difficile da scrivere, difficile da mantenere e tu sei l’unica persona che può verificarla.

4 Mi Piace

Mi dispiace ma non sono d’accordo. Uso già il pannello cloud con vari domini, inoltre la community di discourse andrebbe su un sottodominio e quindi la premessa dell’autore è fin troppo chiara (la guida è per chi usa Cloud Panel con diversi servizi installati su VPS). Basta un piccolo sforzo per dettagliare meglio tutto. Dopotutto, la condivisione della conoscenza è la base delle community, altrimenti avrei acquistato un software già installato e pronto all’uso. Comunque non voglio infastidire nessuno, se è possibile avere un aiuto allora grazie altrimenti non vi disturberò più.

1 Mi Piace

@denvergeeks L’impostazione dell’email è fondamentale per il normale funzionamento e, sebbene ci sia un link all’installazione standard, il modo in cui la guida è attualmente scritta aggira l’impostazione dell’email e altre informazioni varie che potrebbero essere importanti per determinate configurazioni.

Mi chiedo se potrebbe valere la pena sostituire le sezioni Install Discourse fino a Bootstrap the App con qualcosa di più simile a:

Installa e configura Discourse

Segui l’installazione standard fino ai passaggi 1-6

Ricostruisci Discourse:

./launcher rebuild app

Quindi, nella sezione Congratulazioni!, aggiungi una riga dopo lo screenshot per dire qualcosa come “Continua con il resto della documentazione di installazione standard”. In sostanza, rielaborare la guida per fornire passaggi aggiuntivi che integrino l’installazione standard anziché fornire istruzioni di installazione alternative.

Penso che le informazioni che hai fornito su CloudPanel siano molto utili e le istruzioni siano chiare, il lato Discourse potrebbe solo beneficiare di una minore divergenza dall’installazione standard per renderla più sicura, così come il tag unsupported-install per rendere chiaro (più chiaro) che qui ci sono draghi.

2 Mi Piace

[quote=“Antonio Cirillo, post:18, topic:266422, username:Antonio_Cirillo”]
Dopo tutto, la condivisione della conoscenza è la base delle comunità, altrimenti avrei acquistato un software già installato e pronto all’uso. Comunque non voglio infastidire nessuno, se è possibile avere un aiuto allora grazie altrimenti non vi disturberò più.
[/quote]La discussione si allontana un po’ dall’argomento originale, ma ti assicuriamo che siamo felici di aiutarti. :slight_smile:

Per riassumere:

Se hai conoscenze informatiche di base, puoi seguire l’installazione standard. Avrai anche bisogno di un nome di dominio e di configurare un servizio di invio email come Mailgun (tutorial qui: Configure Mailgun for email when using Digital Ocean for DNS).

Nota che di solito non aiutiamo in questioni che esulano dall’ambito di questo forum. Ad esempio, la domanda “Come si registra un nome di dominio?” non rientrerebbe qui.

Se non hai conoscenze informatiche di base e a seconda del tuo budget, puoi chiedere supporto a pagamento su Marketplace.

Infine, puoi anche dare un’occhiata ai piani a pagamento gestiti da Discourse, dove praticamente tutto sarà gestito da noi e avrai accesso al nostro team di supporto.

Inoltre, sappi che offriamo sconti per scopi educativi, dato che menzioni che è per la tua scuola:

Ci sono sconti per istituti educativi o non profit?

Sì! Se sei legalmente riconosciuto come istituto educativo, offriamo uno sconto dell’85%. Se sei legalmente riconosciuto come organizzazione non profit esente da tasse federali, offriamo uno sconto del 50%. Questi sconti si applicano solo ai nostri piani basic, pro e business, non possono essere combinati con altri sconti e devono essere pagati tramite carta di debito/credito mensilmente o annualmente. Contattaci dopo aver avviato la tua prova e aggiungeremo lo sconto al tuo account.

4 Mi Piace