Imposta variabili ambientali

:notebook_with_decorative_cover: Questa è una guida how-to per la configurazione delle variabili d’ambiente in un’installazione Discourse self-hosted.

:person_raising_hand: Livello utente richiesto: Amministratore

Le variabili d’ambiente svolgono un ruolo cruciale nella configurazione della tua istanza Discourse. Possono memorizzare dati sensibili come chiavi API e password del database, rendendo la tua installazione più sicura e flessibile. In Discourse, le variabili d’ambiente sono impostate nel file app.yml all’interno della configurazione del tuo container Docker.

L’aggiunta di variabili d’ambiente a un file .yml (YAML) è semplice. Ecco un esempio di base:

# Questo è un file YAML con variabili d'ambiente
env:
  NOME_VARIABILE: "Valore Variabile"
  ALTRA_VARIABILE: "Altro Valore"

Nel contesto di un container Docker Discourse, le variabili d’ambiente sono memorizzate nella sezione env del tuo file app.yml.

Ecco un esempio di file app.yml:
## questo è il template del container Docker Discourse all-in-one, standalone
##
## Dopo aver apportato modifiche a questo file, devi ricostruire
## /var/discourse/launcher rebuild app
##
templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Decommenta queste due righe se desideri aggiungere Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP deve esporre questo container?
## Se vuoi che Discourse condivida una porta con un altro webserver come Apache o nginx,
## vedi https://meta.discourse.org/t/17247 per i dettagli
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers al massimo del 25% della memoria totale.
  ## verrĂ  impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascriverlo
  db_shared_buffers: "256MB"

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Quante richieste web concorrenti sono supportate? Dipende dalla memoria e dai core della CPU.
  ## verrĂ  impostato automaticamente da bootstrap in base alle CPU rilevate, oppure puoi sovrascriverlo
  UNICORN_WORKERS: 3

  ## TODO: Il nome del dominio a cui risponderĂ  questa istanza Discourse
  DISCOURSE_HOSTNAME: 'discourse.example.com'

  ## Decommenta se vuoi che il container venga avviato con lo stesso
  ## hostname (-h opzione) specificato sopra (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
  ## alla prima registrazione esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'user@example.com'

  ## TODO: Il server di posta SMTP utilizzato per convalidare i nuovi account e inviare notifiche
  DISCOURSE_SMTP_ADDRESS: smtp.example.com         # (obbligatorio)
  DISCOURSE_SMTP_PORT: 587                        # (opzionale)
  DISCOURSE_SMTP_USER_NAME: user@example.com      # (opzionale)
  DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword      # (opzionale)
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, default true)

  ## Se hai aggiunto il template Lets Encrypt, decommenta sotto per ottenere un certificato SSL gratuito
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## L'indirizzo CDN per questa istanza Discourse (configurato per il pull)
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com
## Il container Docker è stateless; tutti i dati sono memorizzati 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
## vedi 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 build
run:
  - exec: echo "Inizio comandi personalizzati"
  ## Se vuoi impostare l'indirizzo email 'Da' per la tua prima registrazione, decommenta e modifica:
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## Dopo aver ricevuto la prima email di registrazione, ri-commenta la riga. Deve essere eseguita solo una volta.
  - exec: echo "Fine comandi personalizzati"

Iniziamo ad aggiungere le variabili d’ambiente al tuo sito! :mage:

:information_source: Le seguenti istruzioni sono scritte per un Standard Discourse Installation

Accedi al tuo Server

Utilizza uno strumento come PuTTY o il terminale sui sistemi basati su Unix per connetterti via SSH al tuo server.

ssh username@your-server-ip

Naviga nella Directory Discourse

Una volta ottenuto l’accesso al tuo server, naviga nella directory che contiene la tua configurazione Docker di Discourse, solitamente situata in /var/discourse.

cd /var/discourse

Apri il File app.yml

Dovrai aprire il file app.yml in un editor di testo. Per questo esempio utilizzeremo nano.

nano containers/app.yml

Aggiungi le tue Variabili d’Ambiente

Nel file app.yml, troverai una sezione env. È qui che puoi aggiungere le tue variabili d’ambiente.

env:
  DISCOURSE_HOSTNAME: 'discourse.example.com'
  DISCOURSE_SMTP_ADDRESS: smtp.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: user@example.com
  DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword

Ad esempio, se volessi impostare la variabile d’ambiente DISCOURSE_ENABLE_CORS su true per abilitare Cross-Origin Resource Sharing (CORS), aggiungeresti la seguente riga alla sezione env:

env:
  DISCOURSE_ENABLE_CORS: "true"
  ...

:person_tipping_hand: Lo spazio bianco e la formattazione sono importanti qui, quindi assicurati di mantenere la corretta indentazione (due spazi) per la nuova riga.

Una volta modificate le tue variabili, salva e chiudi il file.

Ricostruisci il Container Discourse

Infine, dovrai ricostruire il tuo container Docker Discourse affinchĂŠ le modifiche abbiano effetto. Puoi farlo con il seguente comando:

./launcher rebuild app

In alternativa, per aggiornare le variabili d’ambiente per un container in esecuzione senza ricostruire, puoi anche utilizzare:

./launcher destroy app
./launcher start app

Dopo il completamento del processo di ricostruzione, le tue variabili d’ambiente aggiornate saranno disponibili per la tua applicazione Discourse! :tada:

4 Mi Piace

Sarebbe molto più utile se spiegasse come utilizzare le variabili d’ambiente per sovrascrivere (e fornire dall’UX) le impostazioni di sistema o le impostazioni globali nel file delle variabili globali predefinito (e vi collegasse in modo che le persone potessero vedere quelle impostazioni come impostazioni Redis oscure)

Questo è un esempio confuso poichÊ non ha nulla a che fare con Discourse.
Potresti menzionare che è lo stesso che usare il comando analogo come l’impostazione in Docker, forse.
Vedo che l’hai creato perché hai creato Setup Cross-Origin Resource Sharing (CORS), quindi forse usalo come esempio.

7 Mi Piace

C’è un posto dove si possono trovare tutte le possibili variabili d’ambiente utilizzate in Discourse?

Questo sarebbe stato molto più utile di un argomento che dice che le variabili d’ambiente vanno in app.yml sotto la sezione env: :laughing:

Inoltre, affinché l’applicazione “carichi” le variabili d’ambiente modificate, sono abbastanza sicuro che sia sufficiente un restart e non sia necessario un rebuild, ma per favore qualcuno mi corregga se sbaglio.

Puoi distruggere e avviare il container; questo è stato aggiunto all’OP, credo. L’unico problema è se hai eseguito aggiornamenti dall’UX, questi vengono persi.

Puoi impostare qualsiasi impostazione del sito con DISCOURSE_SETTING_NAME. Vedi anche le impostazioni predefinite sotto config. discourse/config/discourse_defaults.conf at main ¡ discourse/discourse ¡ GitHub

4 Mi Piace

Ciao @SaraDev, posso sapere come queste variabili d’ambiente cambiano il comportamento di Discourse? Ad esempio, tutte le variabili menzionate in questo post Available settings for global rate limits and throttling non riesco a trovarne nessuna nel codice sorgente di Discourse, quindi come sono collegate queste variabili a Discourse? Grazie!

Credo che tu possa vederli qui:

3 Mi Piace

Grazie mille @Arkshine.

1 Mi Piace

È possibile impostare variabili d’ambiente in un ambiente di sviluppo non ospitato su Docker? Ho intenzione di ospitare con Docker alla fine, ma sto sviluppando localmente con questa configurazione: Install Discourse on macOS for development
In questo caso non c’è app.yml

Puoi impostarle nella riga di comando prima di avviare rails, ma cosa stai cercando di fare con quelle variabili ENV?

Sto cercando di impostare DISCOURSE_ENABLE_CORS su true per l’SSO. Potresti inviarmi un comando di esempio? Sono nuovo allo sviluppo di discourse / rails. Inoltre, cosa fa in definitiva? Crea un record nella tabella site_settings?

Sto cercando di configurare discourse automaticamente all’interno di kubernetes. Pertanto, ho intenzione di creare un’immagine docker personalizzata (DinD).
MA se eseguissi ./discourse-setup.sh nel mio Dockerfile, mi verrebbero chieste opzioni di configurazione, a cui docker non può rispondere (poichÊ ciò dovrebbe essere fatto automaticamente).

Capisco che potrei inserire quelle variabili d’ambiente nel file app.yml, ma a questo punto non ci sarà alcun file app.yaml, poiché lo script ./discourse-setup non è ancora stato eseguito.

Quindi la mia domanda sarebbe: come posso pre-configurare discourse per i miei scopi, in modo che ./discourse-setup non richieda il mio input utente?

La guida di installazione discourse/docs/INSTALL-cloud.md at main ¡ discourse/discourse (github.com) non dice nulla riguardo a pre-configurazioni o file di configurazione.

Grazie in anticipo!

2 Mi Piace

Prova \n\n./launcher start-cmd app\n\n\nQuesto ti darĂ  il comando docker start usato per avviare il container. Dovresti essere in grado di usarlo per capire come avviare le cose in k8s.

5 Mi Piace

Esistono altri luoghi comuni in cui potrebbe trovarsi il file app.yml, o è possibile che questo file debba essere creato da zero? Sono “entrato” nel mio container Docker (docker exec -it discourse_dev /bin/bash) e non sono riuscito a trovare alcun file chiamato app.yml.

Il file app.yml dovrebbe trovarsi all’esterno del container, anziché al suo interno.

2 Mi Piace