🇨🇳 Detaillierte Installationsanleitung + Steuerungs-Panel | Super ausführliche Anleitung für die Installation von discourse + Steuerungs-Panel

Ich bin ein Anfänger im Webdesign und möchte aus Interesse eine technische Austausch-Community aufbauen. Ich bere plan, eine Discourse-Instanz einzurichten und diese Anleitung zu teilen. Ich hoffe, dass sie für Freunde, die Discourse installieren müssen, hilfreich ist und sie vor Fehlern bewahrt. Es gibt relativ wenige chinesische Tutorials für Discourse, und einige sind bereits veraltet. Ich habe mehrere Tage damit verbracht, sie mit Hilfe von Übersetzungssoftware zu studieren.

Was Sie für den Aufbau Ihrer eigenen Discourse-Instanz benötigen:

Eine Alibaba Cloud Lightweight Cloud-Server-Instanz in Hongkong. Das Herunterladen von GitHub-Plugins auf chinesischen Servern ist extrem langsam, daher empfehle ich die Verwendung einer Alibaba Cloud Lightweight-Instanz in Hongkong oder einer anderen leichtgewichtigen Serverlösung. Lightweight-Server sind günstiger und für Anfänger geeignet. Die Konfiguration muss einen Arbeitsspeicher von mehr als 2 GB haben, sonst ist die Installation nicht möglich. Wenn Sie auf einem chinesischen Server installieren möchten, können Sie eine Hongkong-Instanz mit nutzungsbasierter Abrechnung verwenden und dann ein Image erstellen und es auf den chinesischen Server klonen, um Zeit beim Debugging zu sparen.

Ein kurzer, leicht zu merkender Domainname, der auf die Server-IP aufgelöst wird. Ich empfehle .com und .net. Andere Domains mangelt es an Wiedererkennungswert. Sie können Domainnamen unter Massen-Domainabfrage suchen und nach kurzen Namen mit Regeln suchen.

System: Ubuntu 20.04, da es weit verbreitet ist.

Nachdem Sie einen neuen Server aktiviert haben, öffnen Sie zuerst alle Firewall-Ports (nachdem Sie das Debugging abgeschlossen haben, schließen Sie die Ports nach Bedarf und behalten Sie nur die verwendeten Ports, um Hackerangriffe zu vermeiden). Stellen Sie das Root-Passwort im Control Panel ein und verbinden Sie sich dann direkt über SSH über den Webbrowser mit dem Server oder laden Sie eine SSH-Software wie XTerminal herunter.

Fügen Sie dann die folgenden drei Befehle ein und drücken Sie Enter, um sie auszuführen. Wenn Optionen angezeigt werden, drücken Sie “yes”, um die Systemquellen zu aktualisieren und die Git-Software zu installieren.

apt update
apt upgrade -y
apt install git

Fügen Sie dann die folgenden drei Befehle ein und drücken Sie Enter, um sie als Administrator auszuführen. Dieser Schritt sudo -s kann bei unachtsamer Bedienung zu Fehlermeldungen bei der Erstellung von Verzeichnissen während der Installation führen, was zu einem Installationsfehler führt, da die Berechtigungen fehlen.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

Nach dem Herunterladen führen Sie das Installationsprogramm aus.

./discourse-setup

Geben Sie dann die zu bindende Domain gemäß den Hinweisen ein. Die erste Installation dauert lange. Es wird empfohlen, für die erste Installation alle Domains außer der Hauptdomain beliebig einzugeben und sie später neu zu erstellen, wenn die Installation erfolgreich war. Sie können Screenshots machen und die WeChat-Bildübersetzungsfunktion verwenden, wenn Sie etwas nicht verstehen. Für E-Mails können Sie den Alibaba Cloud Mail Service verwenden.

Dann wird eine Aufforderung angezeigt, ob Sie die Installation fortsetzen oder mit Strg+C abbrechen möchten. Es wird empfohlen, die Installation fortzusetzen.

Nach Abschluss der Installation und dem Aufrufen der gebundenen Domain erscheint die Registrierungsseite, was bedeutet, dass Discourse erfolgreich installiert wurde.

Installieren Sie dann ein Linux-Panel. Dieser Schritt dient hauptsächlich der Installation anderer Website-Programme und der einfachen Verwaltung für Anfänger. Im Vergleich dazu ist dieses Panel viel einfacher als Baota, hat weniger Werbung und die Installation dauert nur wenige Sekunden, anstatt wie bei Baota lange Kompilierungszeiten für die Umgebung zu benötigen.

Führen Sie das folgende Skript aus:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

Während der Installation wird eine Meldung angezeigt, dass Docker bereits installiert ist, und dann wird die Anmeldung im Backend angezeigt.

Folgen Sie den Anweisungen, finden Sie das Backend und melden Sie sich an. In der Containerverwaltung sehen Sie die App, das ist Discourse, die Sie hier starten oder stoppen können.

Wechseln Sie dann in die Dateien und bearbeiten Sie app.yml. Die wichtigsten zu ändernden Stellen sind mit chinesischen Kommentaren versehen.

## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Uncomment the next line to enable the IPv6 listener
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Set db_shared_buffers to a max of 25% of the total memory.
  ## will be set automatically by bootstrap based on detected RAM, or you can override
  db_shared_buffers: "128MB"
  ## Ändern Sie die maximale Upload-Größe für Anhänge
  upload_size: 300m
  ## can improve sorting performance, but adds memory usage per-connection
  #db_work_mem: "40MB"

  ## Which Git revision should this container use? (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: zh_CN

  ## How many concurrent web requests are supported? Depends on memory and CPU cores.
  ## will be set automatically by bootstrap based on detected CPUs, or you can override
  UNICORN_WORKERS: 2

  ## TODO: The domain name this Discourse instance will respond to
  ## Required. Discourse will not work with a bare IP number.
  ## Ändern Sie die Hauptdomain
  DISCOURSE_HOSTNAME: bbs.izdh.net

  ## Uncomment if you want the container to be started with the same
  ## hostname (-h option) as specified above (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: List of comma delimited emails that will be made admin and developer
  ## on initial signup example 'user1@example.com,user2@example.com'
  ## Ändern Sie die Admin-E-Mail
  DISCOURSE_DEVELOPER_EMAILS: 'xxxx@gmail.com'

  ## TODO: The SMTP mail server used to validate new accounts and send notifications
  # SMTP ADDRESS, username, and password are required
  # WARNING the char '#' in SMTP password can cause problems!
  ## Ändern Sie den SMTP-Mailserver
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## Ändern Sie den SMTP-Port
  DISCOURSE_SMTP_PORT: 80
  ## Ändern Sie den Absender-E-Mail-Konto
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## Ändern Sie das Passwort für den Absender-E-Mail-Server
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## Ändern Sie den Absender-E-Mail-Konto
  DISCOURSE_NOTIFICATION_EMAIL: xxxx@xxx.net
  DISCOURSE_SMTP_ENABLE_START_TLS: false
  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## The http or https CDN address for this Discourse instance (configured to pull)
  ## see https://meta.discourse.org/t/14857 for details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## The maxmind geolocation IP address key for IP address lookup
  ## see https://meta.discourse.org/t/-/137387/23 for details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
## Install 2 plugins
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved	 
          - git clone https://github.com/discourse/discourse-reactions

## Any custom commands to run after building
run:
  - exec: echo "Beginning of custom commands"
  ## If you want to set the 'From' email address for your first registration, uncomment and change:
  ## After getting the first signup email, re-comment the line. It only needs to run once.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

Nachdem Sie die Änderungen gespeichert haben, kehren Sie zum Terminal zurück, verwenden Sie den Befehl oder stoppen Sie den Container im Backend und bauen Sie ihn dann neu. Es scheint jedoch, dass ohne die Installation dieses Panels der Container nicht gestoppt werden muss. Wenn Sie ihn nach der Installation des Panels nicht stoppen und neu erstellen, wird ein Fehler angezeigt.

./launcher stop app
./launcher bootstrap app

Warten Sie, bis der Neuaufbau abgeschlossen ist, und führen Sie den Befehl zum Starten des Containers aus.

./launcher start app

Wenn Sie Discourse aufrufen, werden Sie aufgefordert, eine E-Mail zur Aktivierung zu senden. Wenn Sie keine erhalten, können Sie den folgenden Befehl verwenden, um einen Administrator-Account zu erstellen und ihn zu überspringen. Stellen Sie dann die Sprache in den Einstellungen auf Chinesisch ein. Es gibt auch eine Stelle, an der Sie E-Mail-Tests durchführen können. Dort wird der Grund für den Fehler angezeigt. Versuchen Sie es mehrmals, bis es erfolgreich ist.

./launcher enter app
rake admin:create

Wenn Sie andere Websites erstellen müssen, beziehen Sie sich bitte auf die offizielle Anleitung. Da dies recht einfach ist, werde ich nicht weiter darauf eingehen. Sie können auch eine neue Umgebung auf der Website erstellen, die Website-Berechtigungen auf 777 ändern und dann verschiedene Programme installieren.

Das Hauptproblem, das gelöst werden soll, ist, dass mehrere Websites auf einem Server laufen können, was die Kosten für den Kauf von Servern spart und für Anfänger besser geeignet ist.

Ein Problem, das beim Testen des E-Mail-Versands später auftrat:

Diese Einstellungen im Container, die Bearbeitung in app.yml, scheinen keinen Einfluss auf den Neuaufbau zu haben. Sie müssen in den Container-Umgebungsvariablen geändert werden. Dies dauert jedoch nur 5-6 Sekunden, um wirksam zu werden. Ob dies Auswirkungen auf die Plugin-Installation hat, ist noch unklar.

Das Zusammenleben mit anderen Websites scheint darin zu bestehen, zuerst einen Reverse-Proxy zu erstellen, dann den Standard-Container-Port 443 in einen 10443 zu ändern und dann das Zertifikat zu konfigurieren, um normal darauf zugreifen zu können.

Reverse-Proxy

Zertifikat konfigurieren

2 „Gefällt mir“

Eigentlich kann discourse_docker in jedes beliebige Verzeichnis geklont werden, es wird automatisch nach /var/discourse installiert…

In Wahrheit ist der Speicherort, an den man das discourse_docker-Repository klont, unerheblich, da es immer automatisch in das Verzeichnis /var/discourse installiert wird…

Theoretisch ist das eher unwahrscheinlich. Das ordnungsgemäße Vorgehen ist, die Datei app.yml zu bearbeiten und anschließend die Anwendung neu zu erstellen.

1 „Gefällt mir“

:sweat_smile: Aber die Bearbeitung der Konfigurationsdatei erwies sich als fruchtlos, da der Rebuild keine Wirkung zeigte. Das Ändern der Umgebungsvariablen des Containers funktionierte jedoch wie ein Zauber in Sekundenschnelle und ersparte mir die Mühe des Rebuilds. Die Auswirkungen auf Plugins bleiben vorerst ungewiss.

Zuvor hatte ich versäumt, ‘sudo -s’ einzugeben, was zu einer Flut von Fehlermeldungen führte. Ich war völlig ratlos, was die Ursache des Problems war.

Sagen Sie mal, alter Knabe, wissen Sie vielleicht, wie ein chinesischer Benutzername die API nutzen könnte? Der Header darf nämlich keine chinesischen Zeichen enthalten.

Ach, gibt es dieses Problem? Bitte poste die Protokolle.

Oh, ich sage, ist das wirklich das Problem? Vielleicht könnten Sie mir die Protokolleinträge mitteilen.

Der Ausländer sagte, es sei möglich, aber egal wie ich es versuchte, es funktionierte einfach nicht… :sweat_smile:

Wenn möglich, könnten wir es damit versuchen. Wer weiß schon, welche Kodierung Ihre Anfrage verwendet hat.

Wenn möglich, könnten wir es damit versuchen. Wer weiß schon, welche Kodierung Ihre Anfrage verwendet hat.

1 „Gefällt mir“

Es ist erstaunlich, auf einen chinesischen Beitrag in diesem Forum zu stoßen! :sob:

Könnte ich den Threadersteller fragen, ob er bereit wäre, seine Erfahrungen in der Forenentwicklung zu teilen? Ihre Einblicke wären sehr willkommen.

1 „Gefällt mir“

:sweat_smile: Ich bin auch ein Anfänger und denke, dass der Inhalt im Vordergrund stehen sollte, die Technik eher unterstützend. Derzeit bin ich ziemlich ratlos, wie ich Qiniu Cloud für die Inhaltsspeicherung nutzen kann, und ich bin mir auch nicht sicher, wie ich Traffic auf meine Plattform lenken kann.

Später wurde ein Fehler entdeckt. Die Einstellung ‘upload_size: 300m’ war unwirksam bei der Größenbeschränkung von Anhängen. Die Ursache blieb unklar, daher sah ich mich gezwungen, die Installation des Control Panels ganz abzubrechen.

Ich nutze Amazon S3 für meine Speicheranforderungen.

Es ist jedoch erwähnenswert, dass Alibaba OSS jetzt mit S3 kompatibel ist. Sie könnten erwägen, es auszuprobieren.

In der Tat, sobald die Infrastruktur steht, konzentriert man sich darauf, sie mit Inhalten zu füllen.

Man sollte es wohl nach seiner vorgeschlagenen Methode ändern.

Ich erinnere mich, als ich damals Änderungen vorgenommen habe, habe ich auch Parameter angepasst und refaktorisiert. Ich habe Tencent Cloud benutzt und jedes Refactoring erforderte eine Proxy-Verbindung. Es war eine absolute Qual, das zu regeln.

@Lhc_fl @zengyunsi Gibt es eine Möglichkeit, den Benutzernamen-Feld des Forums zu schützen? Die benutzerdefinierten Einstellungen enthalten nur die Filterung von sensiblen Wörtern und erlaubte Benutzerfelder.

Unterstützung für chinesische Unicode-Benutzernamen: Discourse 支持中文用户名 - Discourse - iSharkFly

Unterstützung für chinesische Unicode-Benutzernamen: Discourse unterstützt chinesische Benutzernamen - Discourse - iSharkFly

Aber dennoch, was versteht man unter dem Schutz des Benutzernamensfeldes, und müssen Änderungen am Benutzernamen einer Überprüfung unterzogen werden?

Wenn es sich um Ersteres handelt, verfügt Discourse über keine native Funktion dafür. Es wird empfohlen, über die Entwicklung eines Plugins nachzudenken.

Alternativ können Sie regelmäßig die Benutzernamen der gesamten Website überprüfen, um festzustellen, ob es Probleme gibt.

@go_ahead Außerdem empfehle ich, Ihre Frage auf Englisch oder einer Mischung aus Englisch und Chinesisch in einem separaten Beitrag zu stellen. Dies liegt daran, dass OT im Meta-Bereich aufgeteilt wird.

Die Verwendung von Chinesisch wird auch einige Administratoren, die kein Chinesisch sprechen, in Verlegenheit bringen, da sie nicht leicht verstehen können, worüber wir sprechen.

Obwohl ich Ihre Anfrage verstehe, möchte ich Ihnen das Konzept des Schutzes des Benutzernamensfeldes und die Notwendigkeit, dass Änderungen am Benutzernamen einem Überprüfungsprozess unterzogen werden, erläutern.

Wenn dies tatsächlich der Fall ist, fehlt Discourse eine solche native Funktionalität. Ich würde vorschlagen, die Entwicklung eines maßgeschneiderten Plugins in Betracht zu ziehen, um diese Anforderung zu erfüllen.

Alternativ könnten Sie in Erwägung ziehen, alle Benutzernamen auf der gesamten Plattform regelmäßig zu überprüfen, um potenzielle Probleme zu identifizieren.

@go_ahead Darüber hinaus empfehle ich, Ihre Frage auf Englisch oder einer Kombination aus Englisch und Chinesisch in einem separaten Thread zu stellen. Dieser Ansatz ist vorzuziehen, da themenfremde Diskussionen im Meta-Bereich in der Regel einer Trennung der Threads unterliegen.

Die ausschließliche Verwendung von Chinesisch kann für unsere nicht-chinesischsprachigen Moderatoren eine Herausforderung darstellen, da sie Schwierigkeiten haben könnten, den Diskussionsgegenstand zu verstehen.

Ich glaube, ich habe diese Funktion gefunden, das ist sie.

1 „Gefällt mir“

Leider sind meine Englischkenntnisse äußerst mangelhaft und mir fehlt es an Erfahrung in der Kommunikation mit ihnen. Ich werde darauf achten, diese Angelegenheit in Zukunft zu berücksichtigen. Ich bin Ihnen für Ihre Anleitung sehr dankbar!

Nach meinem Verständnis kategorisieren Moderatoren Themen mit chinesischem Inhalt normalerweise unter dem Tag chinese-translation.

Im Allgemeinen ist das Problem nicht sehr groß, und man könnte auch unter seinem Beitrag einen englischen Hinweis geben.

Eigentlich ist es in Ordnung, Moderatoren können Übersetzungsprogramme verwenden, um das Wesentliche zu übersetzen. Das Problem ist nicht von großer Bedeutung.

1 „Gefällt mir“

🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 Dieser Inhalt sollte noch verwendbar sein.

Wir verwenden jedoch reine Server und beginnen mit Docker-Containern. Möglicherweise haben wir die Konsolenkonfigurationen nicht verwendet.

Der im chinesischen Text erwähnte offizielle Installationsleitfaden für Discourse ist wahrscheinlich noch anwendbar. Es ist jedoch erwähnenswert, dass unsere Implementierung Bare-Metal-Server verwendet, beginnend mit Docker-Containern. Daher haben wir möglicherweise nicht die im Leitfaden erwähnten konsolenbezogenen Konfigurationen verwendet.

Dieser Ansatz, der auf reinen Servern mit Docker-Containern beginnt, weicht potenziell vom Standardinstallationsprozess ab, insbesondere in Bezug auf die Konsolen-Einrichtung und -Verwaltung. Es ist wichtig, diesen Unterschied bei der Befolgung des offiziellen Leitfadens zu beachten, da bestimmte Schritte möglicherweise angepasst oder weggelassen werden müssen, um unserer spezifischen Bereitstellungsmethode zu entsprechen.

:sweat_smile: Es wird von der API gesprochen, es ist nicht möglich, sie auf Chinesisch aufzurufen

:sweat_smile: Ich fürchte, die API unterstützt keine chinesische Eingabe.

Es scheint, dass das Problem bei diesem speziellen Panel liegen könnte… Vielleicht ist es am besten, zur ursprünglichen Methode zurückzukehren und eine Neuinstallation durchzuführen. Ich neige dazu, Qiniu Cloud dafür zu nutzen.