Discourse ne se charge pas avec Apache et la redirection de proxy

Malgré mon intention initiale de passer à autre chose avec Discourse, étant donné l’absence totale de documentation actuelle qui ne soit pas hyper-centrée sur CentOS/Nginx, une personne incroyablement généreuse et patiente chez DigitalOcean a répondu à un fil que j’avais créé là-bas. Après quelques essais et erreurs, elle m’a aidé à mettre au point un tutoriel simple à suivre pour les futurs utilisateurs de Discourse se trouvant dans la même situation que moi.

Pour rappel, ces circonstances sont les suivantes :

Installer Discourse sur le même serveur qu’Apache | Utilisation d’Ubuntu 18.04 | DigitalOcean

crédit à Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (première réponse)

Prérequis

  • Par mesure de précaution, assurez-vous de sauvegarder votre Droplet, afin de pouvoir revenir à une version fonctionnelle en cas de problème.
  • Connectez-vous en SSH à votre Droplet.
  • Apache doit être installé. Vous pouvez suivre les étapes pour cela ici :

Étape 1 - Installer Docker

Pour installer Docker, veuillez suivre les étapes indiquées ici :

Étape 2 - Télécharger Discourse

Tout d’abord, créez un répertoire où vous stockerez vos fichiers Discourse :

mkdir /var/discourse

Ensuite, clonez l’image Docker officielle de Discourse dans /var/discourse.

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Étape 3 - Configurer Discourse pour écouter sur le port 8080

Nous utiliserons le modèle standalone.yml qui inclut tous les services nécessaires tels que PostgreSQL, Redis, etc.

Copiez le fichier exemple avec la commande suivante :

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Ensuite, éditez le fichier avec votre éditeur préféré. Ouvrez /var/discourse/containers/app.yml et mettez à jour les ports aux lignes 23 et 24 :

## Quels ports TCP/IP ce conteneur doit-il exposer ?
expose:
  - "8080:80"   # transférer le port hôte 8080 vers le port 80 du conteneur (http)
  - "8443:443"   # transférer le port hôte 8443 vers le port 443 du conteneur (https)

Si vous ne possédez pas encore de certificat SSL, assurez-vous de commenter la ligne 16 :

  #- "templates/web.ssl.template.yml"

Ajoutez simplement le symbole # devant la ligne - "templates/web.ssl.template.yml", sinon Discourse ne démarrera pas.

Étape 4 - Configurer Discourse

Changez de répertoire :

cd /var/discourse

Ensuite, démarrez Discourse (comme c’est la première fois que vous lancez le service, cela initialisera l’application avec les nouvelles modifications présentes dans votre fichier app.yml) :

./discourse-setup

Remarque : Assurez-vous de fournir des paramètres de serveur de messagerie valides, sinon la configuration pourrait échouer.

Étape 5 - Configurer Apache

Dans votre répertoire /etc/apache2/sites-available/, créez un nouveau fichier nommé forum.example.com.conf et ajoutez le contenu Vhost suivant :

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • Activez le Vhost avec la commande suivante :
a2ensite forum.example.com
  • Activez le module Proxy :
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Redémarrez Apache :
systemctl restart apache2

Après cela, vous pourrez accéder directement à Discourse via votre nom de domaine.


Remarque 1 : Lors de l’installation de Discourse, le fichier app.yml peut être écrasé et les lignes 16/17 (SSL) seront décommentées. Vous devrez les commenter à nouveau, puis reconstruire l’application (n’oubliez pas de changer de répertoire) : ./launcher rebuild app

Remarque 2 : SSL n’est pas activé pour Discourse avec ce guide. Il est peu surprenant qu’aucune documentation n’existe pour activer SSL Let’s Encrypt si vous l’avez déjà activé pour Apache. Si quelqu’un tombe sur une solution à ce problème, n’hésitez pas à me contacter.

4 « J'aime »