دليل النشر

استضافة ‎Matrix Synapse‎ و‎Element‎ على خادم VPS الخاص بك

انشر على VPS Cloud ←

دليل عملي

الاستضافة الذاتية

استضافة ‎Matrix Synapse‎ و‎Element‎ على خادم VPS الخاص بك

‎Matrix‎ هو بروتوكول المراسلة المتحدة والمشفرة من طرف إلى طرف الأكثر اكتمالاً في البرمجيات مفتوحة المصدر. استضافته على خادم ‎VPS‎ الخاص بك يمنحك نظام مراسلة باسم نطاقك، قادراً على التحدث مع بقية شبكة ‎Matrix‎، ولا يمر فيه أي محتوى أو بيانات وصفية عبر طرف ثالث. هنا نشر ‎Docker‎ كامل — ‎Synapse‎، ‎PostgreSQL‎، ‎Element Web‎ و‎reverse proxy‎ — مع الفخ الذي يجب معرفته قبل البدء: اسم النطاق غير قابل للتغيير.

9 دقائق للقراءةعدد الخطوات: 7
المحتويات· لماذا تستضيف خادم ‎Matrix‎ الخاص بك1/12
  1. 01لماذا تستضيف خادم ‎Matrix‎ الخاص بك
  2. 02ما تكسبه مع خادم ‎Matrix‎ المستضاف ذاتيًا
  3. 03‎Element‎ المستضاف ذاتيًا مقابل ‎app.element.io‎: الفرق الفعلي
  4. 04النقطة التي يجب فهمها قبل التثبيت: اسم النطاق
  5. 05المتطلبات المادية
  6. 06نشر ‎Matrix‎ مع ‎Docker‎ و‎PostgreSQL‎ و‎Element‎
  7. 07إدارة ‎Synapse‎ بعد التثبيت
  8. 08تنظيف السجل والتحكم في مساحة القرص
  9. 09الجسور: ربط ‎Matrix‎ بـ‎Telegram‎ و‎Signal‎ و‎WhatsApp‎
  10. 10‎Matrix / Synapse‎ مقابل بدائل المراسلة المستضافة ذاتيًا
  11. 11أغلق التسجيلات، وابقِها مغلقة
  12. 12الوثائق الرسمية

لماذا تستضيف خادم ‎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‎

  1. اختيار النطاق والإشارة إليه

    حدد النطاق الفرعي النهائي (مثلًا matrix.your-domain.com) وأشر إليه نحو خادم ‎VPS‎ بسجل A. هذا الاسم سيصبح هوية الخادم. أضف نطاقًا فرعيًا ثانيًا لـ‎Element Web‎ إذا أردت استضافته بشكل منفصل (chat.your-domain.com). يجب أن يكون كلا سجلَّي A نشطَين قبل تشغيل الحاوية.

  2. توليد الإعداد ومفتاح التوقيع

    أول تشغيل لصورة ‎Synapse‎ يولّد homeserver.yaml وخاصةً مفتاح توقيع الخادم، الذي يصادق أحداثه أمام الخوادم الأخرى. احتفظ به: فقدانه يعني فقدان هوية الخادم على الشبكة المدمجة. احتفظ أيضًا بـhomeserver.yaml في نظام النسخ الاحتياطي — فهو يحتوي على الأسرار المشتركة بين المكونات.

  3. تحويل قاعدة البيانات إلى ‎PostgreSQL‎

    الصورة تولّد فقط إعداد ‎SQLite‎. أضف ملفًا في conf.d/ يعيد تعريف كتلة database نحو ‎PostgreSQL‎ — ‎Synapse‎ يقرأ عدة --config-path والمفاتيح المتكررة تتجاوز السابقة. أنشئ قاعدة البيانات بترتيب C: يرفض ‎Synapse‎ البدء على قاعدة بترتيب مختلف، وهذا الخيار لا يتغير بعد الإنشاء.

  4. وضع ‎reverse proxy‎ أمام الخادم

    قدّم ‎Element Web‎ في جذر chat.your-domain.com وواجهة برمجة ‎Matrix‎ تحت /_matrix و/_synapse/client على matrix.your-domain.com، خلف شهادة ‎TLS‎ لكل نطاق. استخدم ‎HTTP/1.1‎ مع ‎Synapse‎ (proxy_http_version 1.1): قد تُرسَل ردوده على دفعات (‎chunked‎)، والعملاء يُبقون طلبات طويلة على /sync. زد أيضًا client_max_body_size إلى 50 ميغابايت على الأقل لنقل الملفات.

  5. نشر تفويض ‎.well-known‎

    اكشف /.well-known/matrix/server و/.well-known/matrix/client على نطاقك الجذري. هذا يتيح للخوادم الأخرى والتطبيقات الجوالة إيجاد خادمك دون إعداد يدوي. تحقق بعدها على ‎federationtester.matrix.org‎: التدامج غير المتحقق منه يمكن أن يعطّل الدعوات الخارجية بصمت.

  6. إعداد ‎Element Web‎ على خادمك

    أنشئ config.json يشير default_server_config إلى خادمك. ‎Element‎ يقرأ أيضًا config.<domain>.json أولًا: قدّم كليهما عبر ‎reverse proxy‎. اختبر بفتح الواجهة في تبويب خاص — بدون ملفات تعريف ارتباط أو جلسة — وتحقق من أن شاشة تسجيل الدخول تعرض نطاقك بشكل افتراضي، لا ‎matrix.org‎.

  7. إنشاء أول حساب مشرف

    ‎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/<room_id>) يحذف الأحداث قبل تاريخ معين في غرفة محددة — دون التأثير على الغرف الأخرى، ودون حذف الأحداث التي أرسلها مستخدموك افتراضيًا. أداة synapse_auto_compressor (مشروع ‎rust-synapse-compress-state‎) تضغط بعدها مجموعات state_groups في ‎PostgreSQL‎، ما قد يُقلّص حجم قاعدة البيانات بشكل ملحوظ على خادم نشط منذ عدة أشهر.

فعّل أيضًا gc_thresholds في homeserver.yaml للتحكم في جامع القمامة لـ‎Python‎ الخاص بـ‎Synapse‎: على خادم مدمج نشط، جامع القمامة الافتراضي نادرًا ما يكون مثاليًا للذاكرة المقيمة.

الجسور: ربط ‎Matrix‎ بـ‎Telegram‎ و‎Signal‎ و‎WhatsApp‎

أحد المزايا المميزة لـ‎Matrix‎ هو منظومة الجسور — خدمات تربط خادمك بشبكات أخرى. ‎Matterbridge‎ أو جسور عائلة ‎mautrix‎ تنقل الرسائل بين غرفة ‎Matrix‎ ومجموعة ‎Telegram‎ أو قناة ‎Slack‎ أو محادثة ‎WhatsApp‎.

كل جسر ينشر كخدمة إضافية (حاوية إضافية في compose.yml) ويسجّل نفسه مع ‎Synapse‎ عبر ملف registration.yaml. يتلقى الجسر جزءًا من فضاء المعرفات (@telegram_*:your-domain.com) ويترجم الرسائل في الاتجاهين.

لـ‎Telegram‎، mautrix-telegram. لـ‎Signal‎، mautrix-signal. كلا الجسرين يتطلبان حسابًا على الشبكة المستهدفة. ‎WhatsApp‎ يمر عبر mautrix-whatsapp، و‎Messenger‎ و‎Instagram‎ عبر mautrix-meta: كلاهما يستخدم واجهات برمجية غير رسمية، واشتغالهما يعتمد على قرارات ‎Meta‎ وقد يُعاق.

‎Matrix / Synapse‎ مقابل بدائل المراسلة المستضافة ذاتيًا

مرّر الجدول أفقيًا

المعيار‎Matrix + Synapse‎‎Mattermost‎‎Rocket.Chat‎
التدامج بين الخوادمنعم، أصليجزئي (‎Connected workspaces‎، باقات ‎Enterprise‎)نعم، عبر ‎Matrix‎ (باقة ‎Premium‎)
التشفير من طرف إلى طرفنعم، لكل غرفةغير أصلي (إضافة من طرف ثالث)نعم (الرسائل المباشرة والغرف الخاصة، يُفعَّل يدويًا)
الجسور إلى الشبكات الأخرىنعم (‎Telegram‎، ‎Signal‎، ‎Slack‎…)جزئي (‎Slack‎)جزئي
استهلاك الذاكرة (راحة)~300 ميغابايت (الحزمة الكاملة)لم يُقَس هنالم يُقَس هنا
عميل ويب مستضاف ذاتيًا‎Element Web‎ (مفتوح المصدر)نعم (مدمج)نعم (مدمج)
تطبيقات الجوال‎Element iOS/Android‎أصلي ‎iOS/Android‎أصلي ‎iOS/Android‎

أغلق التسجيلات، وابقِها مغلقة

خادم ‎Matrix‎ بتسجيلات مفتوحة يُكتشف سريعًا ويُستخدم كمرحّل من قِبل أطراف خارجية: حسابات بريد عشوائي، غرف غير مرغوبة، وقاعدة بيانات تنمو دون أن تطلب ذلك. ابقِ enable_registration على false وأنشئ الحسابات يدويًا، أو استخدم المصادقة الخارجية (‎SSO‎، ‎OIDC‎). إذا فتحت التسجيلات، اشترط على الأقل التحقق بالبريد الإلكتروني وفعّل registration_requires_token.

الوثائق الرسمية

للإعداد المتقدم — العمال، الجسور، وحدات المصادقة، تنظيف السجل — ارجع إلى الوثائق الرسمية لـ‎Synapse‎. هذا الدليل يغطي النشر على ‎VPS‎؛ الوثائق الأصلية تبقى المرجع للإعدادات الدقيقة والترقيات الرئيسية.

أطلق خادم ‎Matrix‎ الخاص بك على ‎VPS‎ من ‎ServOrbit‎

‎VPS‎ مع ‎Docker‎ مهيأ مسبقاً، ونطاق مربوط وشهادة ‎TLS‎ مثبتة تلقائياً: تنشر ‎Synapse‎ و‎PostgreSQL‎ و‎Element Web‎ في خطوة واحدة. محادثاتك تبقى معك.