لماذا تستضيف Mattermost ذاتياً على خادم VPS
توفر أدوات المراسلة بنموذج SaaS لكل مستخدم نشط وتحتفظ بسجلّ مراسلاتك على خوادمها. تقلب Mattermost هذا المنطق: استضيف منصة ذاتية الاستضافة على خادم VPS فِرقاً بأكملها دون تكلفة لكل مقعد في نسخة Team، مع سجلّ كامل وتخزين ملفات تتحكّم أنت بها. وبالنسبة إلى وكالة أو شركة خاضعة لقيود السرّية، فإن استضافة المراسلة داخلياً تعني ألّا تمرّ الرسائل ولا الملفات المشتركة ولا البيانات الوصفية عبر طرف ثالث. كما تتكامل Mattermost أصلاً مع منصات Git وأدوات CI/CD وwebhooks واردة/صادرة، ما يجعلها محوراً مركزياً للتواصل بالنسبة إلى الفِرق التقنية.
على خلاف Slack الذي يفرض بنيته التحتية وأسعاره المتدرّجة، تمنحك نسخة Mattermost الذاتية تحكّماً كاملاً في الاحتفاظ بالرسائل وسياسات الأرشفة وسجلات التدقيق والتكاملات. وهذا بالغ الأهمية للفِرق الخاضعة للوائح قطاعية — رعاية صحية، مالية، دفاع — حيث لا يُسمح بخروج البيانات خارج نطاق محدّد.
فوائد ملموسة لـ Mattermost ذاتية الاستضافة
- سجلّ رسائل كامل في نسخة Team — النسخة المجانية Entry تحدّ السجلّ القابل للعرض بعشرة آلاف رسالة منذ الإصدار 11 (انظر القسم المخصّص).
- تخزين الملفات المشتركة على خادم VPS الخاص بك أو على حاوية S3 تتحكّم أنت بها.
- webhooks واردة/صادرة وأوامر slash لربط CI والمراقبة والتنبيهات.
- مصادقة مؤسسية: LDAP/AD وSAML وOAuth بحسب النسخة.
- تطبيقات سطح مكتب وجوّال رسمية تشير إلى نطاقك الخاص.
- امتثال وسيادة على البيانات: لا محادثة خارج بنيتك التحتية.
- مكوّن إضافي Boards مدمج (v10+) لإدارة المشاريع بـ Kanban مباشرةً من المراسلة.
- مكالمات صوتية/مرئية HD عبر مكوّن Calls — مؤتمرات دون أداة خارجية.
المتطلبات العتادية والبرمجية
Mattermost أكثر تطلّباً من منصة Git لأنها تحافظ على اتصالات WebSocket دائمة. احسب خادم VPS بـ معالجَين افتراضيَّين (2 vCPU) و4 غيغابايت من الذاكرة (RAM) لفريق حتى 50 مستخدماً نشطاً؛ اهدف إلى 8 غيغابايت لما فوق ذلك أو إذا فعّلت البحث المتقدّم (Elasticsearch). للمؤسسات التي تضمّ 100 إلى 500 مستخدم، أو إذا فعّلت المكالمات المرئية HD عبر مكوّن Calls، فاحتسب 16 غيغابايت من الذاكرة و4 vCPU. PostgreSQL هي قاعدة البيانات الموصى بها منذ v10 — MySQL لا تزال مدعومة لكن PostgreSQL أفضل أداءً للأحجام الكبيرة. خصّص 30 غيغابايت من SSD كحدّ أدنى، وأكثر إذا خزّنت كثيراً من الملفات محلياً.
على الجانب البرمجي: Docker Engine 24+ وDocker Compose v2، ونطاق فرعي chat.yourdomain.com مع سجل A، وreverse proxy قادر على تمرير اتصالات WebSocket بشكل صحيح (Upgrade/Connection). شهادة TLS صالحة مطلوبة — تطبيقات الجوّال ترفض اتصالات HTTP. افتح أيضاً المنفذ 8443 إذا فعّلت مكالمات الفيديو (مكوّن Calls/RTCD) وأعدّ خادم TURN للاتصالات خلف NAT.
نشر Mattermost مع Docker وSSL
تجهيز خادم VPS
ثبّت Docker وCompose، ثم اجلب المستودع الرسمي
mattermost-dockerأو أنشئ/opt/mattermost. ارفع عند الحاجةvm.max_map_countوحدود الملفات المفتوحة:sysctl -w vm.max_map_count=262144echo 'vm.max_map_count=262144' >> /etc/sysctl.confإعداد PostgreSQL ووحدات التخزين
في ملف
docker-compose.yml، صرّح عن خدمةpostgresبكلمة مرور قوية ووحدات تخزين دائمة لـ/var/lib/postgresql/data. بالنسبة إلى Mattermost، ركّب وحدات تخزين مخصّصة لـconfigوdataوlogsوpluginsللاحتفاظ بكل شيء خارج الحاوية.تشغيل حزمة Mattermost
أدخِل المتغيرَين
MM_SQLSETTINGS_DATASOURCEوMM_SERVICESETTINGS_SITEURL(بصيغة HTTPS)، ثم نفّذdocker compose up -d. تابِعdocker compose logs -fحتى الرسالة التي تشير إلى أن الخادم يستمع على المنفذ 8065.إعداد reverse proxy بـ HTTPS مع WebSocket
مع Nginx، مرّر الطلبات إلى
http://127.0.0.1:8065وأضِف حتماً هذه الترويسات:proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_read_timeout 86400;
bدونها لن تعمل المراسلة الآنية. مع Caddy، يتولّىreverse_proxy localhost:8065أمرَ WebSocket تلقائياً.تفعيل شهادة SSL (Let's Encrypt)
احصل على الشهادة عبر
certbot --nginx -d chat.yourdomain.comأو دَع Caddy يوفّرها وحده. تحقّق من أنSiteURLبصيغةhttps://فعلاً في الإعداد، وإلا فسيرفض عملاء الجوّال الاتصال.إنشاء الفريق وتحسين المنصة
افتح
https://chat.yourdomain.com، وأنشئ حساب مدير النظام وفريقك الأول. عطّل التسجيل المفتوح (السماح بالدعوات البريدية فقط)، وأعدّ SMTP لرسائل الإشعارات البريدية، واقصر إنشاء الفِرق على المدراء.أول تسجيل دخول
افتح الرابط فور انتهاء التثبيت: يعرض Mattermost شاشة إنشاء حساب، وأول حساب يُنشأ على الإطلاق يحصل تلقائياً على دور مدير النظام. أنشئه فوراً.
Mattermost v10: أبرز المستجدات
Mattermost v10 (صدر أواخر 2024، فرع الدعم الممتد v10.x نشط خلال 2025–2026) أدخل تحسينات بارزة للنسخ ذاتية الاستضافة:
Boards مدمج بشكل رسمي (GA) — المكوّن الإضافي Boards (Kanban/لوحة بيانات) أصبح مُحزَّماً مسبقاً ومفعَّلاً بالإعداد الافتراضي. تُدير فِرقك المشاريع مباشرةً من Mattermost دون أداة خارجية.
مكالمات HD (مكوّن Calls v0.x) — مؤتمرات صوتية ومرئية HD مباشرةً في القنوات مع مشاركة الشاشة. يتضمّن تثبيت Docker المكوّن الإضافي؛ يكفي تفعيل MM_PLUGINSETTINGS_ENABLE=true.
SAML AES-256-GCM — تشفير معزَّز لتأكيدات SAML في البيئات المؤسسية.
Connected Workspaces بشكل رسمي (GA) — القنوات المشتركة بين نسخ Mattermost المتعددة تنتقل من التجربة إلى الإتاحة العامة.
إيقاف دعم E10/E20 — إذا كنت تُهاجر من ترخيص قديم، فتحقّق من خطتك قبل الترقية.
التكاملات: webhooks وGitea وJira وZoom
تتميّز Mattermost بوصفها محوراً مركزياً للفِرق التقنية. أبرز التكاملات في النشر ذاتي الاستضافة:
Webhooks واردة — لكل قناة رابط webhook خاص. يُرسل نظام CI طلب POST بصيغة JSON عند نجاح النشر أو فشله؛ يعرضه Mattermost في #ci-alerts. الإعداد من Integrations → Incoming Webhooks.
Webhooks صادرة — يُرسل Mattermost طلب HTTP عند احتواء رسالة على كلمة مفتاحية محدَّدة. مفيد لتشغيل التدفقات البرمجية من المحادثة.
Gitea وGitLab — المكوّن الرسمي لـ GitLab (متوافق مع Gitea عبر webhooks بصيغة JSON) يُخطرك بالدفع وطلبات الدمج والقضايا في قنوات المستودعات.
Jira — يتيح مكوّن Jira إنشاء تذاكر مباشرةً من رسالة Mattermost واستقبال تحديثات الحالة في القنوات.
Zoom — يُنشئ مكوّن Zoom رابط اجتماع بأمر slash واحد /zoom في أي قناة. البديل: استخدم مكوّن Calls الأصيل لاجتماعات كاملة on-premise.
النسخ الاحتياطية: قاعدة البيانات والملفات
تعتمد نسخة Mattermost على مكوّنَين يستلزمان نسخاً احتياطياً منتظماً: قاعدة PostgreSQL ومجلد البيانات.
نسخ احتياطي لـ PostgreSQL باستخدام pg_dump (من المضيف والحاوية تعمل):docker exec mattermost-postgres pg_dump -U mmuser mattermost | gzip > /backups/mm-$(date +%Y%m%d).sql.gz
نسخ احتياطي لمجلد البيانات — ركّب وحدة تخزين mattermost/data خارجياً وأرشفها:tar czf /backups/mm-data-$(date +%Y%m%d).tar.gz /opt/mattermost/data
الاستعادة — لاستعادة البيانات: أوقف الحاويات، واستورد تفريغ SQL في حاوية Postgres جديدة، واستبدل مجلد data، ثم شغّل docker compose up -d.
احرص على اختبار الاستعادة مرةً واحدة على الأقل: نسخة احتياطية غير مُختبَرة ليست نسخة احتياطية حقيقية.
ما تحدّه النسخة المجانية منذ الإصدار 11
ابتداءً من Mattermost 11، تحدّ النسخة المجانية المستضافة ذاتياً — واسمها Entry — السجلّ القابل للعرض بعشرة آلاف رسالة، عبر كل القنوات وعلى مستوى الخادم كله. والنقطة التي كثيراً ما يُساء فهمها: الرسائل الأقدم لا تُحذف. تبقى في قاعدة بياناتك وعلى جهازك، لكنها تتوقف ببساطة عن كونها قابلة للعرض والبحث من داخل التطبيق. وقد قوبل التغيير باستياء في المجتمع، تحديداً لأنه يقيّد بيانات يستضيفها المستخدم بنفسه. وهناك مخرجان: الانتقال إلى نسخة مدفوعة لرفع الحدّ، أو اختيار أداة لا تحدّ نسختها الحرة السجلّ. وإن كان استخدامك مراسلة فريق طويلة الأمد، فقيّس حجمك الشهري قبل الالتزام: عشرة آلاف رسالة تُستهلك بسرعة بين عدة أشخاص. وهناك مسار ثالث كثيراً ما يُغفل: نسخة Team المجانية أيضاً لا تحدّ السجلّ، لكنها لا تدعم الدخول الموحّد (SSO) وتتوقّف عند 250 مستخدماً. فالاختيار إذن بين حدّ على السجلّ (Entry) وحدّ على المستخدمين دون SSO (Team).
Mattermost مقابل Slack مقابل Rocket.Chat
مرّر الجدول أفقيًا
| المعيار | Mattermost (Team) | Slack (مجاني) | Rocket.Chat (CE) |
|---|---|---|---|
| استضافة ذاتية | نعم | لا (SaaS) | نعم |
| سجلّ الرسائل | غير محدود | 90 يوماً | غير محدود |
| التكلفة لكل مستخدم | مجاني حتى 250 مستخدماً | مجاني / 7.25 $/م/شهر Pro | مجاني (مفتوح المصدر) |
| مكالمات مرئية أصيلة | مكوّن Calls (HD) | تكامل Huddles | مكوّن Jitsi |
| Boards/إدارة المشاريع | مكوّن Boards (GA v10) | لا (Canvases) | لا |
| LDAP/SAML | النسخ المدفوعة | لا (SAML Enterprise+) | نعم (مضمّن CE) |
| API وwebhooks | نعم (واردة/صادرة) | نعم | نعم |
| الجوّال (iOS/Android) | تطبيقات رسمية | تطبيقات رسمية | تطبيقات رسمية |
استكشاف الأخطاء وإصلاحها: الأخطاء الشائعة
WebSocket SSL لا يتصل — تحقّق من أن كتلة Nginx تتضمّن proxy_set_header Upgrade $http_upgrade; وproxy_set_header Connection "upgrade";. إذا كان الـ proxy خلف Cloudflare، فعّل وضع WebSocket في لوحة تحكّم Cloudflare (الشبكة → WebSockets).
خطأ الاتصال بقاعدة البيانات — تأكّد أن MM_SQLSETTINGS_DATASOURCE يشير إلى خدمة postgres في Compose (postgres://mmuser:password@db:5432/mattermost). يجب أن تكون حاوية Mattermost على الشبكة ذاتها في Docker مع postgres.
الترقية بين الإصدارات الرئيسية — لا تتخطَّ إصدارات رئيسية. من v9 إلى v11: مرّ بـ v10 أولاً، وانتظر اكتمال ترحيل المخطط (راجع السجلات)، ثم انتقل إلى v11. راجع CHANGELOG.md الرسمي لـ breaking changes قبل كل قفزة.
تطبيقات الجوّال ترفض الاتصال — يجب أن يكون SiteURL بصيغة https:// والشهادة صالحة. تُرفض الشهادات الموقَّعة ذاتياً بواسطة تطبيقات iOS/Android دون إعداد MDM.
بالنسبة إلى الملفات المشتركة، لا تخزّن كل شيء على قرص خادم VPS على المدى الطويل: اضبط Mattermost على وضع تخزين الكائنات المتوافق مع S3. يفصل ذلك وحدة تخزين البيانات عن حجم خادم VPS الخاص بك، ويبسّط النسخ الاحتياطية جذرياً (تؤرشف الحاوية بشكل مستقل) ويسهّل توسّعاً أفقياً محتملاً. فكّر أيضاً في تفعيل الاحتفاظ بالبيانات لتنقية الرسائل القديمة تلقائياً والتحكم في نمو PostgreSQL.
الوثائق الرسمية
للإعداد المتقدّم والخيارات الخاصة بالأداة، ارجع إلى الوثائق الرسمية لـ Mattermost. يغطّي هذا الدليل النشر على خادم VPS؛ وتبقى وثائق الناشر المرجعَ للضبط الدقيق والترقيات الكبرى وحالات الاستخدام الخاصة.