تثبيت Discourse على الإنترنت المنزلي باستخدام Cloudflare Tunnel

نظرًا لأن Discourse يدعم الآن التشغيل على Raspberry Pi، فإن تشغيل نسخة صغيرة في معمل منزلك سيصبح حالة استخدام شائعة. ومع ذلك، فإن العديد من مزودي خدمة الإنترنت السكنيين يحظرون حركة المرور الواردة إلى المنافذ 80/443 التي يحتاجها Discourse.

بالنسبة لموقع العرض التوضيحي الخاص بنا على https://discourse-on-a-pi.falco.dev/، استخدمنا Cloudflare Tunnel للتغلب على هذا، ويمكنك القيام بذلك أيضًا!

إعداد النفق الخاص بك

أولاً، اتبع الدليل التالي:

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

التغيير الوحيد الذي تحتاجه هو تغيير عنوان URL من url: http://localhost:8000 إلى url: http://localhost:80. اترك النفق قيد التشغيل في الخلفية بالفعل.

تعطيل Rocket Loader

يجب عليك تعطيل Cloudflare Rocket Loader لكي يعمل Discourse بشكل صحيح.

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

تثبيت Discourse

اتبع كيفية تثبيت Discourse في الإنتاج، ولكن اضغط على CTRL + C بعد إنشاء ملف app.yml يعطيك عدًا تنازليًا لمدة 5 ثوانٍ.

الآن قم بتحرير الأسطر القليلة الأولى من الملف ليبدو كالتالي:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

وأضف السطر التالي تحت قسم env::

DISCOURSE_FORCE_HTTPS: true

ثم قم بتشغيل ./launcher rebuild app.

أثناء انتظارك، قم بتثبيت قاعدة صفحات لإعادة التوجيه دائمًا إلى HTTPS كما يلي:

في غضون دقائق قليلة، ستكون نسخة Discourse الجديدة الخاصة بك متاحة على النطاق الذي استخدمته في تكوين النفق/Discourse :tada:.

38 إعجابًا

أعتقد أنه من الأفضل ذكر المنفذ. إذا قرر المستخدم استخدام نفق Argo، فسيحتاج إلى إعداد المنفذ الخاص به ليكون مطابقًا لإعدادات النفق. على سبيل المثال:

-80:80
#-443:443

ثم يحتاجون إلى السماح للنفق بالاستماع
http://localhost:80

ما أستخدمه هو استخدام مقبس Unix للاتصال بها.

5 إعجابات

أليس هذا ما ذكرته هنا:

؟

7 إعجابات

مرحباً رافائيل،

شكراً على البرنامج التعليمي.

لقد اتبعت كل شيء وفقًا لدليلك أعلاه وكل شيء يعمل بشكل جيد، ولكن؛

عند النقر على الرابط في البريد الإلكتروني لتفعيل حسابي، يتم توجيهي مرة أخرى إلى صفحة الويب الصحيحة مع زر تفعيل، ولكن هذا الزر لا يعمل. لقد بحثت عن إرشادات في هذا المنتدى ويبدو أنها مشكلة في مجال النطاق إلى عنوان IP؟

لقد أكدت أن force_https مضبوط على true في التكوين.

هل لديك أي أفكار / هل واجهت هذه المشكلة (لقطة شاشة مرفقة) للزر الذي لا يفعل شيئًا؟

3 إعجابات

حسنًا، لقد تمكنت من إصلاح هذا.

فقط تأكد من تعطيل Rocket Loader :wink:

تحياتي!

6 إعجابات

أخيرًا، تم تثبيت Discourse على Raspberry Pi. لكن لدي مشاكل مع Cloudflare Tunnels.

لا يمكنني الوصول إلى موقع Discourse باستخدام النطاق، هل هناك شيء غريب في تكوين config.yml؟

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3 إعجابات

ما هو خرج أمر النفق؟ يجب أن يكون صريحًا بشأن أي أخطاء ارتكبتها في التكوين.

3 إعجابات

معلومات نفق cloudflared \u003cNAME\u003e output:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF لا يمكن تحديد مسار شهادة الأصل الافتراضية. لا يوجد ملف cert.pem في [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T04:55:47Z ERR تحتاج إلى تحديد مسار شهادة الأصل باستخدام الخيار --origincert، أو تعيين متغير البيئة TUNNEL_ORIGIN_CERT. راجع https://developers.cloudflare.com/argo-tunnel/reference/arguments/ لمزيد من المعلومات. originCertPath=
خطأ في تحليل معرف النفق: خطأ في تحديد موقع شهادة الأصل: لم يحدد العميل مسار شهادة الأصل عند التشغيل من الطرفية
إعجابَين (2)

يبدو أنك أضعت ملف الشهادة؟ إذا كنت تعمل بصلاحيات الجذر (root)، فيجب أن يكون الملف موجودًا تحت

/root/.cloudflared/

وليس في المكان الذي وضعته فيه كما في

إعجابَين (2)

لدي بالفعل ملف cert.pem.

إعجابَين (2)

وهل تحاول تشغيل النفق كمستخدم pi أم كمستخدم الجذر؟

3 إعجابات

أنا أستخدم هذا الأمر كمستخدم pi

cloudflared tunnel run <UUID أو الاسم>

إعجابَين (2)

مرحباً @bekircem،

يبدو أن Cloudflared الخاص بك قد تمكن من بدء اتصال بحافة Cloudflare.

هل قمت بتمكين التوجيه باستخدام CNAME لمعرف Argo Tunnel الخاص بك على Cloudflare؟

تحياتي،

أليكس.

3 إعجابات

مرحباً @Stigin، شكراً على الرد.

نعم، لقد قمت بتمكين التوجيه من سطر الأوامر.

إعجابَين (2)

مثير للاهتمام يا @bekircem - هممم!!

ما هو الخطأ الحالي الذي تحصل عليه عند تصفح عنوان موقعك؟ هل هي مجرد صفحة خطأ عامة من Cloudflare Argo Tunnel؟

هل يمكنك من فضلك أن تعرض لنا الحاويات قيد التشغيل عن طريق تشغيل الأمر: docker ps وأن تعرض لنا الأنفاق قيد التشغيل حاليًا باستخدام cloudflared tunnel list || تأكد من طمس مسار Argo الخاص بك / أي حاويات غير ذات صلة! :wink:

أليكس.

3 إعجابات

ما هو الخطأ الحالي الذي تحصل عليه عند تصفح عنوان موقعك؟ هل هي مجرد صفحة خطأ عامة من Cloudflare Argo Tunnel؟

لا، لا توجد صفحة خطأ من 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

عند استخدام هذا الأمر كمستخدم جذر cloudflared tunnel list

2022-01-24T15:55:03Z INF Cannot determine default origin certificate path. No file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR You need to specify the origin certificate path with --origincert option, or set TUNNEL_ORIGIN_CERT environment variable. See https://developers.cloudflare.com/argo-tunnel/reference/arguments/ for more information. originCertPath=
Error locating origin cert: client didn't specify origincert path when running from terminal

عند استخدام هذا الأمر كمستخدم pi cloudflared tunnel list

You can obtain more detailed information for each tunnel with `cloudflared tunnel info <name/uuid>`
ID                                   NAME      CREATED              CONNECTIONS
371dd57c-**************** ze****2022-01-24T03:35:19Z

هل هذا طبيعي؟

نحتاج إلى استخدام نطاق فرعي لـ DISCOURSE_HOSTNAME في ملف config.yml، صحيح؟

تحديث: لقد قمت بإلغاء تثبيت Cloudflared وأعدت تثبيته باستخدام المستخدم الجذر وهو يعمل الآن. ما زلت لا أفهم أين ذهب خطئي بالضبط في محاولتي السابقة.

إعجابَين (2)

تمكنت بطريقة ما أخيرًا من تشغيل الموقع على Raspberry وهو مباشر.

لا أفهم حقًا كيف. لقد قمت بإزالة Cloudflared وأعدت تثبيته باستخدام المستخدم الجذر. وهو يعمل…

لدي سؤالان،

1- يبدو أن شهادة SSL الخاصة بي لا تعمل بشكل صحيح لذلك لا يمكنني تسجيل الدخول إلى حساب المسؤول الخاص بي على Discourse. (يبدو أنه يعمل في علامة تبويب متخفية. ربما يتعلق الأمر بذاكرة التخزين المؤقت.) هل تستخدم كامل أو كامل (صارم)؟

2- لدي أسئلة حول تشغيل cloudflared كخدمة. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

لقد قمت بتشغيل النفق باستخدام الأمر cloudflared tunnel run <UUID or NAME>. ولكن عندما أغلق نافذة iTerm، هل سيتوقف عن العمل؟

إذا قمت بتسجيل الدخول بالفعل ولديك ملف تكوين في ~/.cloudflared/، فسيتم نسخ هذه الملفات إلى /etc/cloudflared/.

إذا لم يكن لديك ملف تكوين، فستحتاج إلى إنشاء ملف config.yml بالحقول المذكورة أعلاه. يمكنك تمرير ملف مخصص عن طريق تشغيل cloudflared --config CONFIG-FILE service install.

لقد تحققت، ليس لدي ملف تكوين في /etc/cloudflared/. في هذه الحالة، ماذا يجب أن أفعل لتشغيل هذه الخدمة تلقائيًا؟

شكرا لك.

إعجابَين (2)

قد تتلقى الأسئلة الأكثر تحديدًا حول خدمة Cloudflare Tunnel إجابات أفضل على https://community.cloudflare.com/tag/cloudflaretunnel

3 إعجابات

مرحباً @bekircem،

أعتقد أن إعادة تثبيته قد حلت مشكلة عدم عثور cloudflared على الشهادة…

فيما يتعلق بتشغيل Cloudflare كخدمة - ستحتاج إلى نقل ملف التكوين الذي أنشأته عند تشغيل الخدمة يدويًا إلى /etc/cloudflared.

أنا غير متأكد من ربط المواقع الشخصية هنا لذا يرجى إعلامي إذا كنت بحاجة إلى إزالة هذا ولكني غطيت هذا في إحدى مدوناتي تحت القسم المسمى: ‘إعداد وتشغيل Cloudflared كخدمة

أخبرنا كيف سارت الأمور!

أليكس.

4 إعجابات

شكراً على الرد.

تدوينة رائعة، شكراً على المشاركة.

تشغيل Cloudflared كخدمة

sudo cloudflared service install

تم نسخ ملف config.yml تلقائيًا إلى /etc/cloudflared/.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

وهي تعمل بشكل رائع. لم أجرب إعادة التشغيل بعد ولكني آمل أن تعمل.

4 إعجابات