Aucune connexion acceptée sur http / https après une nouvelle installation sur Ubuntu 22.04 LTS

Ce n’est pas ma première installation de Discourse, mais je suis resté bloqué après trois tentatives d’installation standard sur un droplet Digital Ocean (1 Go NVMe SSD Premium AMD) sous Ubuntu 22.04 LTS. J’ai suivi le guide et fourni une adresse e-mail pour Let’s Encrypt, comme je l’ai fait à de nombreuses reprises par le passé. Après que l’installation de Discourse n’ait pas affiché dans le navigateur (ni via l’enregistrement A ni via l’adresse IP directe du droplet), j’ai confirmé que l’installation refuse les connexions sur les ports HTTP et HTTPS, et je me suis depuis heurté à un mur.

La seule chose étrange que j’ai remarquée pendant l’installation est que Docker n’était pas installé par défaut sur le droplet Digital Ocean et m’a invité à l’installer après avoir détecté que le clone git du conteneur Discourse le nécessitait. À part cela, j’ai procédé normalement et testé à la fois Docker et l’installation de Discourse.

Bonne nouvelle – Discourse exécute avec succès le test de délivrabilité des e-mails, ce qui implique que l’installation est présente et en cours d’exécution, et Docker semble fonctionner correctement (après avoir exécuté « docker run -it --rm hello-world »). J’ai également fait un ping vers github.com et obtenu des réponses, donc il ne semble pas y avoir de problème de pare-feu ou de connectivité.

Problème : connexions refusées
Cependant, l’exécution de « curl -v localhost:8080 » renvoie :

*   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 renvoie :

*   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

Voici mon fichier app.yml et les résultats de l’exécution de discourse-doctor :

app.yml
 ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 2

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
  DISCOURSE_HOSTNAME: community.example.io

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (-h option) que spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'adresses e-mail séparées par des virgules qui seront administrateurs et développeurs
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'example@example.com'

  ## TODO : Le serveur SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  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           # (optionnel, par défaut true)
  DISCOURSE_SMTP_DOMAIN: community.example.io
  DISCOURSE_NOTIFICATION_EMAIL: noreply@community.example.io

  ## Si vous avez ajouté le modèle Let's Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: example@example.com

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
  ## voir https://meta.discourse.org/t/14857 pour les détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clé d'adresse IP Maxmind pour la recherche d'adresses IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour les détails
  DISCOURSE_MAXMIND_LICENSE_KEY: XXXXX

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
  DISCOURSE_HOSTNAME: community.example.io

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (-h option) que spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'adresses e-mail séparées par des virgules qui seront administrateurs et développeurs
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'example@example.com'

  ## TODO : Le serveur SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  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           # (optionnel, par défaut true)
  DISCOURSE_SMTP_DOMAIN: community.example.io
  DISCOURSE_NOTIFICATION_EMAIL: noreply@community.example.io

  ## Si vous avez ajouté le modèle Let's Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: example@example.com

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
  ## voir https://meta.discourse.org/t/14857 pour les détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clé d'adresse IP Maxmind pour la recherche d'adresses IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour les détails
  DISCOURSE_MAXMIND_LICENSE_KEY: XXXXXX

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log
résultats de discourse-doctor
Fichier containers/app.yml trouvé

==================== PARAMÈTRES YML ====================
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

==================== INFOS DOCKER ====================
VERSION DOCKER : Docker version 20.10.21, build baeda1f

PROCESSUS DOCKER (docker ps -a)

CONTAINER ID   IMAGE                 COMMAND        CRÉÉ           STATUT          PORTS                                                                      NOMS
e1d88ff15b5b   local_discourse/app   "/sbin/boot"   18 minutes     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     Up 18 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Le conteneur Discourse app est en cours d'exécution


==================== PLUGINS ====================
          - git clone https://github.com/discourse/docker_manager.git

Aucun plugin non officiel détecté.

Voir https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb pour la liste officielle.

========================================
Version de Discourse sur community.example.io : NON TROUVÉE
Version de Discourse sur localhost : NON TROUVÉE


==================== INFORMATIONS MÉMOIRE ====================
RAM (Mo) : 1016

               total        utilisé       libre     partagé  cache/buff   disponible
Mémoire :         969         687          61          21         220         110
Swap :           2047         241        1806

==================== VÉRIFICATION ESPACE DISQUE ====================
---------- Espace disque OS ----------
Système de fichiers      Taille  Utilisé  Disponible  % Monté sur
/dev/vda1        25 Go  8,2 Go   16 Go   34 % /

==================== INFORMATIONS DISQUE ====================
Disque /dev/loop0 : 63,22 MiB, 66293760 octets, 129480 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille du secteur (logique/physique) : 512 octets / 512 octets
Taille E/S (min/opt) : 512 octets / 512 octets


Disque /dev/loop1 : 102,98 MiB, 107986944 octets, 210912 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille du secteur (logique/physique) : 512 octets / 512 octets
Taille E/S (min/opt) : 512 octets / 512 octets


Disque /dev/loop2 : 47,98 MiB, 50315264 octets, 98272 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille du secteur (logique/physique) : 512 octets / 512 octets
Taille E/S (min/opt) : 512 octets / 512 octets


Disque /dev/vda : 25 GiB, 26843545600 octets, 52428800 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille du secteur (logique/physique) : 512 octets / 512 octets
Taille E/S (min/opt) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant du disque : 728BDF97-580D-4B6F-9462-7E2540D5378B

Périphérique      Début      Fin  Secteurs  Taille Type
/dev/vda1  227328 52428766 52201439 24,9 Go Système de fichiers Linux
/dev/vda14   2048    10239     8192    4 Mo Boot BIOS
/dev/vda15  10240   227327   217088  106 Mo Système EFI

Les entrées de la table de partition ne sont pas dans l'ordre du disque.


Disque /dev/vdb : 466 Ko, 477184 octets, 932 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille du secteur (logique/physique) : 512 octets / 512 octets
Taille E/S (min/opt) : 512 octets / 512 octets

==================== FIN DES INFORMATIONS DISQUE ====================

==================== TEST MAIL ====================
Pour un test robuste, obtenez une adresse sur http://www.mail-tester.com/
Ou envoyez simplement un message de test à vous-même.
Adresse e-mail pour le test mail ? ('n' pour sauter) [example@example.com  ]:
Envoi du message à example@example.com  . . .
Test d'envoi à example@example.com en utilisant smtp.mailgun.org:587, nom d'utilisateur:no-reply@example.io avec authentification simple.
Connexion au serveur SMTP réussie.
Envoi à example@example.com. . .
Message accepté par le serveur SMTP.
Message-ID: e3455d15-eb48-48bf-9859-a30f1acc765c@community.example.io

Si vous ne recevez pas le message, vérifiez votre dossier SPAM
ou testez à nouveau en utilisant un service comme http://www.mail-tester.com/.

Si le message n'est pas livré, ce n'est pas un problème avec Discourse.
Vérifiez les journaux du serveur SMTP pour l'ID de message ci-dessus pour voir pourquoi il
a échoué à livrer le message.
Remplacement : SMTP_PASSWORD
Remplacement : LETSENCRYPT_ACCOUNT_EMAIL
Remplacement : DEVELOPER_EMAILS
Remplacement : DISCOURSE_DB_PASSWORD
Remplacement : Envoi du message à

==================== TERMINÉ ! ====================

J’ai également exécuté ./launcher enter app dans le répertoire Discourse + la commande top pour vérifier que nginx, redis, postmaster et ruby sont tous en cours d’exécution. Je ne vois pas nginx dans la liste

launcher enter app --> résultats top
Tâches :  31 au total,   1 en cours d'exécution,  30 en veille,   0 arrêté,   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 Mémoire :    969,4 total,     72,4 libre,    659,0 utilisé,    238,0 cache/buff
MiB Swap :   2048,0 total,   1667,2 libre,    380,8 utilisé.    141,1 mémoire disponible

    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

J’ai jeté un œil au fichier error.log à l’intérieur de var/discourse/shared/standalone/log/var-log/nginx :

2022/12/12 07:55:26 [emerg] 5040#5040: impossible de charger le certificat "/shared/ssl/community.example.io.cer" : PEM_read_bio_X509_AUX(>
2022/12/12 07:55:27 [emerg] 5042#5042: impossible de charger le certificat "/shared/ssl/community.example.io.cer" : PEM_read_bio_X509_AUX(>
2022/12/12 07:55:28 [emerg] 5044#5044: impossible de charger le certificat "/shared/ssl/community.example.io.cer" : PEM_read_bio_X509_AUX(>
2022/12/12 07:55:29 [emerg] 5046#5046: impossible de charger le certificat "/shared/ssl/community.example.io.cer" : PEM_read_bio_X509_AUX(>
....

D’accord, en me basant sur le fichier error.log situé dans var/discourse/shared/standalone/log/var-log/nginx, j’ai décidé de commenter les modèles ssl dans app.yml :

## Décommentez ces deux lignes si vous souhaitez ajouter Let's Encrypt (https)
##  - "templates/web.ssl.template.yml"
## - "templates/web.letsencrypt.ssl.template.yml"

Ensuite, j’ai exécuté ./launcher stop app et ./launcher rebuild app, ce qui a maintenant réussi à exécuter la compilation de Discourse via http et affiche “Félicitations, vous avez installé Discourse !” dans le navigateur.

Un pas en avant, mais je n’arrive pas à faire fonctionner le ssl. Je n’ai pas encore expiré mes certificats LE, le DNS semble bon, et il s’agit d’une nouvelle installation avec des spécifications serveur très standard.

Des idées sur la raison pour laquelle l’installation ne me permet pas d’activer le ssl via Let’sEncrypt ?

Je suppose que votre DNS est erroné, ou l’était, et que vous avez essayé suffisamment de fois pour être limité en débit. Les solutions faciles sont d’attendre une semaine ou de choisir un nom de sous-domaine différent.

Puisque vous ne partagez pas votre nom d’hôte, nous ne pouvons pas savoir si le DNS fonctionne.

Merci pour la réponse @pfaffman. http:// fonctionne bien, mais ssl échoue lorsque Let’s Encrypt est activé. Même si j’ai configuré LE via une nouvelle installation, j’ai lu le tutoriel de configuration de LE et je n’ai vu aucune mention de modifications DNS.

De quoi ai-je spécifiquement besoin du côté DNS pour permettre à LE/SSL de fonctionner ?

Voici une capture d’écran de ma configuration DNS :

(DKIM/SPF a été validé et le courrier Discourse fonctionne bien, juste pour information)

Encore une fois, je suppose que vous avez essayé à plusieurs reprises de demander une adresse à Let’s Encrypt et que cela a échoué pour une raison quelconque, et que vous ne pouvez plus réessayer avant une semaine. Si j’ai raison, alors attendez une semaine, ou utilisez un nom différent.

Il existe un moyen d’obtenir l’erreur de leur part, mais je ne me souviens pas comment la trouver sur mon téléphone.

Compris. Après la marque des sept jours en début de semaine prochaine, je réactiverai le SSL dans app.yml + reconstruirai et ferai un rapport.