Installer Discourse sur une connexion Internet résidentielle avec Cloudflare Tunnel

Puisque Discourse prend désormais en charge le fonctionnement sur un Raspberry Pi, l’exécution d’une petite instance dans votre laboratoire à domicile deviendra un cas d’utilisation courant. Cependant, de nombreux FAI résidentiels bloquent le trafic entrant vers les ports 80/443 dont Discourse a besoin.

Pour notre site de démonstration sur https://discourse-on-a-pi.falco.dev/, nous avons utilisé Cloudflare Tunnel pour contourner ce problème, et vous pouvez le faire aussi !

Configurez votre tunnel

Tout d’abord, suivez le guide suivant :

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide

La seule modification dont vous avez besoin est de changer l’URL de url: http://localhost:8000 à url: http://localhost:80. Laissez le tunnel s’exécuter en arrière-plan.

Désactiver Rocket Loader

Vous devez désactiver Cloudflare Rocket Loader pour que Discourse fonctionne correctement.

https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2

Installer Discourse

Suivez Comment installer Discourse en production, mais appuyez sur CTRL+C après la création du fichier app.yml, qui vous donne un compte à rebours de 5 secondes.

Modifiez maintenant les premières lignes du fichier pour qu’elles ressemblent à ceci :

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

et ajoutez la ligne suivante sous la section env: :

DISCOURSE_FORCE_HTTPS: true

Puis exécutez ./launcher rebuild app.

Pendant que vous attendez, installez une règle de page pour rediriger toujours vers HTTPS comme ceci :

Dans quelques minutes, votre nouvelle instance Discourse sera disponible sur le domaine que vous avez utilisé dans la configuration du tunnel/Discourse :tada:.

38 « J'aime »

Je pense qu’il est préférable de mentionner le port. Si l’utilisateur décide d’utiliser un tunnel Argo, il devra configurer son port de la même manière que les paramètres du tunnel. Par exemple :

-80:80
#-443:443

Ensuite, il devra laisser le tunnel écouter
http://localhost:80

Ce que j’utilise, c’est un socket Unix pour les connecter.

5 « J'aime »

N’est-ce pas ce que je mentionne ici :

?

7 « J'aime »

Salut Rafael,

Merci pour le tutoriel.

J’ai suivi toutes les instructions de votre guide ci-dessus et tout fonctionne bien, cependant ;

Lorsque je clique sur le lien dans l’e-mail pour activer mon compte, je suis redirigé vers la bonne page web avec un bouton d’activation, mais ce bouton ne fonctionne pas. J’ai consulté les guides sur ce forum et il semble s’agir d’un problème de domaine vers IP ?

J’ai confirmé que force_https est défini sur true dans la configuration.

Avez-vous des idées / avez-vous rencontré ce problème (capture d’écran ci-jointe) du bouton qui ne fait rien ?

3 « J'aime »

Alors, j’ai réussi à régler ça.

Assurez-vous simplement que Rocket Loader est désactivé :wink:

Santé !

6 « J'aime »

Enfin, j’ai installé Discourse sur Raspberry Pi. Mais j’ai des problèmes avec les tunnels Cloudflare.

Je ne peux pas accéder au site Discourse avec le domaine, quelque chose d’étrange dans la configuration de config.yml ?

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3 « J'aime »

Quel est le résultat de la commande tunnel ? Il doit être explicite quant aux erreurs que vous avez commises dans la configuration.

3 « J'aime »

cloudflared tunnel info sortie :

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF Impossible de déterminer le chemin du certificat d'origine par défaut. Aucun fichier cert.pem dans [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T04:55:47Z ERR Vous devez spécifier le chemin du certificat d'origine avec l'option --origincert, ou définir la variable d'environnement TUNNEL_ORIGIN_CERT. Voir https://developers.cloudflare.com/argo-tunnel/reference/arguments/ pour plus d'informations. originCertPath=
erreur lors de l'analyse de l'ID du tunnel : Erreur de localisation du certificat d'origine : le client n'a pas spécifié de chemin d'origine lors de l'exécution à partir du terminal
2 « J'aime »

Il semble que vous ayez égaré le fichier de certificat ? Si vous l’exécutez en tant que root, le fichier devrait se trouver sous

/root/.cloudflared/

et non là où vous l’avez mis comme

2 « J'aime »

J’ai déjà le fichier cert.pem.

2 « J'aime »

Et essayez-vous de démarrer le tunnel en tant qu’utilisateur pi ou en tant que root ?

3 « J'aime »

J’utilise cette commande en tant qu’utilisateur pi

cloudflared tunnel run <UUID ou NOM>

2 « J'aime »

Salut @bekircem,

Il semble que votre Cloudflared ait réussi à établir une connexion avec le réseau périphérique de Cloudflare.

Avez-vous activé le routage avec un CNAME vers votre ID de tunnel Argo sur Cloudflare ?

Cordialement,

Alex.

3 « J'aime »

Salut @Stigin, merci pour votre réponse.

Oui, j’ai activé le routage depuis la ligne de commande

2 « J'aime »

Intéressant @bekircem - Hmm !!

Quelle est l’erreur actuelle que vous obtenez lorsque vous naviguez vers l’adresse de votre site Web ? Est-ce juste une page d’erreur générique Cloudflare Argo Tunnel ?

Pourriez-vous nous montrer vos conteneurs en cours d’exécution en exécutant la commande : docker ps et nous montrer vos tunnels en cours d’exécution avec cloudflared tunnel list || Assurez-vous de flouter votre route Argo / tout conteneur non pertinent ! :wink:

Alex.

3 « J'aime »

Quelle est l’erreur actuelle que vous obtenez lorsque vous naviguez vers l’adresse de votre site Web ? Est-ce juste une page d’erreur générique Cloudflare Argo Tunnel ?

Non, il n’y a pas de page d’erreur Cloudflare Argo Tunnel.

ERR_NAME_NOT_RESOLVED

docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
f1bde9b70f55   local_discourse/app   “/sbin/boot”   11 hours ago   Up 11 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Lorsque vous utilisez cette commande en tant qu’utilisateur root cloudflared tunnel list

2022-01-24T15:55:03Z INF Impossible de déterminer le chemin du certificat d'origine par défaut. Aucun fichier cert.pem dans [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR Vous devez spécifier le chemin du certificat d'origine avec l'option --origincert, ou définir la variable d'environnement TUNNEL_ORIGIN_CERT. Voir https://developers.cloudflare.com/argo-tunnel/reference/arguments/ pour plus d'informations. originCertPath=
Erreur de localisation du certificat d'origine : le client n'a pas spécifié le chemin d'origine du certificat lors de l'exécution depuis le terminal

Lorsque vous utilisez cette commande en tant qu’utilisateur pi cloudflared tunnel list

Vous pouvez obtenir des informations plus détaillées pour chaque tunnel avec `cloudflared tunnel info <nom/uuid>`
ID                                   NOM      CRÉÉ                 CONNEXIONS
371dd57c-**************** ze****2022-01-24T03:35:19Z

Est-ce normal ?

Nous devons utiliser un sous-domaine pour DISCOURSE_HOSTNAME dans le fichier config.yml, n’est-ce pas ?

Mise à jour : J’ai désinstallé Cloudflared et l’ai réinstallé avec l’utilisateur root et cela fonctionne maintenant. Je ne comprends toujours pas où j’ai exactement commis une erreur dans ma tentative précédente.

2 « J'aime »

J’ai réussi à faire fonctionner le site sur Raspberry et il est en ligne.

Je ne comprends pas trop comment. J’ai supprimé Cloudflared et je l’ai réinstallé avec l’utilisateur root. Et ça fonctionne…

J’ai deux questions,

1- Il semble que mon certificat SSL ne fonctionne pas correctement, je ne peux donc pas me connecter à mon compte administrateur sur Discourse. (Il semble qu’il s’exécute dans un onglet de navigation privée. Peut-être est-ce un problème de cache.) Utilisez-vous “full” ou “full(strict)” ?

2- J’ai des questions sur l’exécution de cloudflared en tant que service. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

J’ai lancé le tunnel avec la commande cloudflared tunnel run <UUID ou NOM>. Mais quand je ferme la fenêtre iTerm, est-ce que ça va arrêter de fonctionner ?

Si vous vous êtes déjà connecté et que vous avez un fichier de configuration dans ~/.cloudflared/, ceux-ci seront copiés dans /etc/cloudflared/.

Si vous n’avez pas de fichier de configuration, vous devrez créer un fichier config.yml avec les champs listés ci-dessus. Vous pouvez passer un fichier personnalisé en exécutant cloudflared --config CONFIG-FILE service install.

J’ai vérifié, je n’ai pas de fichier de configuration dans /etc/cloudflared/. Dans ce cas, que dois-je faire pour exécuter ce service automatiquement ?

Merci.

2 « J'aime »

Les questions plus spécifiques sur le service Cloudflare Tunnel recevront peut-être de meilleures réponses sur https://community.cloudflare.com/tag/cloudflaretunnel

3 « J'aime »

Salut @bekircem,

Je pense que le réinstaller aurait résolu le problème de cloudflared qui ne trouve pas le certificat…

En ce qui concerne l’exécution de Cloudflare en tant que service, le fichier de configuration que vous avez créé lors de l’exécution du service manuellement devra être déplacé vers /etc/cloudflared.

Je ne suis pas sûr de pouvoir lier des sites personnels ici, alors faites-moi savoir si je dois supprimer ceci, mais j’en ai parlé dans l’un de mes blogs sous la section intitulée : ‘Setup and Run Cloudflared as a Service

Faites-nous savoir comment vous vous en sortez !

Alex.

4 « J'aime »

Merci pour votre réponse.

Excellent article de blog, merci de l’avoir partagé.

Exécuter Cloudflared en tant que service

sudo cloudflared service install

Le fichier config.yml est automatiquement copié dans /etc/cloudflared/.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

Et cela fonctionne très bien. Je n’ai pas encore essayé de redémarrer, mais j’espère que cela fonctionnera.

4 « J'aime »