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