في أعقاب سؤال من @debryc هنا، نود أن نشارككم ملاحظة موجزة حول بعض الأعمال التي قمنا بها لجعل منتديات Discourse لدينا تتفاعل بسلاسة مع تخزين السحابة (مثيل NextCloud) والدردشة (Mattermost في حالتنا).
نص طويل، لذا دعونا نخفي التفاصيل حتى تضغط على السهم…
النص الكامل الطويل
يجب أن أبدأ بالتأكيد على أنني لست مطوّر هذا النظام — فقد تم إنتاجه بلغة C#/.NET بواسطة عضو آخر في فريق التقنية، لذا لا أستطيع الإجابة على الأسئلة التقنية التفصيلية حوله. أنا فقط أوضّح المشكلة (المشاكل) التي أردنا حلها وما قمنا به.
الخلفية: كنا نستخدم نظامًا متكاملًا (Basecamp) لتقديم المناقشات والدردشة الفورية وتكامل تخزين الملفات. كان هناك العديد من العناصر غير المرضية في هذا النظام، سواء من الناحية الهيكلية أو الأمنية، لذا قررنا نقل المنظمة إلى نظام (أنظمة) مفتوحة المصدر جديدة.
قمنا بالكثير من البحث والتقييم — بعض خياراتنا كانت مدفوعة بالضرورة، والبعض الآخر بالبحث عن أفضل تطابق مع متطلباتنا، والبعض الآخر بالحاجة إلى جعل مسار الانتقال لـ 10 آلاف مستخدم سلسًا قدر الإمكان (يشمل المستخدمون نسبة عالية من غير التقنيين وعددًا كبيرًا من المستخدمين الذين يخشون التكنولوجيا، وكلهم يمتلكون آراءً راسخة خاصة بهم — ليس من السهل إرضاؤهم!)
للوصول إلى جوهر الأمر، قررنا الاعتماد على ثلاثة مكونات منفصلة: Mattermost لتوفير الدردشة الفورية، وDiscourse للمناقشات الأكثر تعمقًا، وNextcloud لتوفير تخزين الملفات الآمن والتحرير التعاوني (بديلاً عن مزيج من تخزين Basecamp الأصلي وGoogle Docs). جميعها مستضافة على خوادمنا المدارة الخاصة.
لذا، احتجنا الآن إلى توفير طريقة لربط تسجيلات الدخول الثلاثة المطلوبة بطريقة سلسة نسبيًا، وإنشاء حسابات المستخدمين تلقائيًا وتعيينهم إلى مجموعات الوصول المناسبة/المنتديات (Discourse)، ومجموعات التخزين المشتركة (Nextcloud)، والفرق والقنوات (Mattermost).
تضمّن المنظمة بضع مئات من المجموعات/الفرق المنفصلة (حسب الموقع والوظيفة)، وقد ينتمي المستخدمون إلى العديد من المجموعات — بعضها مغلق، وبعضها مفتوح للانضمام الحر من قبل أي مستخدم.
كانت المشكلة الأولى هي إنشاء حسابات مستخدمين على الأنظمة الثلاثة، وضمان في البداية أن يكون لديهم نفس اسم المستخدم (للتعرف على بعضهم البعض) ونفس كلمة المرور (لضمان وجود مجموعة واحدة من بيانات الاعتماد لتذكرها/تخزينها، وفي النهاية تسجيل دخول واحد موحد إلى الأنظمة الثلاثة).
كما احتجنا إلى وسيلة لإدارة كيفية تعيين الأشخاص إلى المجموعات الصحيحة عند إنشاء الحساب — لم يكن هناك تعيين جيد بين المجموعات الفعلية والمجموعات عبر الإنترنت في النظام القديم، لذا لم نتمكن من نقله ببساطة.
الحل الذي توصلنا إليه كان موقع ويب منفصل، يُسمى “المركز” (Hub)، يعنى بتتبع حسابات المستخدمين واستخدام واجهات برمجة التطبيقات (APIs) للأنظمة الثلاثة لإنشاء وتحديث تفاصيل المستخدمين.
كما سمح المركز لـ “أبطال التقنية” في كل مجموعة (أو مجموعة من المجموعات) بدعوة أشخاص للانضمام إلى الخدمات الجديدة — مما يضمن وصول الأشخاص المناسبين فقط إلى كل مكان.
لذا، يتلقى المستخدم رسالة بريد إلكتروني دعوة للانضمام إلى الخدمات الجديدة تحتوي على رابط لمرة واحدة إلى المركز، حيث يمكنه إنشاء اسم مستخدم وكلمة مرور. ثم يُستخدم هذا لإنشاء حسابات مستخدمين مقابلة تلقائيًا على الخدمات الثلاثة المنفصلة.
يعرف المركز أيضًا المجموعات/المنتديات والفرق/القنوات ومناطق التخزين التي يجب أن يكون للمستخدم حق الوصول إليها، ويضيفهم في الأماكن ذات الصلة عبر واجهات برمجة التطبيقات.
مع تطوره، تم تطوير المزيد من الميزات في المركز، بحيث يمكن للمستخدم الآن استخدامه للعثور على القنوات والمنتديات وطلب الانضمام إليها، بالإضافة إلى وظائف إدارية أخرى لكل من أبطال التقنية والمستخدمين.
يمكنه الآن أيضًا توفير شكل من أشكال تسجيل الدخول الموحد، بحيث يمكن للمستخدم عند تسجيل الدخول في المركز الدخول إلى إحدى الخدمات الأخرى بنقرة زر واحدة. (شملت بعض الأعمال هنا استبعاد تسجيلات الدخول القياسية من نوع وسائل التواصل الاجتماعي المؤسسية المستخدمة)
لقد نظرنا في طرق مختلفة لدمج الدردشة ومعالجة تخزين الملفات في نظام واحد (تسمح الأنظمة الثلاثة ببعض ذلك)، لكنها دائمًا ما تنطوي على تنازلات ضخمة، وتنتهي بـ “جمل” (حصان صممه لجنة) مثل Basecamp. من الأفضل الالتزام بحل مخصص نقي لكل وظيفة أساسية من الوظائف الأساسية، وإتمامها بشكل جيد.