لماذا تستضيف خادم Matrix الخاص بك
أدوات المراسلة الجماعية الكلاسيكية — Slack، Teams، وحتى البدائل المستضافة ذاتياً — تشترك في قيد واحد: لا يمكنك التحدث إلا مع أعضاء نفس الخادم. Matrix يعكس ذلك. إنه بروتوكول مدمج: خادمك يتحدث مع جميع خوادم Matrix الأخرى في العالم، تماماً كما يصل عنوان البريد الإلكتروني إلى أي نطاق آخر. يحتفظ مستخدموك بهوية مرتبطة بك (@alice:your-domain.com) أثناء التحدث مع أشخاص مستضافين في مكان آخر. يُضاف إلى ذلك التشفير من طرف إلى طرف، لكل غرفة: حتى أنت، بوصفك مشرف الخادم، لا تستطيع قراءة الرسائل في غرفة مشفرة. هذا ما يميز Matrix عن المراسلة المستضافة ذاتياً ببساطة — السيادة لا تعتمد على الثقة بالمضيف، بل على التشفير.
ما تكسبه مع خادم Matrix المستضاف ذاتياً
- التوحيد: يصل مستخدموك إلى مستخدمي أي خادم Matrix آخر، بدون حسابات إضافية.
- تشفير من طرف إلى طرف لكل غرفة، مستقل عن الثقة بالمضيف.
- معرفات مرتبطة باسم نطاقك، تصبح عنواناً دائماً.
- Element Web مستضاف ذاتياً: تبقى الواجهة تحت سيطرتك، بدون الاعتماد على app.element.io.
- تطبيقات Element الرسمية على الجوال وسطح المكتب والويب — كلها تشير إلى خادمك.
- السجل والملفات مخزنة على جهازك، بدون حد احتفاظ مفروض.
- جسور إلى شبكات أخرى (Telegram، Signal، IRC، XMPP…) ممكنة.
- لا جمع إعلاني أو تنميط: البيانات الوصفية تبقى ضمن نطاقك.
Element المستضاف ذاتياً مقابل app.element.io: الفرق الفعلي
Element Web هو تطبيق ويب مفتوح المصدر — يمكنك استضافته على نطاقك الخاص بدلاً من استخدام app.element.io. هذا الاختيار كثيراً ما يُغفل، لكنه مهم. عندما يفتح مستخدموك app.element.io، يحمّل متصفحهم JavaScript من خوادم Element HQ: هذا لا يؤثر على سرية الرسائل (يبقى التشفير محلياً)، لكنه يخلق اعتماداً خارجياً.
استضافة Element Web بنفسك — عادةً خلف chat.your-domain.com — تزيل هذا الاعتماد. أنت تتحكم في الإصدار المنشور، ويمكنك تخصيص config.json لتكون الواجهة مهيأة مسبقاً لخادمك، ولا يحتاج مستخدموك سوى تذكر رابط واحد.
ملاحظة مهمة: Element Web يقرأ config.<domain>.json قبل config.json. إذا لم يُقدَّم إعدادك بشكل صحيح، تُعرض الواجهة بشكل مثالي — وتوصّل مستخدميك بالخادم العام بدلاً من خادمك. تحقق من أن الملفين يستجيبان بإعداداتك قبل دعوة المستخدمين.
النقطة التي يجب فهمها قبل التثبيت: اسم النطاق
هذه خصوصية Matrix، ومصدر الخطأ الأكثر كلفةً. server_name الخاص بخادمك — اسم نطاقك — ليس إعداد عرض: إنه مدوّن في هوية كل كائن ينتجه الخادم. كل معرّف مستخدم (@alice:your-domain.com)، وكل معرّف غرفة، وكل حدث موقّع يحتوي عليه. تغييره لاحقاً غير ممكن: يجب البدء من خادم فارغ وإعادة إنشاء الحسابات. اختر النطاق الفرعي النهائي عند التثبيت، واربطه في اللحظة التي تثبت فيها التطبيق — ليس بعدها. على ServOrbit، يرفض التثبيت عمداً أن يبدأ إذا لم يُربط أي نطاق: من الأفضل فشل فوري وواضح من خادم يجب إعادته بعد إنشاء الحسابات.
المتطلبات المادية
المجموعة الكاملة — Synapse، PostgreSQL، Element Web والـreverse proxy — تستهلك حوالي 300 ميغابايت في وضع الراحة، مقاسةً على تثبيت جديد. خادم VPS بذاكرة 2 غيغابايت ومعالجَين افتراضيَّين يكفي لفريق أو جمعية أو عائلة.
يعتمد الاستهلاك أساساً على الغرف العامة التي تنضم إليها: Synapse يحتفظ بسجل وحالة كل غرفة مدمجة، والانضمام إلى بعض الغرف المجتمعية الكبيرة يمكن أن يُنمّي قاعدة البيانات بعدة غيغابايتات. في هذه الحالة، استهدف 4 غيغابايت من الذاكرة وراقب مساحة القرص.
PostgreSQL ضروري — Synapse يقبل SQLite لكنه لا يوصي به لغير خوادم الاختبار. خطط أيضاً لشهادة TLS صالحة: بدون HTTPS، يرفض التدامج والتطبيقات الجوالة الاتصال.
نشر Matrix مع Docker وPostgreSQL وElement
اختيار النطاق والإشارة إليه
حدد النطاق الفرعي النهائي (مثلاً
matrix.your-domain.com) وأشر إليه نحو خادم VPS بسجل A. هذا الاسم سيصبح هوية الخادم. أضف نطاقاً فرعياً ثانياً لـElement Web إذا أردت استضافته بشكل منفصل (chat.your-domain.com). يجب أن يكون كلا سجلَّي A نشطَين قبل تشغيل الحاوية.توليد الإعداد ومفتاح التوقيع
أول تشغيل لصورة Synapse يولّد
homeserver.yamlوخاصةً مفتاح توقيع الخادم، الذي يصادق أحداثه أمام الخوادم الأخرى. احتفظ به: فقدانه يعني فقدان هوية الخادم على الشبكة المدمجة. احتفظ أيضاً بـhomeserver.yamlفي نظام النسخ الاحتياطي — فهو يحتوي على الأسرار المشتركة بين المكونات.تحويل قاعدة البيانات إلى PostgreSQL
الصورة تولّد فقط إعداد SQLite. أضف ملفاً في
conf.d/يعيد تعريف كتلةdatabaseنحو PostgreSQL — Synapse يقرأ عدة--config-pathوالمفاتيح المتكررة تتجاوز السابقة. أنشئ قاعدة البيانات بترتيبC: يرفض Synapse البدء على قاعدة بترتيب مختلف، وهذا الخيار لا يتغير بعد الإنشاء.وضع reverse proxy أمام الخادم
قدّم Element Web في جذر
chat.your-domain.comوواجهة برمجة Matrix تحت/_matrixو/_synapse/clientعلىmatrix.your-domain.com، خلف شهادة TLS لكل نطاق. أعد توجيه رؤوسUpgradeوConnectionبشكل صحيح: Matrix يحافظ على اتصالات طويلة (WebSocket)، وإلا لن يعمل الوقت الفعلي. زد أيضاًclient_max_body_sizeإلى 50 ميغابايت على الأقل لنقل الملفات.نشر تفويض .well-known
اكشف
/.well-known/matrix/serverو/.well-known/matrix/clientعلى نطاقك الجذري. هذا يتيح للخوادم الأخرى والتطبيقات الجوالة إيجاد خادمك دون إعداد يدوي. تحقق بعدها على federationtester.matrix.org: التدامج غير المتحقق منه يمكن أن يعطّل الدعوات الخارجية بصمت.إعداد Element Web على خادمك
أنشئ
config.jsonيشيرdefault_server_configإلى خادمك. Element يقرأ أيضاًconfig.<domain>.jsonأولاً: قدّم كليهما عبر reverse proxy. اختبر بفتح الواجهة في تبويب خاص — بدون ملفات تعريف ارتباط أو جلسة — وتحقق من أن شاشة تسجيل الدخول تعرض نطاقك بشكل افتراضي، لا matrix.org.إنشاء أول حساب مشرف
Synapse لا ينشئ أي حساب تلقائياً ويجب أن تبقى التسجيلات مغلقة. أنشئ حساب المشرف باستخدام
register_new_matrix_user، ثم سجّل الدخول علىhttps://chat.your-domain.com. على ServOrbit، يُنشأ هذا الحسابadminتلقائياً عند أول تشغيل وكلمة المرور المولّدة قابلة للقراءة في منطقة العميل الخاصة بك.
إدارة Synapse بعد التثبيت
Synapse يكشف واجهة برمجة الإدارة على /_synapse/admin/v1 — مخصصة للحسابات المعلّمة بـadmin. عبر هذه الواجهة، يمكنك تعطيل حساب، تنظيف سجل غرفة، إجبار تسجيل الخروج من جميع أجهزة مستخدم، أو الاطلاع على إحصاءات التدامج.
Synapse Admin (واجهة ويب مفتوحة المصدر، قابلة للنشر كحاوية منفصلة) تعتمد على نفس هذه الواجهة البرمجية وتوفر عرضاً رسومياً: قائمة المستخدمين، الغرف، الأجهزة المسجلة وحجم قاعدة البيانات لكل غرفة. مفيد لاكتشاف غرفة مدمجة تُنمّي قاعدة البيانات بعدة غيغابايتات.
للتحديثات، ينشر Synapse صوره على ghcr.io/element-hq/synapse. تحقق من ملاحظات الإصدار قبل كل تحديث رئيسي: بعض ترحيلات قاعدة البيانات لا رجعة فيها، وSynapse يوثّق صراحةً الإصدارات الدنيا المطلوبة للتنقل بين الفروع.
تنظيف السجل والتحكم في مساحة القرص
خادم مدمج يتراكم فيه سجل جميع الغرف المنضم إليها — بما فيها الغرف العامة الكبيرة. بدون تنظيف منتظم، يمكن أن تصل قاعدة بيانات PostgreSQL إلى عشرات الغيغابايتات في غضون أشهر.
Synapse يوفر رافعتين. تنظيف السجل عبر واجهة برمجة الإدارة (POST /_synapse/admin/v1/purge_history) يحذف الأحداث قبل تاريخ معين في غرفة محددة — دون التأثير على الغرف الأخرى أو الرسائل التي لم تقرأها بعد. أمر synapse_auto_compressor يضغط بعدها مجموعات state_groups في PostgreSQL، ما قد يُقلّص حجم قاعدة البيانات إلى النصف على خادم نشط منذ عدة أشهر.
فعّل أيضاً gc_thresholds في homeserver.yaml للتحكم في جامع القمامة لـPython الخاص بـSynapse: على خادم مدمج نشط، جامع القمامة الافتراضي نادراً ما يكون مثالياً للذاكرة المقيمة.
الجسور: ربط Matrix بـTelegram وSignal وWhatsApp
أحد المزايا المميزة لـMatrix هو منظومة الجسور — خدمات تربط خادمك بشبكات أخرى. Matterbridge أو Beeper أو الجسور الرسمية لمشروع Matrix تنقل الرسائل بين غرفة Matrix ومجموعة Telegram أو قناة Slack أو محادثة WhatsApp.
كل جسر ينشر كخدمة إضافية (حاوية إضافية في compose.yml) ويسجّل نفسه مع Synapse عبر ملف registration.yaml. يتلقى الجسر جزءاً من فضاء المعرفات (@telegram_*:your-domain.com) ويترجم الرسائل في الاتجاهين.
لـTelegram، mautrix-telegram هو الجسر الأكثر صيانةً. لـSignal، mautrix-signal. كلا الجسرين يتطلبان حساباً على الشبكة المستهدفة. WhatsApp وMeta Messenger يمران عبر mautrix-meta، الذي يستخدم الواجهة البرمجية غير الرسمية: اشتغاله يعتمد على قرارات Meta وقد يُعاق.
Matrix / Synapse مقابل بدائل المراسلة المستضافة ذاتياً
مرّر الجدول أفقيًا
| المعيار | Matrix + Synapse | Mattermost | Rocket.Chat |
|---|---|---|---|
| التدامج بين الخوادم | نعم، أصلي | لا | لا |
| التشفير من طرف إلى طرف | نعم، لكل غرفة | اختياري (تجريبي) | لا (نص واضح في العبور) |
| الجسور إلى الشبكات الأخرى | نعم (Telegram، Signal، Slack…) | جزئي (Slack) | جزئي |
| استهلاك الذاكرة (راحة) | ~300 ميغابايت (الحزمة الكاملة) | ~400 ميغابايت | ~500 ميغابايت |
| عميل ويب مستضاف ذاتياً | Element Web (مفتوح المصدر) | نعم (مدمج) | نعم (مدمج) |
| تطبيقات الجوال | Element iOS/Android | أصلي iOS/Android | أصلي iOS/Android |
أغلق التسجيلات، وابقِها مغلقة
خادم Matrix بتسجيلات مفتوحة يُكتشف سريعاً ويُستخدم كمرحّل من قِبل أطراف خارجية: حسابات بريد عشوائي، غرف غير مرغوبة، وقاعدة بيانات تنمو دون أن تطلب ذلك. ابقِ enable_registration على false وأنشئ الحسابات يدوياً، أو استخدم المصادقة الخارجية (SSO، OIDC). إذا فتحت التسجيلات، اشترط على الأقل التحقق بالبريد الإلكتروني وفعّل registration_requires_token.
الوثائق الرسمية
للإعداد المتقدم — العمال، الجسور، وحدات المصادقة، تنظيف السجل — ارجع إلى الوثائق الرسمية لـSynapse. هذا الدليل يغطي النشر على VPS؛ الوثائق الأصلية تبقى المرجع للإعدادات الدقيقة والترقيات الرئيسية.