J’ai donc utilisé la documentation d’installation standard et tout semblait se passer correctement. J’ai ensuite édité le fichier app.yml pour modifier les ports utilisés, commenté Let’s Encrypt et reconstruit l’application. Tout semblait fonctionner correctement.
Mais lorsque j’essaie de me connecter via la méthode la plus directe :
Alerte ! : Impossible d’établir une connexion sécurisée avec l’hôte distant.
Je ne peux même pas faire un ping sur le port.
Cela a-t-il un sens ? Y a-t-il des journaux à l’intérieur du conteneur ?
—Édition pour ajouter----
$ sudo ./launcher logs app
run-parts: exécution de /etc/runit/1.d/00-ensure-links
run-parts: exécution de /etc/runit/1.d/00-fix-var-logs
run-parts: exécution de /etc/runit/1.d/01-cleanup-web-pids
run-parts: exécution de /etc/runit/1.d/anacron
run-parts: exécution de /etc/runit/1.d/cleanup-pids
Nettoyage des fichiers PID obsolètes
run-parts: exécution de /etc/runit/1.d/copy-env
runsvdir démarré, PID est 43
ok: run: redis: (pid 56) 0s
**chgrp : groupe invalide : « syslog »**
ok: run: postgres: (pid 55) 0s
supervisor pid: 57 unicorn pid: 85
(57) Réouverture des journaux
----Édition pour ajouter plus----
root@hestia-app:/shared/log/rails# tail -f *.log
==\u003e production_errors.log \u003c==
==\u003e production.log \u003c==
==\u003e sidekiq.log \u003c==
==\u003e unicorn.stderr.log \u003c==
I, [2021-08-06T00:56:35.859967 #85] INFO -- : master terminé la réouverture des journaux
I, [2021-08-06T00:56:50.911700 #142] INFO -- : worker=0 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.911698 #152] INFO -- : worker=1 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.935834 #162] INFO -- : worker=2 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.941733 #233] INFO -- : worker=7 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.945447 #203] INFO -- : worker=5 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.947354 #172] INFO -- : worker=3 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.949949 #187] INFO -- : worker=4 terminé la réouverture des journaux
I, [2021-08-06T00:56:50.953453 #213] INFO -- : worker=6 terminé la réouverture des journaux
==\u003e unicorn.stdout.log \u003c==
Sidekiq PID 131 terminé la réouverture des journaux...
D’accord, donc j’ai lancé l’application et installé lynx à l’intérieur du conteneur Docker de Discourse, et je peux accéder à la page d’accueil ! L’installation fonctionne donc, le problème vient de la mappage réseau depuis le conteneur vers le serveur.
Voici la sortie de docker ps :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6d0209e4e72 local_discourse/app "/sbin/boot" 51 minutes ago Up 51 minutes 127.0.0.1:8880->80/tcp, 127.0.0.1:4443->443/tcp app
…et voici les informations du fichier app.yml :
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
expose:
- "127.0.0.1:8880:80" # http
- "127.0.0.1:4443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
db_shared_buffers: "2048MB"
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
UNICORN_WORKERS: 8
DISCOURSE_HOSTNAME: [redacted]
DISCOURSE_SMTP_ADDRESS: [redacted]
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [redacted]
DISCOURSE_SMTP_PASSWORD: "[redacted]"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optionnel, par défaut true)
DISCOURSE_SMTP_DOMAIN: [redacted]
DISCOURSE_NOTIFICATION_EMAIL: [redacted]
## 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
## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Toutes les commandes personnalisées à exécuter après la construction
run:
- exec: echo "Début des commandes personnalisées"
- exec: echo "Fin des commandes personnalisées"
Ah, je vois ce que j’ai fait. Le 8880:80 fonctionne bien, je testais uniquement le côté 4443:443. Cela n’a pas fonctionné car il y a une erreur de certificat. Je compte installer et gérer le certificat au niveau du serveur web dans l’hôte virtuel. Je posterai une solution finale pour ceux que cela intéresse une fois que tout fonctionnera.
Installation de l’environnement
Hestia Control Panel (pour la gestion du serveur)
Apache2 (serveur web)
Discourse dans Docker, inversé via un proxy vers Apache2
Let’sEncrypt non inversé via un proxy, mais géré par Hestia dans www_root
Configurer les sockets Unix dans app.yml (et reconstruire) :
- "templates/web.socketed.template.yml"
Supprimer la mappage de ports et Let’sEncrypt de app.yml (et reconstruire)
Créer des modèles alternatifs de apache2.conf pour HestiaCP comme suit (pour ceux qui n’utilisent pas HestiaCP, sachez simplement que les balises %{replace tags}% sont assez standard et évidentes si vous examinez n’importe quel autre fichier apache2.conf. Les parties les plus importantes n’utilisent pas beaucoup de balises %{replace tags}%. Notez également que le texte standalone pourrait être socket-only selon votre configuration. Vérifiez ce qui se trouve dans le répertoire /var/discourse/shared/ si vous ne vous en souvenez pas.
{Custom Template}.stpl
<VirtualHost %ip%:%web_ssl_port%>
ServerName %domain_idn%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ServerAdmin %email%
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
SSLRequireSSL
Options +Includes -Indexes +ExecCGI
</Directory>
SSLEngine on
SSLVerifyClient none
SSLCertificateFile %ssl_crt%
SSLCertificateKeyFile %ssl_key%
%ssl_ca_str%SSLCertificateChainFile %ssl_ca%
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.ssl.conf_*
</VirtualHost>
{Custom Template}.tpl
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.well-known/acme-challenge
RewriteRule ^(.*) https://%domain_idn%/$1 [R=301,L]
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.conf_*
</VirtualHost>