Umweltvariablen festlegen

:notebook_with_decorative_cover: Dies ist eine #how-to::tag-Anleitung zum Einrichten von Umgebungsvariablen in einer selbst gehosteten Discourse-Installation.

:person_raising_hand: Erforderliches Benutzerniveau: Administrator

Umgebungsvariablen spielen eine entscheidende Rolle bei der Konfiguration Ihrer Discourse-Instanz. Sie können sensible Daten wie API-Schlüssel und Datenbankpasswörter speichern, wodurch Ihre Installation sicherer und flexibler wird. In Discourse werden Umgebungsvariablen in der Datei app.yml innerhalb Ihrer Docker-Container-Einrichtung festgelegt.

Das Hinzufügen von Umgebungsvariablen zu einer .yml (YAML) Datei ist unkompliziert. Hier ist ein grundlegendes Beispiel:

# Dies ist eine YAML-Datei mit Umgebungsvariablen
env:
  VARIABLE_NAME: "Variablenwert"
  ANOTHER_VARIABLE: "Anderer Wert"

Im Kontext eines Discourse Docker-Containers werden Umgebungsvariablen im Abschnitt env Ihrer app.yml-Datei gespeichert.

Hier ist ein Beispiel für eine app.yml-Datei:
## Dies ist die All-in-One, Standalone Discourse Docker Container-Vorlage
##
## Nach Änderungen an dieser Datei müssen Sie neu erstellen
## /var/discourse/launcher rebuild app
##
templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container verfügbar machen?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setzen Sie db_shared_buffers auf maximal 25% des Gesamtspeichers.
  ## wird automatisch von bootstrap basierend auf dem erkannten RAM gesetzt, oder Sie können überschreiben
  db_shared_buffers: "256MB"

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

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
  ## wird automatisch von bootstrap basierend auf den erkannten CPUs gesetzt, oder Sie können überschreiben
  UNICORN_WORKERS: 3

  ## TODO: Der Domainname, auf den diese Discourse-Instanz reagieren wird
  DISCOURSE_HOSTNAME: 'discourse.example.com'

  ## Kommentieren Sie dies aus, wenn der Container mit demselben
  ## Hostnamen (-h Option) wie oben angegeben gestartet werden soll (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste von durch Kommas getrennten E-Mails, die bei der ersten Anmeldung Administrator und Entwickler werden
  ## Beispiel: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'user@example.com'

  ## TODO: Der SMTP-Mailserver, der zum Validieren neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  DISCOURSE_SMTP_ADDRESS: smtp.example.com         # (obligatorisch)
  DISCOURSE_SMTP_PORT: 587                        # (optional)
  DISCOURSE_SMTP_USER_NAME: user@example.com      # (optional)
  DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword      # (optional)
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, Standard true)

  ## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, kommentieren Sie unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## Die CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com
## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins kommen hierher
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Alle benutzerdefinierten Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn Sie die E-Mail-Adresse des Absenders für Ihre erste Registrierung festlegen möchten, kommentieren Sie sie aus und ändern Sie sie:
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## Nach Erhalt der ersten Registrierungs-E-Mail kommentieren Sie die Zeile wieder aus. Sie muss nur einmal ausgeführt werden.
  - exec: echo "Ende der benutzerdefinierten Befehle"

Lassen Sie uns mit dem Hinzufügen von Umgebungsvariablen zu Ihrer Website beginnen! :mage:

:information_source: Die folgenden Anweisungen sind für eine Standard-Discourse-Installation geschrieben

Melden Sie sich bei Ihrem Server an

Verwenden Sie ein Tool wie PuTTY oder das Terminal auf Unix-basierten Systemen, um sich per SSH bei Ihrem Server anzumelden.

ssh benutzername@ihre-server-ip

Navigieren Sie zum Discourse-Verzeichnis

Sobald Sie Zugriff auf Ihren Server haben, navigieren Sie zu dem Verzeichnis, das Ihre Discourse Docker-Einrichtung enthält. Dieses befindet sich normalerweise unter /var/discourse.

cd /var/discourse

Öffnen Sie die Datei app.yml

Sie müssen die Datei app.yml in einem Texteditor öffnen. Für dieses Beispiel verwenden wir nano.

nano containers/app.yml

Fügen Sie Ihre Umgebungsvariablen hinzu

In der Datei app.yml finden Sie einen Abschnitt env. Hier können Sie Ihre Umgebungsvariablen hinzufügen.

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

Wenn Sie beispielsweise die Umgebungsvariable DISCOURSE_ENABLE_CORS auf true setzen möchten, um Cross-Origin Resource Sharing (CORS) zu aktivieren, würden Sie die folgende Zeile zum Abschnitt env hinzufügen:

env:
  DISCOURSE_ENABLE_CORS: "true"
  ...

:person_tipping_hand: Der Leerraum und die Formatierung sind hier wichtig, stellen Sie also sicher, dass Sie die richtige Einrückung (zwei Leerzeichen) für die neue Zeile beibehalten.

Sobald Sie Ihre Variablen geändert haben, speichern und schließen Sie die Datei.

Erstellen Sie den Discourse-Container neu

Schließlich müssen Sie Ihren Discourse Docker-Container neu erstellen, damit die Änderungen wirksam werden. Dies können Sie mit dem folgenden Befehl tun:

./launcher rebuild app

Alternativ können Sie Umgebungsvariablen für einen laufenden Container aktualisieren, ohne ihn neu zu erstellen, indem Sie auch Folgendes verwenden:

./launcher destroy app
./launcher start app

Nach Abschluss des Neuerstellungsprozesses sind Ihre aktualisierten Umgebungsvariablen für Ihre Discourse-Anwendung verfügbar! :tada:

4 „Gefällt mir“

Dies wäre viel nützlicher, wenn erklärt würde, wie Umgebungsvariablen verwendet werden können, um Systemeinstellungen oder globale Einstellungen in der Standarddatei für globale Variablen zu überschreiben (und von der UX aus zu übergeben) (und dorthin verlinkt, damit die Leute diese Einstellungen sehen können, wie z. B. obskure Redis-Einstellungen)

Dies ist ein verwirrendes Beispiel, da es nichts mit Discourse zu tun hat.
Sie könnten erwähnen, dass es dasselbe ist, wie die entsprechende Anweisung wie die Einstellung in Docker zu verwenden, vielleicht.
Ich sehe, dass Sie dies gemacht haben, weil Sie Setup Cross-Origin Resource Sharing (CORS) gemacht haben, also verwenden Sie das vielleicht als Beispiel.

7 „Gefällt mir“

Gibt es eine Stelle, an der man alle möglichen Umgebungsvariablen finden kann, die in Discourse verwendet werden?

Das wäre viel nützlicher gewesen als ein Thema, das besagt, dass die Umgebungsvariablen in der app.yml unter der Sektion env: stehen :laughing:

Außerdem bin ich mir ziemlich sicher, dass man die Anwendung nur neu starten muss, damit sie die geänderten Umgebungsvariablen “lädt”, und nicht neu bauen muss, aber bitte korrigiert mich, wenn ich falsch liege.

Sie können den Container zerstören und starten; das wurde, glaube ich, zum OP hinzugefügt. Das einzige Problem ist, wenn Sie Upgrades von der UX durchgeführt haben, gehen diese verloren.

Sie können jede Website-Einstellung mit DISCOURSE_SETTING_NAME festlegen. Sehen Sie sich auch die Standardeinstellungen unter config an. discourse/config/discourse_defaults.conf at main · discourse/discourse · GitHub

4 „Gefällt mir“

Hallo @SaraDev, darf ich erfahren, wie diese Umgebungsvariablen das Verhalten von Discourse verändern? Zum Beispiel kann ich keine der Variablen, die in diesem Beitrag Available settings for global rate limits and throttling erwähnt werden, im Discourse-Quellcode finden. Wie sind diese Variablen also mit Discourse verknüpft? Danke!

Ich glaube, Sie können sie hier sehen:

3 „Gefällt mir“

Vielen Dank, @Arkshine.

1 „Gefällt mir“

Gibt es eine Möglichkeit, Umgebungsvariablen in einer nicht Docker-gehosteten Entwicklungsumgebung festzulegen? Ich plane, schließlich mit Docker zu hosten, entwickle aber lokal mit diesem Setup: Install Discourse on macOS for development
In diesem Fall gibt es keine app.yml

Sie können sie in der Befehlszeile festlegen, bevor Sie Rails starten, aber was möchten Sie mit diesen ENV-Variablen tun?

Ich versuche, DISCOURSE_ENABLE_CORS auf true für SSO zu setzen. Könnten Sie mir bitte ein Beispielkommando senden? Ich bin neu in der Discourse / Rails-Entwicklung. Was bewirkt das letztendlich? Erstellt es einen Eintrag in der Tabelle site_settings?

Ich versuche, Discourse automatisch innerhalb von Kubernetes einzurichten. Daher plane ich, ein benutzerdefiniertes Docker-Image (DinD) zu erstellen.
ABER wenn ich ./discourse-setup.sh in meinem Dockerfile ausführen würde, würde es mich nach Konfigurationsoptionen fragen – die Docker nicht beantworten kann (da dies automatisch geschehen sollte).

Ich verstehe, dass ich diese Umgebungsvariablen in die Datei app.yml einfügen könnte, aber zu diesem Zeitpunkt wird es überhaupt keine app.yaml-Datei geben, da das Skript ./discourse-setup noch nicht ausgeführt wurde.

Meine Frage wäre also: Wie kann ich Discourse für meine Zwecke vorkonfigurieren, damit ./discourse-setup keine Benutzereingaben erfordert?

Die Installationsanleitung discourse/docs/INSTALL-cloud.md at main · discourse/discourse (github.com) sagt überhaupt nichts über Vorkonfigurationen oder Konfigurationsdateien aus.

Vielen Dank im Voraus!

2 „Gefällt mir“

Versuchen Sie\n\n./launcher start-cmd app\n\n\nDas gibt Ihnen den Docker-Startbefehl, der zum Hochfahren des Containers verwendet wird. Sie sollten damit herausfinden können, wie Sie die Dinge in k8s hochfahren können.

5 „Gefällt mir“

Gibt es andere übliche Orte, an denen die Datei app.yml liegen könnte, oder ist es möglich, dass diese Datei von Grund auf neu erstellt werden muss? Ich bin in meinen Docker-Container eingestiegen (docker exec -it discourse_dev /bin/bash) und konnte keine Datei namens app.yml finden.

Die Datei app.yml sollte sich außerhalb Ihres Containers befinden und nicht darin.

2 „Gefällt mir“