Ich habe Site 1 erfolgreich installiert und betriebe sie seit über einem Monat. Heute habe ich die Anweisungen hier befolgt: https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247. Ich habe die erste Discourse-Konfiguration bearbeitet, eine externe Nginx-Instanz auf dem Host-System installiert und die erste Discourse-Instanz neu aufgebaut.
app.yml der ersten Site
root@docker-s-1vcpu-2gb-sgp1-01:~# cat /var/bbs-antivte-discourse/containers/app.yml
## Dies ist die All-in-One, eigenständige Discourse Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu aufbauen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEI DER BEARBEITUNG!
## 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"
## Entfernen Sie den Kommentar bei diesen zwei Zeilen, wenn Sie Lets Encrypt (https) hinzufügen möchten
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/web.socketed.template.yml" # <-- Hinzugefügt
## Welche TCP/IP-Ports soll dieser Container freigeben?
## 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 gesamten Arbeitsspeichers.
## Wird automatisch beim Booten basierend auf dem erkannten RAM festgelegt, oder Sie können es überschreiben
db_shared_buffers: "256MB"
## Kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
#db_work_mem: "40MB"
## Welche Git-Revision soll 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 Arbeitsspeicher und den CPU-Kernen ab.
## Wird automatisch beim Booten basierend auf den erkannten CPUs festgelegt, oder Sie können es überschreiben
UNICORN_WORKERS: 4
## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
DISCOURSE_HOSTNAME: bbs.antivte.com
## Kommentar entfernen, wenn der Container mit demselben
## Hostnamen (-h-Option) wie oben angegeben gestartet werden soll (Standard "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Liste der durch Komma getrennten E-Mails, die bei der ersten Anmeldung zu Admin und Entwickler werden
## Beispiel 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'techempower@163.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.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@mail.antivte.com
DISCOURSE_SMTP_PASSWORD: "67c9458eb7a6ff11b4db70f097b1b5c3-f7910792"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard true)
## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, entfernen Sie unten den Kommentar, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: techempower@163.com
## 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/bbs-antivte-discourse/shared/standalone
guest: /shared
- volume:
host: /var/bbs-antivte-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
- git clone https://github.com/discourse/discourse-knowledge-explorer
- git clone https://github.com/discourse/discourse-spoiler-alert.git
- git clone https://github.com/procourse/procourse-static-pages
## Beliebige benutzerdefinierte Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
- exec: echo "Beginn der benutzerdefinierten Befehle"
## Wenn Sie die 'From'-E-Mail-Adresse für Ihre erste Registrierung festlegen möchten, entfernen Sie den Kommentar und ändern Sie:
## Nach Erhalt der ersten Anmelde-E-Mail den Kommentar bei dieser Zeile wieder hinzufügen. Sie muss nur einmal ausgeführt werden.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Ende der benutzerdefinierten Befehle"
Für die Installation der zweiten Site habe ich den Quellcode in ein anderes Verzeichnis geklont, die bearbeitete app.yml der ersten Site kopiert und darin nur die Domain und den Klone-Verzeichnisnamen für meine zweite Site angepasst. Anschließend habe ich https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md ausgeführt.
./discourse-setup
Ich war verwirrt durch die folgenden Hinweise, und ich habe zwei verschiedene Nginx-Konfigurationen für die 2 Sites.
Nginx-Konfiguration der ersten Site
root@docker-s-1vcpu-2gb-sgp1-01:~# cat /var/website/conf/conf.d/ytb.antivte.com
server {
listen 80; listen [::]:80;
server_name ytb.antivte.com; # <-- ändern Sie dies
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name ytb.antivte.com; # <-- ändern Sie dies
# ssl on;
ssl_certificate /var/ytb-antivte-discourse/shared/standalone/ssl/ssl.crt;
ssl_certificate_key /var/ytb-antivte-discourse/shared/standalone/ssl/ssl.key;
ssl_dhparam /var/ytb-antivte-discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # von 3m Standard erhöht
location / {
proxy_pass http://unix:/var/ytb-antivte-discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
Nginx-Konfiguration der zweiten Site
server {
listen 80; listen [::]:80;
server_name bbs.antivte.com; # <-- ändern Sie dies
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name bbs.antivte.com; # <-- ändern Sie dies
# ssl on;
ssl_certificate /var/bbs-antivte-discourse/shared/standalone/ssl/bbs.antivte.com.cer;
ssl_certificate_key /var/bbs-antivte-discourse/shared/standalone/ssl/bbs.antivte.com.key;
ssl_dhparam /var/bbs-antivte-discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # von 3m Standard erhöht
location / {
proxy_pass http://unix:/var/bbs-antivte-discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
und
/var/ytb-antivte-discourse/discourse-setup
Port 80 scheint bereits belegt zu sein.
Dies zeigt Ihnen, welcher Befehl Port 80 verwendet
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 4255 root 6u IPv4 22842780 0t0 TCP *:http (LISTEN)
nginx 4255 root 7u IPv6 22842781 0t0 TCP *:http (LISTEN)
nginx 4256 nobody 6u IPv4 22842780 0t0 TCP *:http (LISTEN)
nginx 4256 nobody 7u IPv6 22842781 0t0 TCP *:http (LISTEN)
Wenn Sie Discourse gleichzeitig mit einem anderen Web
server wie Apache oder Nginx ausführen möchten, müssen Sie an einen anderen Port binden
Siehe https://meta.discourse.org/t/17247
Wenn Sie eine bereits konfigurierte Discourse neu konfigurieren, verwenden Sie
./launcher stop app
um Discourse zu stoppen, bevor Sie es neu konfigurieren und es erneut versuchen.