Définir les variables d'environnement

:notebook_with_decorative_cover: Ceci est un guide how-to pour configurer les variables d’environnement dans une installation Discourse auto-hébergée.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur

Les variables d’environnement jouent un rôle crucial dans la configuration de votre instance Discourse. Elles peuvent stocker des données sensibles comme des clés d’API et des mots de passe de base de données, rendant votre installation plus sécurisée et flexible. Dans Discourse, les variables d’environnement sont définies dans le fichier app.yml au sein de la configuration de votre conteneur Docker.

L’ajout de variables d’environnement à un fichier .yml (YAML) est simple. Voici un exemple de base :

# Ceci est un fichier YAML avec des variables d'environnement
env:
  VARIABLE_NAME: "Variable Value"
  ANOTHER_VARIABLE: "Another Value"

Dans le contexte d’un conteneur Docker Discourse, les variables d’environnement sont stockées dans la section env de votre fichier app.yml.

Voici un exemple de fichier app.yml :
## ceci est le modèle de conteneur Docker Discourse tout-en-un et autonome
##
## Après avoir apporté des modifications à ce fichier, vous devez reconstruire
## /var/discourse/launcher rebuild app
##
templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  db_shared_buffers: "256MB"

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

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 3

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  DISCOURSE_HOSTNAME: 'discourse.example.com'

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (-h option) que celui spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste des e-mails délimités par des virgules qui seront rendus administrateurs et développeurs
  ## lors de la première inscription, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'user@example.com'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  DISCOURSE_SMTP_ADDRESS: smtp.example.com         # (obligatoire)
  DISCOURSE_SMTP_PORT: 587                        # (facultatif)
  DISCOURSE_SMTP_USER_NAME: user@example.com      # (facultatif)
  DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword      # (facultatif)
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (facultatif, par défaut true)

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## L'adresse CDN pour cette instance Discourse (configurée pour tirer)
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com
## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail "De" pour votre première inscription, décommentez et modifiez :
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit s'exécuter qu'une seule fois.
  - exec: echo "Fin des commandes personnalisées"

Commençons par ajouter des variables d’environnement à votre site ! :mage:

:information_source: Les instructions suivantes sont rédigées pour une Installation Discourse Standard

Connexion à votre serveur

Utilisez un outil comme PuTTY ou le terminal sur les systèmes basés sur Unix pour vous connecter en SSH à votre serveur.

ssh username@your-server-ip

Naviguer vers le répertoire Discourse

Une fois que vous avez accès à votre serveur, naviguez vers le répertoire contenant votre configuration Docker Discourse, généralement situé à /var/discourse.

cd /var/discourse

Ouvrir le fichier app.yml

Vous devrez ouvrir le fichier app.yml dans un éditeur de texte. Pour cet exemple, nous utiliserons nano.

nano containers/app.yml

Ajouter vos variables d’environnement

Dans le fichier app.yml, vous trouverez une section env. C’est là que vous pouvez ajouter vos variables d’environnement.

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

Par exemple, si vous souhaitiez définir la variable d’environnement DISCOURSE_ENABLE_CORS sur true pour activer le Cross-Origin Resource Sharing (CORS), vous ajouteriez la ligne suivante à la section env :

env:
  DISCOURSE_ENABLE_CORS: "true"
  ...

:person_tipping_hand: L’espacement et le formatage sont importants ici, alors assurez-vous de maintenir le bon retrait (deux espaces) pour la nouvelle ligne.

Une fois que vous avez modifié vos variables, enregistrez et fermez le fichier.

Reconstruire le conteneur Discourse

Enfin, vous devrez reconstruire votre conteneur Docker Discourse pour que les modifications prennent effet. Vous pouvez le faire avec la commande suivante :

./launcher rebuild app

Alternativement, pour mettre à jour les variables d’environnement d’un conteneur en cours d’exécution sans reconstruire, vous pouvez également utiliser :

./launcher destroy app
./launcher start app

Une fois le processus de reconstruction terminé, vos variables d’environnement mises à jour seront disponibles pour votre application Discourse ! :tada:

4 « J'aime »

Cela serait beaucoup plus utile si cela expliquait comment utiliser les variables d’environnement pour remplacer (et donner depuis l’UX) les paramètres système ou les paramètres globaux dans le fichier de variables globales par défaut (et y renvoyer pour que les gens puissent voir ces paramètres comme des paramètres redis obscurs)

C’est un exemple déroutant car il n’a rien à voir avec Discourse.

Vous pourriez mentionner que c’est la même chose que d’utiliser la commande analogue comme le réglage dans Docker, peut-être.

Je vois que vous avez fait cela parce que vous avez créé Setup Cross-Origin Resource Sharing (CORS), alors peut-être utiliser cela comme exemple.

7 « J'aime »

Existe-t-il un endroit où l’on peut trouver toutes les variables d’environnement possibles utilisées dans Discourse ?

Ce serait beaucoup plus utile qu’un sujet qui dit que les variables d’environnement vont dans app.yml sous la section env: :rire :

De plus, pour que l’application « charge » les variables d’environnement modifiées, je suis à peu près sûr que vous pouvez simplement faire un restart et que vous n’avez pas besoin de faire un rebuild, mais s’il vous plaît, corrigez-moi si je me trompe.

Vous pouvez détruire et démarrer le conteneur ; c’est ajouté à l’OP, je pense. Le seul problème est si vous avez effectué des mises à niveau à partir de l’UX, elles sont perdues.

Vous pouvez définir n’importe quel paramètre de site avec DISCOURSE_SETTING_NAME. Voir aussi les paramètres par défaut sous config. discourse/config/discourse_defaults.conf at main · discourse/discourse · GitHub

4 « J'aime »

Salut @SaraDev, puis-je savoir comment ces variables d’environnement modifient le comportement de Discourse ? Par exemple, toutes les variables mentionnées dans ce post Available settings for global rate limits and throttling Je ne trouve aucune d’entre elles dans le code source de Discourse, alors comment ces variables sont-elles liées à Discourse ? Merci !

Je pense que vous pouvez les voir ici :

3 « J'aime »

Merci beaucoup @Arkshine.

1 « J'aime »

Existe-t-il un moyen de définir des variables d’environnement sur un environnement de développement non hébergé par Docker ? Je prévois d’héberger avec Docker à terme, mais je développe localement avec cette configuration : Install Discourse on macOS for development
Il n’y a pas de fichier app.yml dans ce cas.

Vous pouvez les définir dans la ligne de commande avant de démarrer Rails, mais qu’essayez-vous de faire avec ces variables ENV ?

J’essaie de définir DISCOURSE_ENABLE_CORS sur true pour le SSO. Pourriez-vous m’envoyer une commande d’exemple ? Je suis nouveau dans le développement de discourse / rails. Que fait cela finalement ? Crée un enregistrement dans la table site_settings ?

J’essaie de configurer Discourse automatiquement dans Kubernetes. Par conséquent, je prévois de construire une image Docker personnalisée (DinD).
MAIS si j’exécutais ./discourse-setup.sh dans mon Dockerfile, il me demanderait des options de configuration - auxquelles Docker ne peut pas répondre (car cela devrait être fait automatiquement).

Je comprends que je pourrais mettre ces variables d’environnement dans le fichier app.yml, mais à ce stade, il n’y aurait aucun fichier app.yaml du tout, car le script ./discourse-setup n’aurait pas encore été exécuté.

Ma question serait donc : Comment puis-je préconfigurer Discourse pour mes besoins, afin que ./discourse-setup ne nécessite pas mon intervention ?

Le guide d’installation discourse/docs/INSTALL-cloud.md at main · discourse/discourse (github.com) ne dit rien sur les préconfigurations ou les fichiers de configuration.

Merci d’avance !

2 « J'aime »

Essayez

./launcher start-cmd app

Cela vous donnera la commande docker start utilisée pour démarrer le conteneur. Vous devriez être en mesure de l’utiliser pour comprendre comment démarrer les choses dans k8s.

5 « J'aime »

Existe-t-il d’autres emplacements courants pour le fichier app.yml, ou est-il possible que ce fichier doive être créé à partir de zéro ? Je suis « entré » dans mon conteneur Docker (docker exec -it discourse_dev /bin/bash), et je n’ai pas pu trouver de fichier nommé app.yml.

Le fichier app.yml doit se trouver à l’extérieur de votre conteneur, et non à l’intérieur.

2 « J'aime »