مرحباً، لقد قمت بنشر Discourse على خادمي الخاص، كل شيء يعمل بشكل طبيعي باستثناء اكتشاف عنوان IP الخاص بالمستخدم، لقد قمت حتى بإنشاء برنامج نصي بلغة PHP (خارج حاوية Docker) للحصول على جميع الرؤوس حيث يمكن أن يكون عنوان IP:
التفاصيل:
الخادم لديه لوحة تحكم BrainyCP مثبتة مع Apache و Nginx (حالياً يستخدم الموقع Nginx، والذي يقوم بالوكالة العكسية لحاوية Docker) HTTP_CF_CONNECTING_IP يعطي 127.0.0.1 داخل حاوية Docker، ولكن خارجها لديهم قيم طبيعية
بدون تغيير الرأس باستخدام أوامر مخصصة، يعرض Discourse عنوان IP الخاص بالخادم.
(قريباً سأضيف المزيد من التفاصيل حيث أن نسخة Discourse الخاصة بي تعيد البناء الآن)
تم إعادة بنائه، ولكنه لا يزال يعرض عنوان IP الخاص بالخادم (لقد علقت الأوامر المخصصة
## أي أوامر مخصصة لتشغيلها بعد البناء
run:
- exec: echo "بداية الأوامر المخصصة"
## إذا كنت ترغب في تعيين عنوان البريد الإلكتروني 'من' لتسجيلك الأول، قم بإلغاء التعليق والتغيير:
## بعد الحصول على البريد الإلكتروني الأول للتسجيل، أعد التعليق على السطر. يحتاج فقط إلى التشغيل مرة واحدة.
- exec: rails r "SiteSetting.notification_email='noreply@zeronet.space'"
#- replace:
# filename: /etc/nginx/conf.d/discourse.conf
# from: "types {"
# to: |
# set_real_ip_from 85.25.134.45;
# real_ip_header CF-Connection-IP;
# real_ip_recursive on;
# types {
#- replace:
# filename: /etc/nginx/conf.d/discourse.conf
# from: $proxy_add_x_forwarded_for
# to: $send_http_cf_connection_ip;
# global: true
- exec: echo "نهاية الأوامر المخصصة"
هل أحتاج إلى إلغاء التعليق عليها؟ (أريد أيضًا أن ألاحظ أنها لم تعمل حتى قبل أن أضيف قالب cloudflare إلى app.yml))
لقد أضفت بالفعل cloudflare.template.yml الذي يضيف توجيهات realip، ولكنه لا يزال لا يعمل.
لقد قمت حتى بإزالة الأوامر المخصصة التي تتغير إلى ترويسة مخصصة، والآن يبلغ Discourse عن عنوان IP الخاص بالخادم لجميع المستخدمين بدلاً من localhost.
وأريد أيضًا ملاحظة “مسار” الطلب: User -> Cloudflare -> Server(Nginx -> Docker -> Discourse)
ولاحظ أن عنوان IP للمستخدم مرئي خارج Docker في ترويسة Cloudflare CF-Connecting-IP
لا أعرف الكثير عن كيفية عمل خاصية IP الحقيقي لـ Cloudflare، لكن شكّي هو أن Nginx الخاص بـ Discourse سيحتاج إلى set_real_ip_from ليكون عنوان IP الذي يراه Nginx الخاص بالوكيل الخاص بك. 127.0.0.1؟ عنوان داخلي آخر؟ العنوان العام؟ لست متأكدًا مما سيراه.\n\nبمجرد معرفة هذا العنوان، أعتقد أن ما سأفعله هو ترك قالب Cloudflare موجودًا، ثم إضافة replace جديد لـ set_real_ip_from فقط.\n\nبالإضافة إلى ذلك، سيحتاج Nginx الخاص بالوكيل الخاص بك إلى تكوينه لتمرير ترويسة CF-Connecting-IP إذا لم يكن مكوّنًا بالفعل للقيام بذلك أو لا يقوم بذلك افتراضيًا. لا يمكنني المساعدة حقًا في هذا الجزء.
## هذا هو قالب حاوية Discourse المستقل والمتكامل
##
## بعد إجراء تغييرات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذرًا جدًا عند التحرير!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البيضاء أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف حسب الحاجة
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/cloudflare.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:
- "31080:80" # http
- "31443:443" # https
params:
db_default_text_search_config: "pg_catalog.russian"
## قم بتعيين db_shared_buffers إلى حد أقصى 25٪ من إجمالي الذاكرة.
## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
db_shared_buffers: "4096MB"
## يمكن أن يحسن أداء الفرز، ولكنه يضيف استخدام الذاكرة لكل اتصال
#db_work_mem: "40MB"
## أي مراجعة Git يجب أن تستخدمها هذه الحاوية؟ (الافتراضي: tests-passed)
#version: tests-passed
env:
LC_ALL: ru_RU.UTF-8
LANG: ru_RU.UTF-8
LANGUAGE: ru_RU.UTF-8
DISCOURSE_DEFAULT_LOCALE: ru
## كم عدد طلبات الويب المتزامنة التي يتم دعمها؟ يعتمد على الذاكرة وأنوى وحدة المعالجة المركزية.
## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك تجاوزها
UNICORN_WORKERS: 8
## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
## مطلوب. لن يعمل Discourse مع رقم IP عادي.
DISCOURSE_HOSTNAME: 'zeronet.space'
## قم بإلغاء التعليق إذا كنت تريد بدء تشغيل الحاوية بنفس
## اسم المضيف (-h) المحدد أعلاه (الافتراضي "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: قائمة بالبريد الإلكتروني مفصولة بفواصل سيتم جعلها مسؤولة ومطورة
## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'contact@zeronet.space'
## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
# عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
# تحذير الحرف '#' في كلمة مرور SMTP يمكن أن يسبب مشاكل!
DISCOURSE_SMTP_ADDRESS: smtp.zeronet.space
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: noreply@zeronet.space
DISCOURSE_SMTP_PASSWORD: "xxxxxxx"
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
DISCOURSE_NOTIFICATION_EMAIL: "noreply@zeronet.space"
#DISCOURSE_SMTP_DOMAIN: "zeronet.space"
## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## عنوان CDN http أو https لهذه النسخة من Discourse (تم تكوينه للسحب)
## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## مفتاح MaxMind geolocation IP للبحث عن عنوان IP
## راجع https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## الحاوية 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='noreply@zeronet.space'"
- exec: echo "End of custom commands"