مراسلة الفرق مفتوحة المصدر على نطاق واسع: تشغيل Mattermost بنفسك

كل بضع سنوات تنظر شركة ما إلى فاتورة Slack، وتجمع التكلفة لكل مستخدم، وتلاحظ أن عقداً كاملاً من المحادثات الداخلية يرقد في قاعدة بيانات مملوكة لغيرها وفي ولاية قضائية أخرى، فتسأل إن كان ثمة طريق آخر. نعم يوجد. Mattermost هو الجواب الأكثر جدية بين الحلول التي تستضيفها بنفسك، وهو كذلك منذ وقت غير قصير.
وهو أيضاً الأداة التي يُساء فهمها أكثر من غيرها قبل النشر، لأن الإصدار المجاني الذي يظن الناس أنهم يحصلون عليه ليس عادةً الإصدار الذي ينتهي بهم الأمر إلى تشغيله. هذا الدليل يتناول ما هو Mattermost فعلاً، وما تتضمنه النسخة المجانية حقاً، والمشكلات التشغيلية الثلاث التي تصيب تقريباً كل من يستضيفه بنفسه للمرة الأولى.
ما هو Mattermost
خادم مكتوب بلغة Go، وقاعدة بيانات PostgreSQL، وعميل ويب بـ React، وتطبيقات أصلية لسطح المكتب والهاتف. قنوات، ومسارات نقاش، ومشاركة ملفات، وبحث، وأوامر الشرطة المائلة، وخطافات ويب واردة وصادرة، وروبوتات، وإطار عمل للإضافات. من استخدم Slack سيصبح منتجاً خلال بعد ظهر واحد، وكذلك الجميع، وهذا يزن أكثر من أي قائمة ميزات حين تطلب من شركة كاملة أن تنتقل.
حول هذه النواة تقف Playbooks لعمل الحوادث والعمليات المبني على قوائم تحقق، وCalls للصوت والفيديو ومشاركة الشاشة. ودليل التكاملات يغطي الأسماء المعتادة: GitLab وGitHub وJira وJenkins وPagerDuty. المنتج قوي فعلاً في مجال ChatOps، ولهذا له هذا العدد من الأنصار بين فرق الهندسة والتشغيل، وبين مؤسسات الدفاع والقطاع العام التي لا تستطيع أصلاً وضع حركتها في خدمة SaaS تجارية.
الحقيقة المعمارية المهمة أن كل ذلك يعمل على بنية تحتية تختارها أنت. المبدأ نفسه في استضافة التحليلات بنفسك عبر Matomo أو أتمتة التسويق عبر Mautic. الرسائل في قاعدة بياناتك، والملفات في تخزينك الكائني، ولا أحد يستطيع تغيير سياسة الاحتفاظ أو السعر دون أن يسألك.
صورة الترخيص، بصراحة
هنا يقع الالتباس، فلنكن مباشرين.
Team Edition هي النسخة مفتوحة المصدر. رخصة MIT، مجانية، بلا سقف لعدد المستخدمين، وهي فعلياً ما يشغّله معظم من يستضيفون بأنفسهم. تحصل على المراسلة والقنوات ومسارات النقاش والبحث والتكاملات وخطافات الويب وإطار الإضافات. ولا تحصل على الدخول الموحّد عبر SAML أو AD/LDAP، ولا على التصدير للامتثال، ولا على البحث المؤسسي، ولا على عنقود عالي التوافر، ولا على حسابات الضيوف.
Entry إصدار تجاري مجاني. يفتح مجموعة الميزات المتقدمة لكنه يضع سقفاً: سجل الرسائل محدود، وعدد تشغيلات الـ playbooks محدود، والدعم من المجتمع فقط، وهو موجّه لفرق دون خمسين شخصاً تقريباً. كوسيلة لتقييم المنتج المدفوع هذا جيد. وكوسيلة لبناء بيت دائم لتاريخ محادثات شركتك هذا سيئ، لأن حدّ السجل يقع تحديداً على الشيء الذي سيهمك في النهاية.
Professional وEnterprise وEnterprise Advanced هي المستويات المدفوعة. Professional يضيف الدخول الموحّد والتحقق متعدد العوامل والصلاحيات المتقدمة. وEnterprise يضيف مزامنة AD/LDAP وأتمتة الامتثال والبحث المؤسسي والتوافر العالي وPlaybooks على نطاق واسع. وEnterprise Advanced يضيف التعامل مع المعلومات المصنّفة وضوابط انعدام الثقة والنشر في شبكات معزولة، وهو المستوى الذي يجلس عليه مستخدمو الدفاع والإدارة العامة. لم تعد Mattermost تنشر سعراً لكل مستخدم، فاحسب حساب محادثة مع فريق المبيعات.
القرار الذي يواجهه معظم الفرق أبسط مما توحي به قائمة المستويات. إن احتجت SAML مقابل مزوّد الهوية لديك فستدفع. وإن أمكنك التعايش مع حسابات محلية أو OAuth من GitLab فإن Team Edition تحمل مؤسسة أكبر مما تتوقع بكثير.
طريقة الإعداد
تركيب صغير
لفريق من بضع عشرات إلى بضع مئات، خادم افتراضي واحد بحجم معقول يكفي فعلاً. إرشادات Mattermost نفسها تضع من مستخدم واحد إلى ألف على vCPU واحد و2 غيغابايت من الذاكرة، وهو تفاؤل على طريقة الحدود الدنيا التي يعلنها الموردون دائماً. امنح الجهاز أربع أنوية و8 غيغابايت ولن تفكر فيه مرة أخرى.
المكدّس هو Mattermost وPostgreSQL ووكيل عكسي ينهي TLS. وTraefik مع Let's Encrypt هو الأقل جهداً:
services:
mattermost:
image: mattermost/mattermost-team-edition:latest
restart: unless-stopped
environment:
- MM_SQLSETTINGS_DRIVERNAME=postgres
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:your_secure_password@db:5432/mattermost?sslmode=disable
- MM_SERVICESETTINGS_SITEURL=https://chat.example.com
volumes:
- mm_data:/mattermost/data
- mm_config:/mattermost/config
depends_on:
- db
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=mmuser
- POSTGRES_PASSWORD=your_secure_password
- POSTGRES_DB=mattermost
volumes:
- db_data:/var/lib/postgresql/data
volumes:
mm_data:
mm_config:
db_data:
اضبط SiteURL بشكل صحيح قبل أن تدعو أحداً. قيمة SiteURL الخاطئة أو الغائبة تكسر إشعارات الدفع، وعمليات استرجاع OAuth، ومعاينات الروابط، بطريقة مزعجة في التشخيص لاحقاً وسهلة التفادي الآن.
ثمة تحفّظ يستحق التكرار لأن المورّد نفسه يقوله: الحاويات مناسبة للتقييم وللتركيبات الإنتاجية الصغيرة، لكن هذا المسار لا يمنحك العنقدة ولا التوافر العالي جاهزين. إن احتجتهما، ثبّت مباشرة على Linux أو استخدم مشغّل Kubernetes.
تركيب إنتاجي
PostgreSQL 14 أو أحدث. دعم MySQL في طريقه إلى الإلغاء ابتداءً من الإصدار 11، فإن كنت تنشئ شيئاً الآن فلا تبدأ من MySQL. وAmazon Aurora PostgreSQL مدعومة وهي الخيار المُدار المعقول على AWS.
ضع الملفات في تخزين كائني متوافق مع S3 من اليوم الأول. نظام الملفات المحلي يعمل وهو الإعداد الافتراضي، وهو أيضاً ما يربط الحالة بخادمك في صمت، ويضخّم نسخك الاحتياطية، ويجعل الترحيل مؤلماً. التحويل لاحقاً يعني نقل ملفات وإعادة كتابة مسارات. والتحويل عند التركيب يعني ضبط حفنة من القيم في الإعدادات.
للتوافر العالي تحتاج مستوى Enterprise: عدة عقد تطبيقية خلف موزّع أحمال، وتخزين كائني مشترك، وقاعدة بيانات بنسخ قراءة. وللبحث على نطاق واسع ستريد Elasticsearch أو OpenSearch، وهما أيضاً ضمن Enterprise. بحث النص الكامل في PostgreSQL يكفي لبضع مئات من الأشخاص وبضعة ملايين من الرسائل، والبحث في اللغات الصينية واليابانية والكورية صار يعمل افتراضياً على PostgreSQL، وهو ما كان سابقاً سبباً حقيقياً لشراء إضافة البحث.
الأمور الثلاثة التي تسير على نحو خاطئ
كل ما سبق موجود في التوثيق. أما ما يلي فهو ما يكتشفه الناس في الإنتاج.
إشعارات الدفع ليست مجانية بالطريقة التي تتوقعها
الدفع على الهاتف لا بد أن يمر عبر شبكتَي Apple وGoogle، ما يعني أن جهة ما يجب أن تحتفظ بشهادات التوقيع. تشغّل Mattermost خدمة Test Push Notification Service التي تعمل فوراً ويُنص صراحة على أنها ليست للإنتاج. أما خدمة Hosted Push Notification Service فهي الإنتاجية وتأتي مع ترخيص مدفوع.
الخيار الثالث تشغيل وكيل دفع خاص بك. الأمر موثّق جيداً وقابل للتنفيذ تماماً، لكنه يعني بناء وتوزيع تطبيق هاتف خاص بك ببيانات اعتماد Firebase وAPNs الخاصة بك، وهذه علاقة مع متاجر التطبيقات وعملية إصدار، لا عمل بعد ظهر واحد.
احسم أياً من الثلاثة قبل النشر على الهواتف، لا بعد أن يسأل أول شخص لماذا لا تصله الرسائل إلا والتطبيق مفتوح. هذه النقطة وحدها تُسقط من عمليات الانتقال إلى Mattermost أكثر مما يسقطه أي سبب آخر.
Calls تحتاج أكثر من منفذ
لـ Calls وضعان. الوضع المدمج يشغّل خدمة الوسائط داخل خادم Mattermost ويُنصح به دون خمسين مستخدماً نشطاً تقريباً. وفوق ذلك ستريد rtcd، وهي خدمة منفصلة تُبعد وسائط المكالمات عن خادمك الرئيسي وتتوسع أفقياً. وrtcd تتطلب Enterprise.
في الحالتين يجب أن يصل العملاء إلى خدمة الوسائط عبر UDP على المنفذ 8443، ويجب أن يكون هذا المنفذ مفتوحاً على الجهاز الذي تعمل عليه خدمة الوسائط. ووكيلك العكسي nginx لن يمرره، لأن nginx ليس أصلاً على مسار UDP. نصف النقاشات من نوع «المكالمات لا تتصل» تعود في النهاية إلى قاعدة جدار ناري لم تُضَف قط.
في المستوى المجاني توقّع مكالمات فردية بحد زمني بدلاً من مكالمات جماعية بلا حدود. وإن كان الفيديو على مستوى الشركة متطلباً، فاحسب تكلفته.
لا بد لأحد أن يشغّله
المقارنة الأمينة للتكلفة ليست ترخيصاً مقابل صفر. إنها ترخيص مقابل بنية تحتية زائداً الشخص الذي يرقّعها. تصدر Mattermost نسخاً بوتيرة متقاربة، وستريد البقاء على أحدثها لأسباب أمنية، والترقيات تحمل معها ترحيلات لقاعدة البيانات يُستحسن تجربتها في مكان غير الإنتاج.
بالنسبة لفريق يشغّل بنيته التحتية أصلاً، هذا عمل هامشي والحساب يميل بوضوح لصالحه. أما شركة من عشرة أشخاص بلا قدرة تشغيلية، فقد تكون فاتورة SaaS أرخص فعلاً من عصاري الثلاثاء الضائعة. كن صادقاً بشأن أي الحالتين أنت.
الانتقال من Slack
لدى Mattermost مسار استيراد من ملفات تصدير Slack، وهو يعمل، مع تحفظات يُستحسن معرفتها مسبقاً. رسائل القنوات العامة والمستخدمون تنتقل جيداً. أما القنوات الخاصة والرسائل المباشرة فتعتمد على ما تسمح خطة Slack لديك بتصديره أساساً. ومسارات النقاش والمرفقات والرموز التعبيرية المخصصة والتكاملات تحتاج عناية، وبعضها يحتاج إعادة بناء.
الأسلوب الناجح: استورد السجل كأرشيف قابل للبحث، وتعامل مع تاريخ التحويل كبداية نظيفة. ومحاولة إعادة إنتاج كل سلوك في Slack بحذافيره هي تحديداً كيف يتحول ترحيل من أسبوعين إلى ترحيل من ربعَي سنة.
شغّل الاثنين بالتوازي أسبوعين، وانقل فريقاً واحداً أولاً، وأعلن تاريخ الإيقاف علناً منذ البداية. ترحيلات أدوات المحادثة تفشل اجتماعياً لا تقنياً.
الزاوية الأوروبية
بالنسبة لشركات الاتحاد الأوروبي المسألة ليست تكلفة فحسب. الاستضافة الذاتية تضع الاتصال الداخلي داخل حدود تتحكم بها أنت، وهذا يغيّر عدة نقاشات دفعة واحدة: تحليل عمليات النقل بموجب اللائحة العامة لحماية البيانات، وتدقيق سلسلة التوريد بموجب NIS2، وأسئلة السيادة التي تظهر بتزايد في المشتريات العامة والتي تشكّل موضوع قانون تطوير السحابة والذكاء الاصطناعي بأكمله.
المحادثة الداخلية واحدة من أكثف تجمعات المواد السرية التي تملكها شركة. فيها تفاصيل الحوادث، وأسماء العملاء، وبيانات اعتماد ما كان ينبغي لأحد أن يلصقها لكن أحدهم فعل، وكل مفاوضة تجارية جارية. وحين يسأل أحدهم أين تقيم هذه البيانات، فإن القدرة على الإجابة بمنطقة ورفّ خوادم بدلاً من قائمة معالجين من الباطن لها قيمتها.
متى لا يستحق العناء
إن كنتم خمسة عشر شخصاً، ومتطلبات الامتثال لديكم خفيفة، ولا أحد يريد أن يتولى خادماً، فخذوا خدمة SaaS. لن يغطي التوفير ما ستدفعونه من انتباه.
وإن كنت تحتاج تكاملاً عميقاً مع منظومة تسكن فيها أصلاً، فانظر جيداً فيما ستخسره. الفرق داخل بيئة Microsoft 365 تحصل مجاناً على أشياء كثيرة سيتعين عليك إعادة بنائها.
وإن كان الدافع نفور شخص واحد عالي الصوت من مورّد بعينه بدلاً من متطلب حقيقي يخص التكلفة أو التحكم أو الولاية القضائية، فسيتعثر الانتقال عند ستين بالمئة من التبني تقريباً، وهو أسوأ نتيجة ممكنة لأداة اتصال.
كيف نساعد
نحن ننشئ ونشغّل بنية تحتية مفتوحة المصدر مستضافة ذاتياً لشركات تعمل في أوروبا، بما في ذلك الأجزاء غير البراقة: وكلاء الدفع، وعمليات الانتقال إلى التخزين الكائني، ومسارات الترقية، وتكامل الهوية الذي يجعل نشر أداة المحادثة يترسخ فعلاً.
إن أردت تركيب Mattermost بحجم مضبوط، أو ترحيلاً من Slack يخطط له من سبق أن فعلها، أو إجابة صادقة عما إذا كانت الاستضافة الذاتية تستحق العناء لفريقك، فاكتب إلى office@c9group.dev. والمزيد عن عملنا في البنية التحتية على صفحة تحسين تكاليف AWS.
وإن كنت تجمع مكدساً كاملاً مستضافاً ذاتياً، فالمنطق نفسه ينطبق على التحليلات وعلى أتمتة التسويق.
نُشر في: ٨ أغسطس ٢٠٢٦ التصنيفات: التعاون، المصادر المفتوحة، الخصوصية