تعيين متغيرات البيئة

:notebook_with_decorative_cover: هذا دليل how-to لإعداد المتغيرات البيئية في تثبيت Discourse مستضاف ذاتيًا.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

تلعب المتغيرات البيئية دورًا حاسمًا في تكوين مثيل Discourse الخاص بك. يمكنها تخزين بيانات حساسة مثل مفاتيح API وكلمات مرور قاعدة البيانات، مما يجعل تثبيتك أكثر أمانًا ومرونة. في Discourse، يتم تعيين المتغيرات البيئية في ملف app.yml ضمن إعداد حاوية Docker الخاصة بك.

إضافة المتغيرات البيئية إلى ملف .yml (YAML) أمر مباشر. إليك مثال أساسي:

# هذا ملف YAML يحتوي على متغيرات بيئية
env:
  VARIABLE_NAME: "Variable Value"
  ANOTHER_VARIABLE: "Another Value"

في سياق حاوية Docker الخاصة بـ Discourse، يتم تخزين المتغيرات البيئية في قسم env من ملف app.yml الخاص بك.

إليك مثال لملف app.yml:
## هذا هو قالب حاوية Docker الشامل والمستقل لـ Discourse
##
## بعد إجراء تغييرات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق على هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد أن تشارك Discourse منفذًا مع خادم ويب آخر مثل Apache أو nginx،
## انظر https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## قم بتعيين db_shared_buffers إلى 25٪ كحد أقصى من الذاكرة الإجمالية.
  ## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
  db_shared_buffers: "256MB"

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## كم عدد طلبات الويب المتزامنة التي يتم دعمها؟ يعتمد على الذاكرة وأنوى وحدة المعالجة المركزية.
  ## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك تجاوزها
  UNICORN_WORKERS: 3

  ## TODO: اسم النطاق الذي ستستجيب له مثيل Discourse هذا
  DISCOURSE_HOSTNAME: 'discourse.example.com'

  ## قم بإلغاء التعليق إذا كنت تريد بدء تشغيل الحاوية بنفس
  ## اسم المضيف (-h option) كما هو محدد أعلاه (الافتراضي "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة بالبريد الإلكتروني مفصولة بفواصل ستصبح مسؤولاً ومطورًا
  ## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'user@example.com'

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  DISCOURSE_SMTP_ADDRESS: smtp.example.com         # (إلزامي)
  DISCOURSE_SMTP_PORT: 587                        # (اختياري)
  DISCOURSE_SMTP_USER_NAME: user@example.com      # (اختياري)
  DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword      # (اختياري)
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي صحيح)

  ## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## عنوان CDN لمثيل Discourse هذا (تم تكوينه للسحب)
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com
## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## المكونات الإضافية هنا
## انظر https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## أي أوامر مخصصة لتشغيلها بعد البناء
run:
  - exec: echo "Beginning of custom commands"
  ## إذا كنت تريد تعيين عنوان البريد الإلكتروني 'من' لتسجيلك الأول، قم بإلغاء التعليق والتغيير:
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## بعد الحصول على البريد الإلكتروني الأول للتسجيل، أعد التعليق على السطر. يحتاج إلى التشغيل مرة واحدة فقط.
  - exec: echo "End of custom commands"

لنبدأ بإضافة المتغيرات البيئية إلى موقعك! :mage:

:information_source: التعليمات التالية مكتوبة لـ تثبيت Discourse القياسي

تسجيل الدخول إلى الخادم الخاص بك

استخدم أداة مثل PuTTY أو الطرفية على أنظمة Unix-like لتسجيل الدخول عبر SSH إلى الخادم الخاص بك.

ssh username@your-server-ip

الانتقال إلى دليل Discourse

بمجرد حصولك على الوصول إلى الخادم الخاص بك، انتقل إلى الدليل الذي يحتوي على إعداد حاوية Docker الخاصة بـ Discourse، وعادة ما يكون موجودًا في /var/discourse.

cd /var/discourse

فتح ملف app.yml

ستحتاج إلى فتح ملف app.yml في محرر نصوص. لهذا المثال، سنستخدم nano.

nano containers/app.yml

إضافة المتغيرات البيئية الخاصة بك

في ملف app.yml، ستجد قسم env. هذا هو المكان الذي يمكنك فيه إضافة المتغيرات البيئية الخاصة بك.

env:
  DISCOURSE_HOSTNAME: 'discourse.example.com'
  DISCOURSE_SMTP_ADDRESS: smtp.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: user@example.com
  DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword

على سبيل المثال، إذا كنت ترغب في تعيين المتغير البيئي DISCOURSE_ENABLE_CORS إلى true لتمكين مشاركة الموارد عبر الأصول (CORS)، فستضيف السطر التالي إلى قسم env:

env:
  DISCOURSE_ENABLE_CORS: "true"
  ...

:person_tipping_hand: المسافة البادئة والتنسيق مهمان هنا، لذا تأكد من الحفاظ على المسافة البادئة الصحيحة (مسافتان) للسطر الجديد.

بمجرد تعديل متغيراتك، احفظ الملف وأغلقه.

إعادة بناء حاوية Discourse

أخيرًا، ستحتاج إلى إعادة بناء حاوية Docker الخاصة بـ Discourse لتطبيق التغييرات. يمكنك القيام بذلك باستخدام الأمر التالي:

./launcher rebuild app

بدلاً من ذلك، لتحديث المتغيرات البيئية لحاوية قيد التشغيل دون إعادة البناء، يمكنك أيضًا استخدام:

./launcher destroy app
./launcher start app

بعد اكتمال عملية إعادة البناء، ستكون المتغيرات البيئية المحدثة متاحة لتطبيق Discourse الخاص بك! :tada:

4 إعجابات

سيكون هذا أكثر فائدة بكثير إذا أوضح كيفية استخدام متغيرات البيئة لتجاوز (وتقديمها من تجربة المستخدم) الإعدادات النظامية أو الإعدادات العامة في ملف المتغيرات العام الافتراضي (وربطه حتى يتمكن الأشخاص من رؤية تلك الإعدادات مثل إعدادات Redis الغامضة)

هذا مثال مربك لأنه لا علاقة له بـ Discourse.
يمكنك ذكر أنه نفس استخدام الأمر المماثل مثل الإعداد في Docker، ربما.
أرى أنك فعلت هذا لأنك قمت بإنشاء https://meta.discourse.org/t/setup-cross-origin-resource-sharing-cors/270819، لذا ربما تستخدم ذلك كمثال.

7 إعجابات

هل هناك مكان يمكن للمرء أن يجد فيه جميع متغيرات البيئة الممكنة المستخدمة في discourse؟

هذا سيكون أكثر فائدة من موضوع يقول أن متغيرات البيئة تذهب إلى app.yml تحت القسم env: :laughing:

أيضًا، لكي “يقوم” التطبيق بتحميل متغيرات البيئة المتغيرة، أنا متأكد من أنه يمكنك فقط restart ولا تحتاج إلى rebuild ولكن يرجى تصحيحي إذا كنت مخطئًا.

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

يمكنك تعيين أي إعداد للموقع باستخدام DISCOURSE_SETTING_NAME. انظر أيضًا إلى الإعدادات الافتراضية ضمن config. discourse/config/discourse_defaults.conf at main · discourse/discourse · GitHub

4 إعجابات

مرحباً @SaraDev، هل يمكنني معرفة كيف تغير متغيرات البيئة هذه سلوك Discourse؟ على سبيل المثال، كل المتغيرات المذكورة في هذا المنشور Available settings for global rate limits and throttling لا يمكنني العثور على أي منها في الكود المصدري لـ Discourse، إذن كيف يتم ربط هذه المتغيرات بـ Discourse؟ شكراً!

أعتقد أنه يمكنك رؤيتها هنا:

3 إعجابات

شكراً جزيلاً @Arkshine.

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

هل هناك طريقة لتعيين متغيرات البيئة في بيئة تطوير غير مستضافة بواسطة دوكر؟ أخطط للاستضافة باستخدام دوكر في النهاية ولكني أقوم بالتطوير محليًا باستخدام هذا الإعداد: Install Discourse on macOS for development
لا يوجد ملف app.yml في هذه الحالة

يمكنك تعيينها في سطر الأوامر قبل بدء تشغيل Rails، ولكن ما الذي تحاول فعله بتلك المتغيرات البيئية؟

أحاول تعيين DISCOURSE_ENABLE_CORS إلى true لـ SSO. هل تمانع في إرسال أمر نموذجي لي؟ أنا جديد في تطوير discourse / rails. أيضًا، ماذا يفعل هذا في النهاية؟ إنشاء سجل في جدول site_settings؟

أحاول إعداد ديسكورس تلقائيًا داخل كوبيرنيتيس. لذلك أخطط لبناء صورة دوكر مخصصة (DinD).
ولكن إذا قمت بتشغيل ./discourse-setup.sh في ملف Dockerfile الخاص بي، فسوف يطلب مني خيارات التكوين - والتي لا يمكن لـ دوكر الإجابة عليها (حيث يجب القيام بذلك تلقائيًا).

أتفهم أنه يمكنني وضع متغيرات البيئة هذه داخل ملف app.yml، ولكن في هذه المرحلة لن يكون هناك أي ملف app.yaml على الإطلاق، حيث لم يتم تشغيل البرنامج النصي ./discourse-setup بعد.

لذا سيكون سؤالي: كيف يمكنني تكوين ديسكورس مسبقًا لأغراضي، بحيث لا يتطلب ./discourse-setup إدخال المستخدم الخاص بي؟

دليل التثبيت discourse/docs/INSTALL-cloud.md at main · discourse/discourse (github.com) لا يذكر أي شيء عن التكوينات المسبقة أو ملفات التكوين على الإطلاق.

شكرا مقدما!

إعجابَين (2)

جرب

./launcher start-cmd app

سيمنحك هذا أمر بدء تشغيل docker المستخدم لتشغيل الحاوية. يجب أن تكون قادرًا على استخدامه لمعرفة كيفية تشغيل الأشياء في k8s.

5 إعجابات

هل هناك أي أماكن شائعة أخرى يمكن أن يوجد بها ملف app.yml، أو هل من الممكن أن هذا الملف يحتاج إلى إنشائه من الصفر؟ لقد “دخلت” إلى حاوية Docker الخاصة بي (docker exec -it discourse_dev /bin/bash)، ولم أتمكن من العثور على أي ملف باسم app.yml.

يجب أن يكون ملف app.yml خارج الحاوية الخاصة بك، بدلاً من أن يكون بداخلها.

إعجابَين (2)