Je voulais juste partager les étapes que j’ai suivies pour configurer un sous-dossier avec Cloudflare, surtout lorsque le site Web principal est déjà en ligne et que le domaine racine ne peut pas être pointé vers le serveur de forum (même temporairement).
Points clés
- Le
mywebsite.comexistant pointe actuellement vers1.1.1.1et est en ligne - Nous devrions router
mywebsite.com/forum(et ses sous-répertoires) vers2.2.2.2 - Comme lors de l’installation de Discourse, nous ne pouvons pas passer la validation letsencrypt (qui vérifie si le domaine résout le serveur actuel), nous devrions utiliser la validation DNS
Modifications dans app.yml
Mises à jour Letsencrypt
Créez un nouveau modèle letsencrypt et configurez-le dans app.yml selon ce sujet : LetsEncrypt DNS Validation Template Using Cloudflare
Cependant, assurez-vous de copier uniquement la méthode issue_cert de ce post, et le reste du contenu provient du web.letsencrypt.ssl.template.yml original (car il a été modifié après la publication du sujet).
LETSENCRYPT_CF_TOKEN: ""
LETSENCRYPT_CF_ACCOUNT_ID: ""
LETSENCRYPT_CF_ZONE_ID: ""
LETSENCRYPT_DNS_PROVIDER: "dns_cf"
- Vous pouvez créer le jeton Cloudflare depuis la page Mon profil CF → “Jetons API”.
- L’ID de compte et l’ID de zone sont affichés sur la page d’aperçu du domaine.
- Laissez la valeur du fournisseur DNS telle quelle.
Mises à jour du sous-dossier
Selon ce sujet Serve Discourse from a subfolder (path prefix) instead of a subdomain, définissez DISCOURSE_RELATIVE_URL_ROOT: /forum sous env: et mettez à jour la section run:.
Notez ce post pour les IP des utilisateurs : Serve Discourse from a subfolder (path prefix) instead of a subdomain - #111 by varun21
Reconstruire
Après avoir modifié app.yml pour exécuter la commande de reconstruction, nous devons ignorer la vérification de Discourse pour que le domaine résolve l’IP du serveur actuel (puisque notre mywebsite.com pointe déjà vers 1.1.1.1, et Discourse vérifie le domaine racine), pour cela exécutez :
./launcher rebuild app --skip-connection-test
Configuration Cloudflare
Je sais que certaines personnes recommandent d’utiliser Workers pour router /forum vers 2.2.2.2, cependant j’ai trouvé beaucoup plus facile de le faire avec Load Balancing. Avec les Workers, je n’ai de toute façon pas pu résoudre les problèmes liés au CSS/JS, même avec rocket loader et d’autres paramètres similaires désactivés. Donc,
- Activez le Load Balancer (sous Traffic)
- Sélectionnez “Manage Pools” → “Create”
- Créez 2 pools (pour le site Web principal et pour le forum), chacun d’eux devrait avoir un seul point de terminaison
- Créez un Load Balancer, le nom d’hôte doit être
mywebsite.com - Sous la section des points de terminaison, choisissez les deux pools
- Ignorez les Moniteurs (puisque nous n’avons pas besoin de surveiller l’état du serveur, le site Web principal doit toujours pointer vers
1.1.1.1et le forum vers2.2.2.2), Ignorez le Réglage du trafic (par défaut, il est désactivé) - Sous Règle personnalisée, créez-en une avec la condition de chemin
/forumet pointez vers le point de terminaison du forum
- Enregistrez/Déployez
Notes
- Pour une raison quelconque, copier le modèle app.yml puis reconstruire n’a pas fonctionné pour moi (je faisais probablement quelque chose de mal). Donc, comme solution, j’ai exécuté discourse-setup pour la première fois avec un autre domaine, puis, avec d’autres modifications app.yml ci-dessus, j’ai changé le nom d’hôte et effectué la reconstruction finale.
- Discourse génère 2 certificats de letsencrypt,
cert RSAetcert ECDSA, et letsencrypt a une limite de 5 certificats par domaine exact par semaine, si vous faites une erreur 2 fois de suite, la 3ème tentative n’émettra qu’un seul certificat, et le forum ne fonctionnera pas (vous pouvez vérifier la limite actuelle avec ce script GitHub - sahsanu/lectl: Script to check issued certificates by Let's Encrypt on CTL (Certificate Transparency Log) using https://crt.sh). - CF Load Balancer n’est pas gratuit, cependant compte tenu (à l’heure actuelle) du coût de 5 USD pour 500k requêtes DNS, je pense que cela en vaut la peine, par rapport aux tracas avec nginx etc.

