Discourse lädt nicht mit Apache und Proxy-Weiterleitung

Ich habe die letzten paar Tage damit verbracht, eine Möglichkeit zu finden, Discourse mit Apache auf demselben DigitalOcean-Droplet zu kombinieren. Die hier auf Discourse verfügbaren Tutorials sind entweder veraltet oder für mich nicht anwendbar. Ein Tutorial verwendet CentOS und HAProxy (ich verwende Ubuntu), und das andere verwendet Nginx (ich verwende Apache).

Ich bin auf einen Kommentar in einem DigitalOcean-Thread gestoßen und habe die dortigen Anweisungen auf einem Test-Droplet befolgt: Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean

Alles scheint reibungslos verlaufen zu sein, einschließlich des Let’s Encrypt SSL. Meine Startseite, ein paar statische HTML-Dokumente, funktionieren einwandfrei. Discourse wird trotz fehlerfreier Installation nicht angezeigt. Wenn ich zu community.mysite.com navigiere, sehe ich nur meine Startseite mit einem ungesicherten HTTPS in der URL. Ja, meine DNS-Einstellungen sind korrekt und zeigen auf den richtigen Server.

Dies ist meine mysite.com.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /var/www/mysite.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
    RewriteCond %{SERVER_NAME} =mysite.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Dies ist meine mysite.com-le-ssl.conf:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /var/www/mysite.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>

Dies ist meine community.mysite.com.conf:

<VirtualHost *:80>
  ServerName community.mysite.com
  ServerAlias www.community.mysite.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>

Und schließlich hier meine app.yml (natürlich bearbeitet):

## Dies ist die All-in-One, Standalone Discourse Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu aufbauen
## /var/discourse/launcher rebuild app
##
## SEien Sie *SEHR* vorsichtig beim Bearbeiten!
## YAML-Dateien sind SUPER SUPER empfindlich gegenüber Fehlern in Leerzeichen oder Ausrichtung!
## Besuchen Sie http://www.yamllint.com/, um diese Datei bei Bedarf zu validieren

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Deaktivieren Sie diese beiden Zeilen, wenn Sie Lets Encrypt (https) hinzufügen möchten
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports sollte dieser Container exponieren?
## 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:
      - "8080:80"   # weitergeleiteter Host-Port 8080 zu Container-Port 80 (http)
      - "8443:443"   # weitergeleiteter Host-Port 8443 zu Container-Port 443 (http)

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setzen Sie db_shared_buffers auf maximal 25% des gesamten Speichers.
  ## wird automatisch vom Bootstrap basierend auf dem erkannten RAM festgelegt, oder Sie können es überschreiben
  db_shared_buffers: "128MB"

  ## kann die Sortierleistung verbessern, erhöht aber die Speichernutzung pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision sollte dieser Container verwenden? (Standard: tests-passed)
  #version: tests-passed

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

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

  ## TODO: Der Domainname, auf den diese Discourse-Instanz reagieren wird
  ## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
  DISCOURSE_HOSTNAME: community.mysite.com

  ## Deaktivieren Sie dies, wenn Sie möchten, dass der Container mit demselben
  ## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste der durch Komma getrennten E-Mail-Adressen, die bei der ersten Registrierung zu Admin und Entwickler werden
  ## Beispiel 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'myemail'

  ## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  ## SMTP-Adresse, Benutzername und Passwort sind erforderlich
  ## WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: my-smtp-username
  DISCOURSE_SMTP_PASSWORD: "my-smtp-password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, Standard true)

  ## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, deaktivieren Sie unten, um ein kostenloses SSL-Zertifikat zu erhalten
  LETSENCRYPT_ACCOUNT_EMAIL: myemail

  ## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://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 gehen hier
## 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

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

Kann mir jemand sagen, wo ich einen Fehler gemacht habe oder was ich übersehen habe? Danke!

Du wirst mit nginx als Reverse-Proxy viel bessere Chancen haben.

Wenn dein System es zulässt, verwende nginx statt apache2.

2 „Gefällt mir“

Das Community-Forum leitet also nicht auf deine Domain weiter, sondern zeigt auf deine IP-Adresse. Ist der Symlink in /etc/apache2/sites-enabled/ vorhanden?

Ist das proxy_module geladen?
apache2ctl -M

1 „Gefällt mir“

Kein Symlink.

Ja. Glücklicherweise ist das einer der Schritte im Tutorial, auf das ich verlinkt habe.

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests

Der Schritt

a2ensite community.yoursite.com

war möglicherweise nicht erfolgreich; eventuell ist ein sudo erforderlich.

sudo ln -s /etc/apache2/sites-available/community.yoursite.com.conf /etc/apache2/sites-enabled/

sollte es ebenfalls erledigen.
Dann

sudo apachectl configtest

und die Daumen drücken

sudo systemctl restart apache2

Lieber @OrbitStorm,

ich habe mir kurz deine Apache2-Virtual-Host-Konfiguration sowie deine yml-Datei für Discourse angesehen, und es scheint, als wären sie nicht korrekt konfiguriert.

Hier sind einige Hinweise:

Zunächst einmal: Wenn du Discourse hinter einem Reverse-Proxy betreibst, aktivierst du SSL LETSENCRYPT in der Discourse-yml-Konfiguration nicht (siehe funktionierendes Beispiel unten). Discourse benötigt nur einen einzigen Port zur Kommunikation mit dem Reverse-Proxy, und diese Verbindung ist nicht SSL-verschlüsselt.

Zweitens: Wenn du dir deine Haupt-Virtual-Host-Konfiguration ansiehst, also den Port 443 auf dem Reverse-Proxy:

<IfModule mod_ssl.c>
<VirtualHost *:443>
	ServerAdmin webmaster@localhost
	ServerName mysite.com
	ServerAlias www.mysite.com
	DocumentRoot /var/www/mysite.com
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

       Include /etc/letsencrypt/options-ssl-apache.conf
       SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>

Fehlt in dieser Konfiguration oben die gesamte notwendige Reverse-Proxy-Information (siehe angehängte funktionierende Konfigurationen unten).

Hier ist eine funktionierende Konfiguration für dich, die im Wesentlichen dem entspricht, was in verschiedenen Tutorials auf Meta beschrieben ist (diese Seite ist in anderen Beiträgen gut dokumentiert, daher wiederhole ich hier im Wesentlichen andere Dokumentationen auf Meta):

<VirtualHost *:80>
        ServerName discourse.your-great-web-site.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On
        ErrorLog ${APACHE_LOG_DIR}/discourse_errors.log
        CustomLog ${APACHE_LOG_DIR}/discourse.log combined
        ModPagespeed Off
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =discourse.your-great-web-site.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Beachte, dass in der Port-80-Konfiguration die wichtigsten erforderlichen Direktiven ServerName, RewriteEngine und die Rewrite-Regeln zum Weiterleiten an Port 443 sind.

Außerdem solltest du, wenn du Apache2 mod_pagespeed verwendest, dieses Modul deaktivieren, da ich mod_pagespeed bisher nicht mit Discourse zum Laufen gebracht habe (und auch keinen Grund sehe, dies zu tun).

Hier ist die Hauptkonfiguration, in der die „echte Arbeit“ erledigt wird:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName discourse.your-great-web-site.com
        ServerAdmin webmaster@localhost
        SSLProxyEngine on      # aktiviere dies erst, nachdem Let's Encrypt konfiguriert und funktionsfähig ist
  	    RewriteEngine on
  	    ProxyPreserveHost On
  	    ProxyRequests Off
  	    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
 	    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/           # wir verwenden keinen Port, sondern your-great-web-site-Sockets
        #ProxyPassReverse / http://127.0.0.1:8888/    # wir verwenden keinen Port, sondern your-great-web-site-Sockets
        ProxyPass / your-great-web-site:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / your-great-web-site:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        ErrorLog ${APACHE_LOG_DIR}/discourse_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/discourse_ssl.log combined   #Zugriffslog für den Produktionsbetrieb deaktiviert

        ModPagespeed Off
        SSLCertificateFile /etc/letsencrypt/live/discourse.your-great-web-site.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/discourse.your-great-web-site.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Alle unsere Discourse-Konfigurationen verwenden Unix-Domain-Sockets, daher musst du die Konfiguration entsprechend deinen Anforderungen anpassen.

Der wichtigste Punkt zum Verständnis (zusammengefasst) ist, dass du LETSENCRYPT in deiner Discourse-Build- (yml-)Konfiguration deaktivieren und nur einen einzigen Einstiegspunkt in Discourse freigeben solltest – in unserem Fall einen Unix-Domain-Socket, in deinem Fall einen einzelnen TCP/IP-Socket.

Anschließend leitest du von der Virtual-Host-Datei für Port 443 (nicht von der Virtual-Host-Datei für Port 80) an diesen Einstiegspunkt weiter. Der Virtual-Host für Port 80 leitet lediglich an Port 443 weiter. Dein 443-SSL wird vollständig von LETSENCRYPT im Reverse-Proxy erledigt. In deiner Discourse-yml-Datei ist kein SSL erforderlich (siehe funktionierendes Beispiel unten).

Hier ist eine unserer funktionierenden yml-Dateien (für die obige Konfiguration), die du dir ansehen kannst:

/var/discourse/containers$ cat socket-only.yml
# WICHTIG: Setze ein GEHEIMES PASSWORT in Postgres für den Discourse-Benutzer
# TODO: Ersetze SOME_SECRET in dieser Vorlage

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"
#  - "templates/sshd.template.yml"
## Deaktiviere diese beiden Zeilen, wenn du Lets Encrypt (https) hinzufügen möchtest
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container freigeben?
## Wenn du möchtest, 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

# Verwende den 'links'-Schlüssel, um Container zu verknüpfen, also verwende Docker --link-Flag.
links:
  - link:
      name: data
      alias: data

# Weitere Argumente für Docker?
# docker_args:

params:
  ## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
  #version: latest
  db_shared_buffers: "4GB"

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  # DISCOURSE_DEFAULT_LOCALE: en

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt vom Arbeitsspeicher und den CPU-Kernen ab.
  ## wird automatisch beim Bootstrap basierend auf den erkannten CPUs festgelegt, oder du kannst es überschreiben
  #UNICORN_WORKERS: 3
  UNICORN_WORKERS: 8

  ## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
  DISCOURSE_HOSTNAME: 'discourse.your-great-web-site.com'

  ## Deaktiviere dies, wenn du möchtest, dass der Container mit demselben
  ## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste der durch Komma getrennten E-Mail-Adressen, die bei der ersten Registrierung als Administrator und Entwickler festgelegt werden
  ## Beispiel 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'tim@discourse.your-great-web-site.com'

  ## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  # SMTP-Adresse, Benutzername und Passwort sind erforderlich
  # WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: not_for_reply@discourse.your-great-web-site.com
  DISCOURSE_SMTP_PASSWORD: my_super_secret_cool_password
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, Standard true)

  ## Wenn du die Lets-Encrypt-Vorlage hinzugefügt hast, deaktiviere unten, um ein kostenloses SSL-Zertifikat zu erhalten
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## TODO: Konfigurieren Sie die Konnektivität zu den Datenbanken
  DISCOURSE_DB_SOCKET: ''
  #DISCOURSE_DB_USERNAME: discourse
  DISCOURSE_DB_PASSWORD: another_super_secret_cool_password
  DISCOURSE_DB_HOST: data
  DISCOURSE_REDIS_HOST: data

  DISCOURSE_MAXMIND_LICENSE_KEY: my_max_mind_key
  ## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

volumes:
  - volume:
      host: /var/discourse/shared/socket-only
      guest: /shared
  - volume:
      host: /var/discourse/shared/socket-only/log/var-log
      guest: /var/log

## Plugins gehen hier hinein
## 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
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/discourse/discourse-sitemap.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-whos-online.git
          - git clone https://github.com/unixneo/legacy-info.git

## Denk daran, dies ist YAML-Syntax – du kannst nur einen Block mit einem Namen haben
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"

  ## Wenn du die Passwortanmeldung für root konfigurieren möchtest, deaktiviere und ändere:
  ## Verwende nur eine der folgenden Zeilen:
  #- exec: /usr/sbin/usermod -p 'PASSWORD_HASH' root
  #- exec: /usr/sbin/usermod -p "$(mkpasswd -m sha-256 'RAW_PASSWORD')" root

  ## Wenn du zusätzliche Benutzer autorisieren möchtest, deaktiviere und ändere:
  #- exec: ssh-import-id username
  #- exec: ssh-import-id anotherusername

  - exec: echo "Ende der benutzerdefinierten Befehle"
  #- exec: awk -F\# '{print $1;}' ~/.ssh/authorized_keys | awk 'BEGIN { print "Zugelassene SSH-Schlüssel für diesen Container:"; } NF>=2 {print $NF;}'

Es ist wirklich einfach, sobald man die Grundlagen versteht; und das Verständnis der Grundlagen hilft sehr :slight_smile:

Bitte beachte, dass wir in unseren Discourse-Konfigurationen keinen einzelnen Container betreiben (tatsächlich betreiben wir selten im Einzelcontainer-Modus), daher funktioniert unsere yml-Datei nicht in einer Einzelcontainer- (Standalone-)Konfiguration. Ich stelle sie dir zur Verfügung, um dir zu helfen, indem ich dir zeige, wie eine vollständig funktionierende Konfiguration hinter Apache2 aussieht.

Wir betreiben Discourse sowohl hinter Apache2- als auch hinter nginx-Reverse-Proxys. Tatsächlich verwenden wir aus vielen Gründen ausschließlich Reverse-Proxys. Ein Grund ist, dass wir den Reverse-Proxy nutzen können, um böswillige Bots usw. zu filtern (ein völlig anderes Thema).

Es ist nichts Schwieriges daran, Dockerisiertes Discourse (so viele Sites, wie du möchtest, eine oder 100) hinter einem Reverse-Proxy auf einer Site mit Apache2 zu betreiben; aber es hilft, die grundlegenden Konzepte zu verstehen.

Ich hoffe, dass ich dir sowohl die grundlegenden Konzepte als auch funktionierende Beispielkonfigurationsdateien zur Verfügung stelle, die dir helfen, voranzukommen und Discourse zum Laufen zu bringen.

Mit freundlichen Grüßen…

1 „Gefällt mir“

@neounix Ich schätze diese unglaublich detaillierte Antwort sehr, aber es scheint, dass die meisten Probleme, auf die ich stoße, darauf zurückzuführen sind, dass ich kein geeignetes aktualisiertes Tutorial finden kann. Mehrere Tutorials hier empfehlen, SSL für Discourse in der yml-Datei zu aktivieren, und eines besagt sogar, dass ich keine Proxy-Informationen zu meinen VirtualHost-Dateien hinzufügen muss, da Let’s Encrypt dies automatisch erledigen sollte. Deine Beispiele unterscheiden sich stark von meinen Standardeinstellungen, was sie genauso verwirrend macht wie der Versuch, eine CentOS-Konfiguration mit Ubuntu zu vermischen.

Du hast absolut recht damit, dass das Verständnis der Grundlagen sehr weit hilft, aber das Problem ist, dass die Grundlagen nicht ordentlich abgedeckt werden. Wenn sie es doch sind, stammen sie aus der Zeit vor drei Jahren und berücksichtigen nicht, dass jemand Apache statt Nginx oder Ubuntu statt CentOS verwendet. Es sei auch angemerkt, dass Discourse der einzige Grund ist, warum ich Docker überhaupt verwende.

Nach vier Tagen, die ich nur damit verbracht habe, zu versuchen, die Anwendung neben Apache zu installieren, habe ich die Nase voll. Ob kostenlos oder nicht, das ist die Kopfschmerzen nicht wert, und ich werde nicht weiter Foren durchsuchen, nur um immer wieder kopierte Links zu denselben zwei veralteten und unvollständigen Tutorials zu finden. Ich hatte noch nie eine so frustrierende Erfahrung mit der einfachen Installation von Forumsoftware wie bei Discourse. Das sagt Bände. XenForo und Invision sind zwei Plattformen, mit denen ich über immenser Erfahrung verfüge, und deren Installation und Nutzung sind ein Kinderspiel.

Ich schätze die Mühe, die du in deine Antwort gesteckt hast, wirklich sehr, aber ich werde dich nicht bitten, die Arbeit für mich zu übernehmen, und ich sollte das auch nicht müssen, wenn es eine ordentliche Dokumentation gäbe. Es ist einfach unglaublich für mich, dass meine spezifischen Umstände, die gar nicht so spezifisch für mich sind, in keinem neuen Tutorial hervorgehoben wurden, das diesen Prozess für neue Benutzer erleichtern würde.

Wie auch immer, viel Glück für dich.

3 „Gefällt mir“

Obwohl ich ursprünglich vorhatte, mich von Discourse zu verabschieden, da die aktuelle Dokumentation völlig fehlt und sich hyperfokussiert auf CentOS/Nginx konzentriert, hat eine unglaublich großzügige und geduldige Person bei DigitalOcean auf einen Thread reagiert, den ich dort erstellt hatte. Nach einigen Versuchen und Fehlern half sie mir dabei, eine einfach zu befolgende Anleitung für potenzielle Discourse-Nutzer mit denselben Umständen wie meiner zusammenzustellen.

Als Erinnerung: Diese Umstände sind:

Installation von Discourse auf demselben Server wie Apache | Unter Verwendung von Ubuntu 18.04 | DigitalOcean

Danksagung an Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (erste Antwort)

Voraussetzungen

  • Um auf der sicheren Seite zu sein, stellen Sie sicher, dass Sie Ihr Droplet sichern, damit Sie im Fehlerfall auf eine funktionierende Version zurückkehren können.
  • Verbinden Sie sich per SSH mit Ihrem Droplet.
  • Apache muss installiert sein. Sie können die Schritte zur Installation hier nachlesen:

Schritt 1 – Docker installieren

Folgen Sie für die Installation von Docker den Schritten hier:

Schritt 2 – Discourse herunterladen

Erstellen Sie zunächst ein Verzeichnis, in dem Sie Ihre Discourse-Dateien speichern:

mkdir /var/discourse

Klonen Sie danach das offizielle Discourse-Docker-Image nach /var/discourse:

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Schritt 3 – Discourse so konfigurieren, dass es auf Port 8080 lauscht

Wir verwenden die Vorlage standalone.yml, die alle erforderlichen Dienste wie PostgreSQL, Redis usw. enthält.

Kopieren Sie die Beispiel-Datei mit dem folgenden Befehl:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Bearbeiten Sie danach die Datei mit Ihrem bevorzugten Editor. Öffnen Sie /var/discourse/containers/app.yml und aktualisieren Sie die Ports in den Zeilen 23 und 24:

## Welche TCP/IP-Ports sollen von diesem Container exponiert werden?
expose:
  - "8080:80"   # Host-Port 8080 an Container-Port 80 (HTTP) weiterleiten
  - "8443:443"   # Host-Port 8443 an Container-Port 443 (HTTPS) weiterleiten

Falls Sie noch kein SSL-Zertifikat haben, stellen Sie sicher, dass Sie Zeile 16 auskommentieren:

  #- "templates/web.ssl.template.yml"

Fügen Sie einfach das #-Symbol vor der Zeile - "templates/web.ssl.template.yml hinzu, sonst startet Discourse nicht.

Schritt 4 – Discourse einrichten

Wechseln Sie das Verzeichnis:

cd /var/discourse

Starten Sie dann Discourse (da dies das erste Mal ist, dass Sie den Dienst starten, wird die Anwendung mit den neuen Änderungen in Ihrer app.yml-Datei initialisiert):

./discourse-setup

Hinweis: Stellen Sie sicher, dass gültige E-Mail-Server-Einstellungen angegeben werden, sonst kann die Einrichtung fehlschlagen.

Schritt 5 – Apache einrichten

Erstellen Sie in /etc/apache2/sites-available/ eine neue Datei namens forum.example.com.conf und fügen Sie den folgenden Vhost-Inhalt hinzu:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • Aktivieren Sie den Vhost mit dem folgenden Befehl:
a2ensite forum.example.com
  • Aktivieren Sie Mod Proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Starten Sie Apache neu:
systemctl restart apache2

Danach können Sie direkt über Ihren Domainnamen auf Discourse zugreifen.


Hinweis 1: Bei der Installation von Discourse kann app.yml überschrieben werden, und die Zeilen 16/17 (SSL) werden wieder auskommentiert. Sie müssen diese Zeilen erneut auskommentieren und dann die App neu erstellen (vergessen Sie nicht, das Verzeichnis zu wechseln): ./launcher rebuild app

Hinweis 2: SSL ist mit dieser Anleitung für Discourse nicht aktiviert. Überraschenderweise scheint keine Dokumentation dafür zu existieren, wie man Let’s Encrypt SSL aktiviert, wenn es bereits für Apache aktiviert ist. Falls jemand eine Lösung dafür findet, kontaktieren Sie uns bitte.

4 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.