Nicht meine erste Discourse-Installation, aber ich bin nach drei Versuchen einer Standardinstallation auf einem Digital Ocean Droplet (1 GB NVMe SSD Premium AMD) mit Ubuntu 22.04 LTS gescheitert. Ich habe mich durch die Anleitung gearbeitet und eine E-Mail-Adresse für LetsEncrypt angegeben, wie ich das schon oft zuvor gemacht habe. Nachdem die Discourse-Installation weder über den A-Eintrag noch über die direkte IP des Droplets im Browser angezeigt wurde, habe ich bestätigt, dass die Installation Verbindungen auf den Ports HTTP und HTTPS ablehnt, und seitdem nur noch mit dem Kopf gegen die Wand gelaufen.
Das Einzige, was mir während der Installation aufgefallen ist, war, dass Docker auf dem Digital Ocean Droplet nicht standardmäßig installiert war und ich aufgefordert wurde, es zu installieren, nachdem das Git-Clone des Discourse-Containers dies erforderlich gemacht hatte. Ansonsten habe ich wie gewohnt vorgegangen und sowohl Docker als auch die Discourse-Installation getestet.
Gute Nachricht – Discourse führt den E-Mail-Zustellungstest erfolgreich durch, was darauf hindeutet, dass die Installation vorhanden und ausgeführt wird, und Docker scheint einwandfrei zu funktionieren (nachdem ich „docker run -it --rm hello-world“ ausgeführt habe). Ich habe auch github.com gepingt und erhalte Antworten, sodass es sich nicht um ein Firewall- oder Verbindungsproblem zu handeln scheint.
Problem: Verbindungen werden abgelehnt
Allerdings gibt „curl -v localhost:8080“ Folgendes zurück:
* Trying 127.0.0.1:8080...
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Trying ::1:8080...
* connect to ::1 port 8080 failed: Connection refused
* Failed to connect to localhost port 8080 after 1 ms: Connection refused
* Closing connection 0
„curl -v localhost“ gibt Folgendes zurück:
* Trying 127.0.0.1:80...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.81.0
> Accept: */*
>
* Empty reply from server
* Closing connection 0
curl: (52) Empty reply from server
Hier ist meine app.yml und die Ergebnisse von discourse-doctor:
app.yml
## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
## Wird automatisch durch Bootstrap basierend auf erkannten CPUs festgelegt, oder Sie können es überschreiben
UNICORN_WORKERS: 2
## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
DISCOURSE_HOSTNAME: community.example.io
## Kommentieren 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 Kommas getrennten E-Mail-Adressen, die bei der ersten Anmeldung als Admin und Entwickler festgelegt werden
## Beispiel: „user1@example.com,user2@example.com“
DISCOURSE_DEVELOPER_EMAILS: 'example@example.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: no-reply@example.io
DISCOURSE_SMTP_PASSWORD: „XXXXXX“
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard: true)
DISCOURSE_SMTP_DOMAIN: community.example.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@community.example.io
## Wenn Sie die Lets-Encrypt-Vorlage hinzugefügt haben, kommentieren Sie unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: example@example.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 MaxMind-Geolokalisierungs-IP-Schlüssel für die IP-Adresssuche
## Siehe https://meta.discourse.org/t/-/137387/23 für Details
DISCOURSE_MAXMIND_LICENSE_KEY: XXXXX
## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
DISCOURSE_HOSTNAME: community.example.io
## Kommentieren 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 Kommas getrennten E-Mail-Adressen, die bei der ersten Anmeldung als Admin und Entwickler festgelegt werden
## Beispiel: „user1@example.com,user2@example.com“
DISCOURSE_DEVELOPER_EMAILS: 'example@example.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: no-reply@example.io
DISCOURSE_SMTP_PASSWORD: „XXXXXXXX“
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard: true)
DISCOURSE_SMTP_DOMAIN: community.example.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@community.example.io
## Wenn Sie die Lets-Encrypt-Vorlage hinzugefügt haben, kommentieren Sie unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: example@example.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 MaxMind-Geolokalisierungs-IP-Schlüssel für die IP-Adresssuche
## Siehe https://meta.discourse.org/t/-/137387/23 für Details
DISCOURSE_MAXMIND_LICENSE_KEY: XXXXXX
## 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
discourse-doctor-Ergebnisse
Found containers/app.yml
==================== YML-EINSTELLUNGEN ====================
DISCOURSE_HOSTNAME=community.example.io
SMTP_ADDRESS=smtp.mailgun.org
DEVELOPER_EMAILS=example@example.com
SMTP_PASSWORD=XXXXXXXX
SMTP_PORT=587
SMTP_USER_NAME=no-reply@example.io
LETSENCRYPT_ACCOUNT_EMAIL=example@example.com
==================== DOCKER-INFO ====================
DOCKER VERSION: Docker version 20.10.21, build baeda1f
DOCKER-PROZESSE (docker ps -a)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1d88ff15b5b local_discourse/app „/sbin/boot“ 18 minutes ago Up 18 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
e1d88ff15b5b local_discourse/app „/sbin/boot“ 18 minutes ago Up 18 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
Discourse-Container app läuft
==================== PLUGINS ====================
- git clone https://github.com/discourse/docker_manager.git
Keine nicht-offiziellen Plugins erkannt.
Siehe https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb für die offizielle Liste.
========================================
Discourse-Version auf community.example.io: NICHT GEFUNDEN
Discourse-Version auf localhost: NICHT GEFUNDEN
==================== SPEICHERINFORMATION ====================
RAM (MB): 1016
total used free shared buff/cache available
Mem: 969 687 61 21 220 110
Swap: 2047 241 1806
==================== FESTPLATTENPLATZ-PRÜFUNG ====================
---------- OS-Festplattenspeicher ----------
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 8.2G 16G 34% /
==================== FESTPLATTENINFORMATION ====================
Disk /dev/loop0: 63.22 MiB, 66293760 bytes, 129480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop1: 102.98 MiB, 107986944 bytes, 210912 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop2: 47.98 MiB, 50315264 bytes, 98272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/vda: 25 GiB, 26843545600 bytes, 52428800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 728BDF97-580D-4B6F-9462-7E2540D5378B
Device Start End Sectors Size Type
/dev/vda1 227328 52428766 52201439 24.9G Linux filesystem
/dev/vda14 2048 10239 8192 4M BIOS boot
/dev/vda15 10240 227327 217088 106M EFI System
Partitionstabelleneinträge sind nicht in der richtigen Reihenfolge.
Disk /dev/vdb: 466 KiB, 477184 bytes, 932 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
==================== ENDE FESTPLATTENINFORMATION ====================
==================== MAIL-TEST ====================
Für einen robusten Test holen Sie sich eine Adresse von http://www.mail-tester.com/
Oder senden Sie einfach eine Testnachricht an sich selbst.
E-Mail-Adresse für Mail-Test? („n“ zum Überspringen) [example@example.com ]:
Senden von Mail an example@example.com . . .
Testen des Sendens an example@example.com mit smtp.mailgun.org:587, Benutzername: no-reply@example.io mit Plain-Auth.
SMTP-Server-Verbindung erfolgreich.
Senden an example@example.com. . .
Mail vom SMTP-Server akzeptiert.
Message-ID: e3455d15-eb48-48bf-9859-a30f1acc765c@community.example.io
Wenn Sie die Nachricht nicht erhalten, überprüfen Sie Ihren SPAM-Ordner
oder testen Sie erneut mit einem Dienst wie http://www.mail-tester.com/.
Wenn die Nachricht nicht zugestellt wird, liegt das Problem nicht bei Discourse.
Überprüfen Sie die SMTP-Server-Protokolle für die oben genannte Message-ID, um den Grund für das Zustellungsversagen zu ermitteln.
Ersetzen: SMTP_PASSWORD
Ersetzen: LETSENCRYPT_ACCOUNT_EMAIL
Ersetzen: DEVELOPER_EMAILS
Ersetzen: DISCOURSE_DB_PASSWORD
Ersetzen: Senden von Mail an
==================== FERTIG! ====================
Ich habe auch „./launcher enter app“ im Discourse-Verzeichnis ausgeführt + den Befehl „top“, um zu überprüfen, ob nginx, redis, postmaster und ruby alle laufen. Ich sehe nginx nicht in der Liste…
launcher enter app --> top-Ergebnisse
Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.3 us, 2.3 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st
MiB Mem : 969.4 total, 72.4 free, 659.0 used, 238.0 buff/cache
MiB Swap: 2048.0 total, 1667.2 free, 380.8 used. 141.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4528 discour+ 25 5 951480 289404 3096 S 0.3 29.2 4:21.14 ruby
1 root 20 0 6772 0 0 S 0.0 0.0 0:00.02 boot
4428 root 20 0 2340 24 0 S 0.0 0.0 0:01.14 runsvdir
4429 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4430 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4431 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4432 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4433 root 20 0 2188 280 256 S 0.0 0.0 1:28.21 runsv
4434 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4435 root 20 0 2336 0 0 S 0.0 0.0 0:00.05 svlogd
4436 redis 20 0 58072 2900 1624 S 0.0 0.3 3:17.52 redis-server
4438 root 20 0 2336 0 0 S 0.0 0.0 0:00.00 svlogd
4439 discour+ 20 0 15256 1128 912 S 0.0 0.1 0:25.85 unicorn_launche
4441 root 20 0 6620 488 384 S 0.0 0.0 0:00.21 cron
4442 postgres 20 0 213172 5220 4776 S 0.0 0.5 0:02.75 postmaster
4445 root 20 0 151068 132 0 S 0.0 0.0 0:00.06 rsyslogd
4458 postgres 20 0 213392 10404 9896 S 0.0 1.0 0:00.78 postmaster
4459 postgres 20 0 213172 5004 4604 S 0.0 0.5 0:01.50 postmaster
4460 postgres 20 0 213172 4956 4588 S 0.0 0.5 0:27.50 postmaster
4461 postgres 20 0 213840 2264 1652 S 0.0 0.2 0:01.98 postmaster
4462 postgres 20 0 68200 788 0 S 0.0 0.1 0:05.01 postmaster
4463 postgres 20 0 213724 1164 700 S 0.0 0.1 0:00.05 postmaster
4464 discour+ 20 0 457692 171868 1364 S 0.0 17.3 0:22.71 ruby
4503 postgres 20 0 220116 11116 10812 S 0.0 1.1 0:01.51 postmaster
4538 discour+ 20 0 768724 169816 1032 S 0.0 17.1 0:08.27 ruby
4549 discour+ 20 0 768724 169948 1220 S 0.0 17.1 0:08.55 ruby
4580 postgres 20 0 219408 10580 10460 S 0.0 1.1 0:00.13 postmaster
134464 postgres 20 0 217332 21388 17444 S 0.0 2.2 0:00.24 postmaster
137350 root 20 0 7036 3468 2972 S 0.0 0.3 0:00.02 bash
137382 root 20 0 10108 3756 3080 R 0.0 0.4 0:00.08 top
137609 discour+ 20 0 13760 2004 1732 S 0.0 0.2 0:00.00 sleep
Ich habe einen Blick in error.log innerhalb von var/discourse/shared/standalone/log/var-log/nginx geworfen:
2022/12/12 07:55:26 [emerg] 5040#5040: cannot load certificate „/shared/ssl/community.example.io.cer“: PEM_read_bio_X509_AUX(>
2022/12/12 07:55:27 [emerg] 5042#5042: cannot load certificate „/shared/ssl/community.example.io.cer“: PEM_read_bio_X509_AUX(>
2022/12/12 07:55:28 [emerg] 5044#5044: cannot load certificate „/shared/ssl/community.example.io.cer“: PEM_read_bio_X509_AUX(>
2022/12/12 07:55:29 [emerg] 5046#5046: cannot load certificate „/shared/ssl/community.example.io.cer“: PEM_read_bio_X509_AUX(>
....
