لدينا تثبيت لـ Discourse استمر لسنوات، لكنه حاليًا على أحدث إصدار (2.4.0beta2) باستخدام أحدث صورة Docker، وعنوان IP عام، بدون وكيل أو أي عناصر أخرى أمامه، وشهادات Let’s Encrypt.
في بعض الأحيان تعمل عناوين IP المسجلة عند تسجيل المستخدمين وعناوين IP الأخيرة بشكل مثالي، وفي أحيان أخرى لا تعمل. لا أرى أي نمط أو سبب واضح. على سبيل المثال، إليك مستخدم تم إنشاؤه قبل 7 ساعات، مع عناوين غير منطقية:
وهكذا يستمر الأمر؛ فبعض المستخدمين يبدو كل شيء معهم على ما يرام، بينما لا يكون الأمر كذلك مع آخرين. هل لديكم أي أفكار حول ما يحدث هنا؟
ما يلفت انتباهي الآن عند النظر في الأمر هو أنه قد يكون بسبب أن هؤلاء المستخدمين يأتون عبر IPv6، حيث لم أرَ أبدًا عنوان IPv6 في هذه الحقول. هل لا يفهم Discourse عناوين IPv6؟ هل لا يفهم وكيل Docker المعلومات ذات الصلة أو لا ينقلها؟ أم هناك شيء آخر؟
IPv6 يعمل بكفاءة عالية، ويتم استخدامه مع إعدادات صور Docker الموصى بها باستخدام قوالب الويب وقواعد البيانات. لا يوجد أي شيء آخر أمامه. ما الذي يجب علينا تعديله؟
تجدر الإشارة إلى أن ملف yml الخاص بالحاويات لدينا موجود منذ بضع سنوات، رغم أنه يتضمن أحدث القوالب، ويتم إعادة بناء الصور نفسها بشكل متكرر. هل من الممكن أن يكون قد حدث تغيير ما في هذا الصدد مع مرور الوقت؟
من الصعب القول. لقد قمت للتو بمراجعة آخر 8 مستخدمين جدد تقريبًا الذين سجلوا في talk.commonmark.org، وهو تثبيت قياسي افتراضي للغاية، وجميعهم كان لديهم عناوين IPv4 صالحة لعنوان IP الأخير وعنوان IP للتسجيل (أحيانًا اختلف الاثنان أيضًا).
أعلم أنه إذا وصلت حسابات المستخدمين عبر SSO أو طرق أخرى غير عادية، فقد يؤثر ذلك على عناوين IP المبلغ عنها هناك. هل جميع هؤلاء المستخدمين الذين تشير إليهم هم تسجيلات عادية عبر نافذة تسجيل المستخدم الجديد القياسية في Discourse؟
المشكلة غير موجودة في الاستضافة الرسمية لمنصة Discourse، على الأقل، وهي تدعم بروتوكول IPv6. كما أنني لا أرى أي مشاكل في تثبيت قياسي على خادم استضافة عشوائي. لا أعرف ما الذي يمكنني إضافته غير أنكم لم تجيبوا على سؤالي المهم نسبيًا:
لا أشك في أن الأمر يعمل في استضافتك، لكنك لا تستخدم إعداد “Docker” القياسي الذي يستخدمه معظم المستخدمين، أليس كذلك؟ أعني، أنا متأكد من أنه ممكن أن يعمل بشرط وجود وكيل (proxy) يضبط الرؤوس (headers) بشكل صحيح وما إلى ذلك، لكن السؤال هو فقط ما إذا كان الإعداد الافتراضي يفعل ذلك، وإذا لم يكن كذلك، هل يمكننا جعله يفعل ذلك.
أنا متأكد إلى حد كبير أنك بحاجة إلى إضافة شيء ما إلى ملف app.yml يخبر nginx بتعريف عنوان IPv6 الخاص بك وتحويل عنوان العميل. ومع ذلك، لم أستطع بعد معرفة كيفية القيام بذلك. تحتوي المواضيع المتعلقة بتشغيل وكيل عكسي على أمثلة لـ IPv6 تقدم بعض التلميحات.
هذا الأمر مدرج في قائمتي بالأشياء التي أحتاج إلى حلها، لكن قائمتي طويلة جدًا. لقد انتهيت بإيقاف IPv6، وأعتقد أن السبب هو هذه المشكلة، لكن ربما كان بسبب جهل آخر بـ IPv6.
(جيف، يمكنك الحصول على كتلة IPv6 يتم توجيهها، لكن يجب أن تطلبها ثم تقوم بتكوين مضيفيك لاستخدامها.)
أعتقد أن الوكيل العكسي الخارجي هو المفتاح - لا أعتقد أن هذه المشكلة قابلة للحل على الإطلاق، أو على الأقل ليس بسهولة، من داخل حاوية Docker فقط.
لقد حللتها الآن عن طريق جعل حاوية Discourse تستمع إلى مقبس Unix وتضع أمامها Caddy على نفس الجهاز (خارج Docker). إعداد Caddy تافه، ويشمل Let’s Encrypt، والآن يعمل كما هو متوقع أيضًا مع IPv6.