Je veux installer en utilisant un proxy inverse pour Apache

Je voulais installer en utilisant le proxy inverse d’Apache et j’ai essayé d’installer avec un port personnalisé, mais cela n’a pas fonctionné.
Y a-t-il un moyen de le faire ?

Vérification de votre nom de domaine . . .
AVERTISSEMENT : Le port 443 de l'ordinateur ne semble pas être accessible en utilisant le nom d'hôte :
NOM-DU-DOMAINE
AVERTISSEMENT : La connexion à NOM-DU-DOMAINE (port 80) échoue également.

Cela suggère que NOM-DU-DOMAINE se résout en une adresse IP qui ne permet pas d'atteindre cette
machine où vous installez Discourse.

La première chose à faire est de confirmer que NOM-DU-DOMAINE se résout à l'adresse IP de ce serveur.
Vous le faites généralement au même endroit où vous avez acheté le domaine.

Si vous êtes certain que l'adresse IP se résout correctement, il pourrait s'agir d'un problème de pare-feu.
Une recherche web pour "ouvrir les ports VOTRE SERVICE CLOUD" pourrait aider.

Cet outil est conçu uniquement pour les installations les plus standard. Si vous ne pouvez pas résoudre
le problème ci-dessus, vous devrez modifier vous-même containers/app.yml puis taper

ÉCHEC
--------------------
Pups::ExecError : /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Aborting! Domain is not configured!"; exit 1; end' a échoué avec le retour #<Process::Status: pid 176 exit 1>
Emplacement de l'échec : /pups/lib/pups/exec_command.rb:112:in `spawn'
Échec de l'exécution avec les paramètres "/usr/local/bin/ruby -e 'if ENV[\"DISCOURSE_HOSTNAME\"] == \"discourse.example.com\"; puts \"Aborting! Domain is not configured!\"; exit 1; end'"
de0d133ffdd4c51d9a870d09bd16ce8fcc0680130ced1446f0038b4175a46840
** ÉCHEC DU BOOTSTRAP ** Veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.

app.yml

## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## voir https://meta.discourse.org/t/17247 pour les détails
expose:
  - "127.0.0.1:8100:80"   # http

params:

Vous ne pouvez pas utiliser discourse-setup, mais vous pouvez rechercher : Comment installer Discourse sur un serveur avec des sites Apache existants

2 « J'aime »

Merci.
J’ai suivi le guide pour construire Discourse.
Cependant, le proxy inverse dans Apache ne fonctionne pas correctement.

    ProxyPass /  ws://var/discourse/shared/standalone/nginx.http.sock
    ProxyPassReverse / ws://var/discourse/shared/standalone/nginx.http.sock

Erreur

 Aucun gestionnaire de protocole n'était valide pour l'URL /favicon.ico (schéma 'ws'). Si vous utilisez une version DSO de mod_proxy, assurez-vous que les sous-modules proxy sont inclus dans la configuration en utilisant LoadModule.

Cher @Teraterayuki,

Voici un exemple de jeu de serveurs virtuels Apache2 fonctionnels pour un proxy inverse vers une socket Unix dans un conteneur Discourse :

Port 80

<VirtualHost *:80>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors.log
        CustomLog ${APACHE_LOG_DIR}/community.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =mysite.mydomain.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Port 443

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        #SSLProxyEngine on   #activez ceci après la configuration de Let's Encrypt sur le proxy inverse
        RewriteEngine On
        
        RewriteCond %{HTTP_USER_AGENT}  (Bytespider|Yandex|Wget|seocompany|CCBot|Cincraw) [NC]
        RewriteRule . - [R=403,L]

        ProxyPreserveHost On
        ProxyRequests Off
        RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
        RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/
        ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
        SSLCertificateFile /etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mysite.mydomain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

@Teraterayuki

Veuillez noter que dans cette configuration, le proxy utilise une socket Unix et non une websocket (ws).

Notez également que dans cette configuration, vous n’avez pas besoin d’ajouter manuellement les informations Let’s Encrypt. Vous pouvez commencer par ceci :

Port 80 avant d’exécuter Certbot

<VirtualHost *:80>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors.log
        CustomLog ${APACHE_LOG_DIR}/community.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
     
</VirtualHost>

Port 443 avant d’exécuter Certbot

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        #SSLProxyEngine on   #activez ceci après la configuration de Let's Encrypt sur le proxy inverse
        RewriteEngine On


        ProxyPreserveHost On
        ProxyRequests Off
        RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
        RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/
        ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off

</VirtualHost>
</IfModule>

Ensuite, si vous exécutez :

certbot -d mysite.mydomain.com

Le sympathique certbot s’occupera d’ajouter automatiquement le code SSL requis pour vous.

Une fois que notre ami certbot a ajouté son code de configuration et que tout fonctionne comme prévu, vous pouvez décommenter cette ligne :

#SSLProxyEngine on   #activez ceci après la configuration de Let's Encrypt sur le proxy inverse

et redémarrer apache2.

J’espère que cela vous aidera, @Teraterayuki.

Prenez soin de vous.


Remarques de clôture :

  1. Veuillez noter que nous n’utilisons pas haproxy dans nos configurations de proxy inverse Apache2. haproxy ajoute une couche de complexité inutile avec presque aucun avantage tangible (pour nous), nous exécutons donc Apache2 comme proxy inverse « de la manière simple ». YMMV si vous souhaitez utiliser haproxy ; mais honnêtement, nous n’utilisons pas haproxy (sur plusieurs configurations de proxy inverse Apache2 en production) et nous n’avons jamais rencontré de problèmes avec Apache2 en tant que proxy inverse.
  1. Si vous n’utilisez pas mod_pagespeed, commentez ces lignes. Cependant, si vous exécutez mod_pagespeed, désactivez mod_pagespeed par serveur virtuel lors de la mise en proxy inverse vers Discourse.

Meilleurs vœux… et j’espère que cela vous aidera, même de manière modeste.

6 « J'aime »

C’est terminé
Merci !
Voici ce que nous avons effectivement configuré !

<VirtualHost *:80>
  ServerName NOM-DOMAINE
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
    ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
    ProxyPassReverse  / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
</VirtualHost>

3 « J'aime »

Bienvenue !

Voyez comme c’est simple !

Configurer Apache2 comme proxy inverse pour Discourse est un jeu d’enfant, comme vous le montrez avec votre configuration simple du port 80 sans HTTPS. Bon travail :slight_smile:

3 « J'aime »

Nous avons également réussi à accéder au site via HTTPS.
J’ai configuré un proxy inverse Apache pour rediriger vers HTTPS.
Cependant, les ressources semblent être accessibles via HTTP et ne s’affichent pas correctement.
Que puis-je faire ?

Vous devriez publier vos fichiers de configuration fonctionnels pour vos hôtes virtuels, car personne ne peut les voir ni vous aider si vous ne les publiez pas :slight_smile:

Au fait : J’ai publié des fichiers de configuration d’hôtes virtuels entièrement fonctionnels et opérationnels (production) pour la même configuration que vous essayez de mettre en place. Si vous les comprenez et les suivez, vous ne devriez rencontrer aucun problème :wink:

Voici comment je l’ai configuré.
Il semble que toutes les URLs générées par Discourse soient en http.

<VirtualHost *:80>
  ServerName NOM-DOMAINE
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:443>
  ServerName NOM-DOMAINE
  SSLEngine On
  SSLProtocol all -SSLv2
  SSLCertificateFile /etc/letsencrypt/live/NOM-DOMAINE/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/NOM-DOMAINE/privkey.pem
  ProxyPreserveHost on
  RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
  RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
  ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
  ProxyPassReverse  / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
</VirtualHost>

Vous devriez définir DISCOURSE_FORCE_HTTPS à true ou régler ce paramètre dans vos paramètres système.

2 « J'aime »

Bonjour ! Le script discourse-setup vous redirige ici lorsque les ports 80/443 sont déjà utilisés, mais ces instructions ne s’appliquent pas aux nouvelles installations. Comment procéder à une nouvelle installation en utilisant votre propre proxy inverse ?

Essayez ceci :

./discourse-setup  --skip-connection-test --skip-rebuild

Vous devrez toujours modifier le fichier app.yml manuellement après cela, mais cela remplira au moins les éléments qu’il demande.

Faites-moi savoir si cela aide, et quelqu’un pourra alors mettre à jour ce tutoriel en conséquence.

1 « J'aime »

J’ai modifié le script pour utiliser une variable pour HTTP_PORT et HTTPS_PORT. Cependant, ce n’est pas une solution propre car elle sera perdue. Je pense que tu peux le mentionner dans le post, cela sera utile pour une première installation :slight_smile:

Vous avez apporté les modifications à app.yml ? Quand pensez-vous qu’elles seront perdues ?