دليل تركيب مفصل + لوحة تحكم | دليل تفصيلي لتثبيت discourse + لوحة التحكم

أنا مبتدئ في بناء المواقع، وبسبب اهتمامي، أرغب في بناء مجتمع للتواصل التقني. أخطط لبناء منصة Discourse ومشاركة هذا الدليل، آمل أن يكون مفيدًا للأصدقاء الذين يحتاجون إلى تثبيت Discourse، وتجنب الأخطاء. هناك عدد قليل جدًا من أدلة Discourse باللغة الصينية، وبعض الأدلة قديمة، واعتمدت على برامج الترجمة، ودرست الأمر لعدة أيام.

ما تحتاجه لإنشاء منصة Discourse خاصة بك:

خادم خفيف من Alibaba Cloud في هونغ كونغ. تنزيل إضافات GitHub من خادم صيني بطيء جدًا، لذلك أوصي باستخدام خادم Alibaba Cloud الخفيف في هونغ كونغ، أو خوادم خفيفة أخرى. الخوادم الخفيفة أرخص ومناسبة للمبتدئين. يجب أن تكون الذاكرة أكبر من 2 جيجابايت، وإلا فلن تتمكن من التثبيت. إذا كنت بحاجة إلى التثبيت على خادم صيني، يمكنك استخدام خادم هونغ كونغ بالدفع حسب الاستخدام، ثم استخدام ميزة إنشاء صورة في المنصة واستنساخها إلى الخادم الصيني، مما يوفر الوقت في تجنب الأخطاء.

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

النظام: Ubuntu 20.04، وهو شائع الاستخدام.

بعد فتح خادم جديد، افتح جميع منافذ جدار الحماية أولاً (بعد الانتهاء من التصحيح، أغلق المنافذ حسب الحاجة، واترك فقط المنافذ المستخدمة، لتجنب هجمات القراصنة). قم بتعيين كلمة مرور المستخدم الجذر في لوحة التحكم، ثم اتصل بالخادم عن بُعد عبر SSH مباشرة من الويب، أو قم بتنزيل برنامج SSH مثل XTerminal.

ثم الصق الأوامر الثلاثة التالية واضغط على Enter للتنفيذ. عند ظهور خيارات، اضغط على yes، لتحديث مصادر النظام وتثبيت برنامج git.

apt update
apt upgrade -y
apt install git

ثم الصق الأوامر الثلاثة التالية واضغط على Enter للتنفيذ، باستخدام صلاحيات المسؤول. هذه الخطوة sudo -s إذا لم تكن حذرًا، ستظهر بعض رسائل الفشل الغامضة أثناء التثبيت، مما يؤدي إلى فشل التثبيت، وذلك بسبب عدم وجود صلاحيات.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

بعد التنزيل، قم بتشغيل معالج التثبيت

./discourse-setup

ثم أدخل اسم النطاق المراد ربطه حسب المطالبات. يستغرق التثبيت الأول وقتًا طويلاً، لذا يُنصح بملء أي شيء عشوائيًا باستثناء اسم النطاق الرئيسي، ثم إعادة البناء بعد نجاح التثبيت. يمكنك استخدام لقطات الشاشة وترجمة صور WeChat إذا لم تفهم شيئًا. يمكن استخدام خدمة البريد الإلكتروني من Alibaba Cloud للبريد الإلكتروني.

بعد ذلك، ستظهر رسالة للاستمرار في التثبيت أو الإلغاء بالضغط على ctrl+c. يُنصح بالاستمرار في التثبيت.

بعد اكتمال التثبيت، قم بزيارة اسم النطاق المرتبط. إذا ظهرت صفحة التسجيل، فهذا يعني أن Discourse قد تم تثبيته بنجاح.

ثم قم بتثبيت لوحة تحكم Linux. هذه الخطوة مخصصة بشكل أساسي لتثبيت برامج مواقع أخرى، ولتسهيل الإدارة المبسطة للمبتدئين. بعد المقارنة، هذه اللوحة أبسط بكثير من Baota، وهي أكثر وضوحًا، ولا تحتوي على الكثير من الإعلانات، وسرعة التثبيت بضع ثوانٍ فقط، ولا تتطلب تجميع البيئة لفترة طويلة مثل Baota.

قم بتنفيذ البرنامج النصي التالي:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

أثناء التثبيت، سيتم اكتشاف أن Docker مثبت بالفعل، ثم ستظهر صفحة تسجيل الدخول إلى الخلفية.

اتبع المطالبات، وابحث عن الخلفية وقم بتسجيل الدخول إليها. في إدارة الحاويات، يمكنك رؤية التطبيق، وهو Discourse، ويمكنك تشغيله أو إيقافه هنا.

ثم ادخل إلى الملف، وقم بتحرير app.yml. الأجزاء الرئيسية التي تحتاج إلى تعديل تم تعليقها باللغة الصينية.

## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Uncomment the next line to enable the IPv6 listener
  #- "templates/web.ipv6.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"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Set db_shared_buffers to a max of 25% of the total memory.
  ## will be set automatically by bootstrap based on detected RAM, or you can override
  db_shared_buffers: "128MB"
  ## تعديل الحد الأقصى لحجم تحميل المرفقات
  upload_size: 300m
  ## can improve sorting performance, but adds memory usage per-connection
  #db_work_mem: "40MB"

  ## Which Git revision should this container use? (default: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: zh_CN

  ## How many concurrent web requests are supported? Depends on memory and CPU cores.
  ## will be set automatically by bootstrap based on detected CPUs, or you can override
  UNICORN_WORKERS: 2

  ## TODO: The domain name this Discourse instance will respond to
  ## Required. Discourse will not work with a bare IP number.
  ## تعديل اسم النطاق الرئيسي
  DISCOURSE_HOSTNAME: bbs.izdh.net

  ## Uncomment if you want the container to be started with the same
  ## hostname (-h option) as specified above (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: List of comma delimited emails that will be made admin and developer
  ## on initial signup example 'user1@example.com,user2@example.com'
  ## تعديل البريد الإلكتروني للمسؤول
  DISCOURSE_DEVELOPER_EMAILS: 'xxxx@gmail.com'

  ## TODO: The SMTP mail server used to validate new accounts and send notifications
  # SMTP ADDRESS, username, and password are required
  # WARNING the char '#' in SMTP password can cause problems!
  ## تعديل خادم البريد الإلكتروني المرسل
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## تعديل منفذ البريد الإلكتروني المرسل
  DISCOURSE_SMTP_PORT: 80
  ## تعديل حساب البريد الإلكتروني المرسل التلقائي
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## تعديل كلمة مرور البريد الإلكتروني المرسل
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## تعديل حساب البريد الإلكتروني المرسل التلقائي
  DISCOURSE_NOTIFICATION_EMAIL: xxxx@xxx.net
  DISCOURSE_SMTP_ENABLE_START_TLS: false
  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## The http or https CDN address for this Discourse instance (configured to pull)
  ## see https://meta.discourse.org/t/14857 for details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## The maxmind geolocation IP address key for IP address lookup
  ## see https://meta.discourse.org/t/-/137387/23 for details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
## تثبيت 2 إضافات
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved	 
          - git clone https://github.com/discourse/discourse-reactions

## Any custom commands to run after building
run:
  - exec: echo "Beginning of custom commands"
  ## If you want to set the 'From' email address for your first registration, uncomment and change:
  ## After getting the first signup email, re-comment the line. It only needs to run once.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

بعد تعديل الملف وحفظه، عد إلى الطرفية، واستخدم الأمر أو أوقف الحاوية من الخلفية، ثم أعد بنائها. ومع ذلك، يبدو أنه إذا لم تقم بتثبيت هذه اللوحة، فلا داعي لإيقاف الحاوية. إذا قمت بإعادة البناء دون إيقاف الحاوية بعد تثبيت هذه اللوحة، فسيحدث خطأ.

./launcher stop app
./launcher bootstrap app`

انتظر حتى تكتمل إعادة البناء، وقم بتنفيذ أمر بدء تشغيل الحاوية.

./launcher start app

عند الدخول إلى Discourse، سيُطلب منك إرسال بريد إلكتروني للتفعيل. إذا لم تستلمه، يمكنك استخدام الأمر التالي لإنشاء حساب مسؤول وتجاوز هذه الخطوة مباشرة. ثم قم بتعيين اللغة إلى الصينية في الإعدادات على اليسار. يوجد أيضًا مكان لاختبار إرسال البريد الإلكتروني، وسيظهر سبب الخطأ. يمكنك المحاولة عدة مرات حتى تنجح.

./launcher enter app
rake admin:create

إذا كنت بحاجة إلى إنشاء مواقع ويب أخرى، فارجع مباشرة إلى الدليل الرسمي. الأمر بسيط جدًا ولن أقوم بشرحه بالتفصيل. يمكنك أيضًا إنشاء بيئة جديدة في الموقع، ثم تغيير أذونات الموقع إلى 777، لتتمكن من تثبيت برامج مختلفة.

المشكلة الرئيسية التي تم حلها هي أنه يمكنك تشغيل عدة مواقع ويب على خادم واحد، مما يوفر تكاليف شراء الخوادم، وهو أكثر ملاءمة للمبتدئين.

لاحقًا، اكتشفت مشكلة عند اختبار إرسال البريد الإلكتروني:

هذه الإعدادات للحاوية، وتعديلها في app.yml، وإعادة البناء لا يبدو أنها تعمل. يجب تعديلها في متغيرات بيئة الحاوية، ولكنها تستغرق 5-6 ثوانٍ فقط لتصبح سارية المفعول. لا يزال غير واضح ما إذا كان ذلك يؤثر على تثبيت الإضافات.

يبدو أن التعايش مع مواقع الويب الأخرى يتطلب إنشاء وكيل عكسي أولاً، ثم تغيير منفذ الحاوية الافتراضي 443 إلى 10443، ثم تكوين الشهادة، لتتمكن من الوصول إليها بشكل طبيعي.

وكيل عكسي

تكوين الشهادة

إعجابَين (2)

في الواقع، يمكن استنساخ discourse_docker إلى أي مجلد، وسيتم تثبيته تلقائيًا في /var/discourse…

In truth, the location to which one clones the discourse_docker repository is immaterial, as it will invariably be installed automatically to the /var/discourse directory…

نظريًا، هذا غير مرجح. الإجراء الصحيح هو تعديل ملف app.yml ثم إعادة بناء التطبيق.

In theory, it seems rather improbable. The proper procedure would be to modify the app.yml file and subsequently rebuild the application.

إعجاب واحد (1)

:sweat_smile: لكن تعديل ملف التكوين لم يكن فعالاً، حيث لم يسري إعادة البناء. ومع ذلك، فإن تغيير متغيرات البيئة في الحاوية نجح بشكل رائع في ثوانٍ معدودة، مما جنبني عناء إعادة البناء. يبقى تأثير ذلك على الإضافات غير مؤكد في الوقت الحالي.

في السابق، أهملت إدخال ‘sudo -s’، مما أدى إلى وابل من رسائل الخطأ. كنت مرتبكًا تمامًا بشأن مصدر المشكلة.

يا صاح، هل يمكنك أن تخبرني كيف يمكن لاسم مستخدم صيني استخدام واجهة برمجة التطبيقات (API)؟ الرأس، كما تعلم، لا يجب أن يحتوي على أحرف صينية.

حسنًا، هل هذه هي المشكلة؟ قم بلصق السجلات.

أوه، أقول، هل هذه حقًا هي المشكلة؟ ربما يمكنك مشاركة إدخالات السجل معي.

قال الأجنبي إنه ممكن، لكن مهما حاولت، لم أستطع فعل ذلك… :sweat_smile:

إذا كان الأمر ممكناً، ربما يمكننا تجربة هذا. الله وحده يعلم ما هو الترميز الذي استخدمه طلبك.

إعجاب واحد (1)

من المدهش العثور على منشور باللغة الصينية في هذا المنتدى! :sob:

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

إعجاب واحد (1)

:sweat_smile: أنا مبتدئ أيضًا، وأعتقد أن المحتوى هو الأساس، والتكنولوجيا تأتي في المرتبة الثانية. حاليًا، أنا في حيرة من أمري بشأن كيفية استخدام Qiniu Cloud لتخزين المحتوى، ولست متأكدًا أيضًا من أفضل الطرق لجذب الزيارات إلى منصتي.

لاحقًا، تم اكتشاف خلل. إعداد ‘upload_size: 300m’ لم يكن فعالاً في تنظيم أبعاد المرفقات. ظل السبب الجذري غير واضح، مما دفعني إلى التخلي عن تثبيت لوحة التحكم تمامًا.

أنا أستخدم Amazon S3 لتخزين احتياجاتي.

ومع ذلك، تجدر الإشارة إلى أن Alibaba OSS أصبح متوافقًا الآن مع S3. قد تفكر في تجربته.

بالفعل، بمجرد إنشاء البنية التحتية، يتحول التركيز إلى ملئها بالمحتوى.

يبدو أنه يجب تعديله وفقًا للطريقة التي اقترحها.

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

@Lhc_fl @zengyunsi هل هناك طريقة لتطبيق حماية حقل اسم المستخدم في المنتدى؟ تتضمن الإعدادات المخصصة فقط تصفية الكلمات الحساسة والحقول المسموح بها للمستخدمين.

دعم أسماء المستخدمين الصينية Unicode: Discourse 支持中文用户名 - Discourse - iSharkFly

دعم أسماء المستخدمين الصينية Unicode: Discourse يستوعب أسماء المستخدمين الصينية - Discourse - iSharkFly

ولكن، ماذا يعني حماية حقل اسم المستخدم، وهل يجب مراجعة تعديلات اسم المستخدم؟

إذا كان الأمر كذلك، فإن Discourse لا يمتلك وظيفة أصلية لذلك. أقترح التفكير في تطوير إضافة مخصصة لتلبية هذا المطلب.

بدلاً من ذلك، قد تفكر في إجراء مراجعات دورية لجميع أسماء المستخدمين عبر المنصة لتحديد أي مشكلات محتملة.

@go_ahead علاوة على ذلك، أوصي بطرح سؤالك باللغة الإنجليزية أو مزيج من الإنجليزية والصينية في موضوع منفصل. هذا النهج مفضل، حيث تخضع المناقشات غير ذات الصلة في قسم meta عادةً لفصل المواضيع.

قد يكون استخدام اللغة الصينية حصريًا صعبًا على المشرفين الذين لا يتحدثون الصينية، حيث قد يواجهون صعوبة في فهم موضوع مناقشتنا.

يبدو أنني عثرت على هذه الميزة؛ أعتقد أن هذه هي.

إعجاب واحد (1)

للأسف، فإن إتقاني للغة الإنجليزية ضعيف للغاية، وأفتقر إلى الخبرة في التواصل معهم. سأحرص على الانتباه لهذه المسألة في المستقبل. أنا ممتن جدًا لإرشاداتكم!

وفقًا لفهمي، يقوم المشرفون عادةً بتصنيف الموضوعات التي تحتوي على محتوى صيني تحت وسم “chinese-translation”.

بشكل عام، لا تمثل المشكلة أهمية كبيرة، ويمكن أيضًا تقديم ملخص باللغة الإنجليزية أسفل منشورك.

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

إعجاب واحد (1)

🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 هذا المحتوى لا يزال صالحًا للاستخدام.

لكننا نستخدم خوادم فعلية، بدءًا من حاويات Docker، لذلك قد لا نستخدم تكوينات لوحة التحكم.

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

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

:sweat_smile: يقول إن واجهة برمجة التطبيقات لا تدعم الإدخال باللغة الصينية.

يبدو أن المشكلة قد تكمن في هذه اللوحة تحديدًا… ربما من الأفضل العودة إلى الطريقة الأصلية وإجراء تثبيت نظيف. أنا أميل إلى استخدام Qiniu Cloud لهذا الغرض.