Keine Verbindung akzeptiert auf http / https nach frischer Installation auf Ubuntu 22.04 LTS

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(>
....

Okay, basierend auf der Datei error.log in var/discourse/shared/standalone/log/var-log/nginx habe ich beschlossen, die SSL-Vorlagen in app.yml zu entfernen:

## Diese beiden Zeilen auskommentieren, wenn Sie Lets Encrypt (https) hinzufügen möchten
##  - "templates/web.ssl.template.yml"
## - "templates/web.letsencrypt.ssl.template.yml"

Dann habe ich ./launcher stop app und ./launcher rebuild app ausgeführt, was nun den Discourse-Build erfolgreich über HTTP ausführt und im Browser “Congratulations, you installed Discourse!” anzeigt.

Ein Schritt nach vorne, aber ich scheine SSL nicht zum Laufen zu bringen. Ich habe meine LE-Zertifikate noch nicht ablaufen lassen, die DNS-Einstellungen sehen gut aus, und dies ist eine frische Installation mit sehr standardmäßigen Server-Spezifikationen.

Irgendwelche Ideen, warum die Installation es mir nicht erlaubt, SSL über Let’sEncrypt zu aktivieren?

Ich vermute, Ihr DNS ist falsch oder war falsch, und Sie haben es oft genug versucht, bis Sie eine Ratenbegrenzung erhalten haben. Die einfachen Lösungen sind, eine Woche zu warten oder einen anderen Subdomainnamen zu wählen.

Da Sie Ihren Hostnamen nicht angeben, können wir nicht wissen, ob das DNS funktioniert.

Danke für die Antwort @pfaffman. http:// funktioniert einwandfrei, aber SSL funktioniert nicht, wenn Let’s Encrypt aktiviert ist. Obwohl ich LE über eine Neuinstallation eingerichtet habe, habe ich das LE-Einrichtungs-Tutorial gelesen und keine Erwähnung von DNS-Änderungen gesehen.

Was genau benötige ich von der DNS-Seite, damit LE/SSL funktioniert?

Hier ist ein Screenshot meiner DNS-Einrichtung:

(DKIM/SPF wurde validiert und Discourse-Mail funktioniert gut, nur zur Info)

Meine Vermutung ist, dass Sie mehrmals versucht haben, eine Adresse von Let’s Encrypt anzufordern, diese aus irgendeinem Grund fehlgeschlagen ist und Sie es nun eine Woche lang nicht erneut versuchen können. Wenn ich richtig liege, warten Sie eine Woche oder verwenden Sie einen anderen Namen.

Es gibt eine Möglichkeit, die Fehlermeldung von ihnen zu erhalten, aber ich kann mich nicht erinnern, wie ich sie auf meinem Handy finden kann.

Verstanden. Nach Ablauf der Sieben-Tage-Frist Anfang nächster Woche werde ich SSL in app.yml wieder aktivieren, neu erstellen und berichten.