اختر البروتوكول قبل استئجار الخادم
ذكّر نقاش حديث على Hacker News بحقيقة ينساها المديرون: صعوبة المراسلة الخاصة اجتماعية قبل كل شيء. يُبنى الخادم في مساء واحد، أما إقناع عائلة أو جمعية أو فريق بتثبيت تطبيق آخر فيستغرق أسابيع. ومع ذلك فالبروتوكول هو الذي يحدد ما ستصونه لسنوات، وعدد سجلات DNS والمنافذ والشهادات التي عليك فهمها، وما سيراه مقربوك على هواتفهم. تتقاسم الاستخدام الخاص ثلاث عائلات: Matrix مع Synapse وElement، وXMPP مع Snikket، وchatmail مع تطبيق Delta Chat. وهي لا تحل المشكلة نفسها.
المعايير السبعة الحاسمة
- موارد الخادم — ما تستهلكه الحزمة في وضع الخمول، وما تطلبه حين يكبر المجتمع.
- الصيانة — عدد المكونات الواجب تحديثها، والنسخ الاحتياطية الواجب اختبارها، والحسابات الواجب إدارتها.
- النطاق وDNS وTLS — السجلات المطلوب إنشاؤها، والشهادات، وما يحدث إذا وجب تغيير الاسم.
- المنافذ — ما يجب فتحه، وهل يمكن للـ VPS مشاركة المنفذين 80 و443 مع موقع آخر.
- الاتحاد — التحدث مع أشخاص مستضافين في مكان آخر، أو البقاء ضمن المجموعة.
- التشفير — مطبق افتراضيًا، أو يُفعَّل غرفة بغرفة.
- تطبيقات الجوال والإشعارات — ما يثبته مقربوك، وهل يرن الهاتف والتطبيق مغلق.
Matrix: Synapse وElement، الحزمة المتعددة الاستخدامات
Matrix بروتوكول اتحادي: يتحاور خادمك Synapse مع خوادم Matrix الأخرى، ويتصل المستخدمون عبر Element على الجوال أو سطح المكتب أو المتصفح. وهو الأكثر تنوعًا بين الثلاثة، بغرف عامة وخاصة وفرق وجسور نحو شبكات أخرى. لكن كلفته أعلى. أعطى قياسنا على تثبيت جديد نحو 300 ميغابايت في وضع الخمول للحزمة كاملة (Synapse وPostgreSQL وElement والوكيل العكسي)، ويناسب VPS بذاكرة 2 غيغابايت ومعالجين افتراضيين فريقًا أو جمعية أو عائلة. توصي وثائق Synapse باستخدام PostgreSQL لأي خادم إنتاج، وتحصر SQLite في التجارب، وتنصح بما لا يقل عن 1 غيغابايت من الذاكرة الحرة للانضمام إلى الغرف العامة الكبيرة. على مستوى الشبكة تحتاج إلى وكيل عكسي عبر HTTPS، والمنفذ 8448 للاتحاد (أو تفويضًا إلى 443)، وملف .well-known ليجد التطبيق الخادم. الفخ: اسم الخادم نهائي لأنه مكتوب في كل معرّف مستخدم، وتطلب الوثائق اختياره قبل التثبيت. وللتثبيت خطوة بخطوة، يشرح دليلنا «استضافة Matrix (Synapse) وElement على خادم VPS الخاص بك» كل مرحلة.
Snikket: XMPP مصمم لمجموعة من المقربين
Snikket توزيعة XMPP مصممة للعائلات والأصدقاء والنوادي والمنظمات الصغيرة، بلا رقم هاتف ولا دفتر عناوين لرفعه. أنت تقرر من ينضم بإرسال رابط دعوة: يُنشأ حساب المدير الأول من الخادم بالأمر docker exec snikket create-invite --admin --group default، وتُدار الدعوات اللاحقة من لوحة ويب. المتطلبات الموثقة هي نظام Linux مع Docker (الإصدار 20.10.10 أو أحدث) وإضافة Compose، ونطاق يمكنك إنشاء نطاقات فرعية عليه، وسجل A (وAAAA اختياري) وسجلان CNAME هما groups وshare يشيران إلى النطاق الرئيسي. يجب أن يبقى المنفذ 80 متاحًا لأن Let's Encrypt يتحقق من النطاق عبره. لا تذكر الوثائق حدًا أدنى للذاكرة: بدل اختراع رقم، قِسه أثناء تجربة تجريبية. يتوقع Snikket أن يكون خادم الويب الوحيد على الجهاز. وإذا شارك الـ VPS مع موقع، وجب نقل منفذَي HTTP وHTTPS الخاصين به (SNIKKET_TWEAK_HTTP_PORT وSNIKKET_TWEAK_HTTPS_PORT) وجعل الوكيل يمرر حركة الويب، علمًا أن XMPP وSTUN وTURN لا تمر عبر وكيل HTTP. ويجنبك VPS مخصص هذا العناء.
chatmail وDelta Chat: بريد مشفر افتراضيًا
chatmail ليس بروتوكول مراسلة فورية جديدًا، بل مرحّل بريد إلكتروني مختزل إلى الأساسيات، يستخدمه تطبيق Delta Chat كوسيلة مراسلة. يرفض المرحّل، المبني على Postfix وDovecot وOpenDKIM، الرسائل غير المشفرة، ولا يطلب رقم هاتف ولا بيانات خاصة، ولا يحتفظ بالرسائل إلا بقدر ما يلزم لتسليمها؛ وتُحذف الرسائل القديمة وصناديق البريد غير النشطة بحسب إعداداتك. المتطلبات الموثقة هي خادم Debian 12 وذاكرة 1 غيغابايت ومعالج واحد ونحو 10 غيغابايت تخزين لبضعة آلاف من العناوين النشطة، ونطاق، وسجل A (وAAAA موصى به)، وسجلا CNAME هما www وmta-sts، ومنافذ SMTP وSUBMISSIONS وIMAPS وHTTPS متاحة. يُدار النشر من جهاز Linux أو Unix بالأمر scripts/cmdeploy run، ويتحقق الأمر scripts/cmdeploy dns من السجلات. ولأن الجهاز يشغّل خادم بريد خاصًا به، فإن جهازًا افتراضيًا مخصصًا هو الخيار الحصيف. صُمم Delta Chat للمحادثات والمجموعات بين جهات الاتصال، لا ليحل محل منصة فرق بقنوات وتكاملات.
Matrix وSnikket وchatmail جنبًا إلى جنب
مرّر الجدول أفقيًا
| Matrix (Synapse + Element) | Snikket (XMPP) | chatmail + Delta Chat |
|---|---|---|
| الموارد: نحو 300 ميغابايت في الخمول (قياس ServOrbit)، وVPS بذاكرة 2 غيغابايت ومعالجين افتراضيين | الموارد: لا حد أدنى رقميًا في الوثائق، ويُقاس في تجربة تجريبية | الموارد: ذاكرة 1 غيغابايت ومعالج واحد ونحو 10 غيغابايت لبضعة آلاف من العناوين النشطة (الوثائق) |
| الصيانة: عدة مكونات (Synapse وPostgreSQL وElement والوكيل) وترقيات إصدارات يجب متابعتها | الصيانة: `docker compose pull` ثم `docker compose up -d`، والدعوات تُدار من اللوحة | الصيانة: التحديث بإعادة تشغيل `scripts/cmdeploy run` من جهاز النشر، وتنظيف صناديق البريد غير النشطة قابل للضبط |
| DNS وTLS: نطاق نهائي، وسجل A، وملف `.well-known`، وشهادة يقدمها الوكيل العكسي | DNS وTLS: سجل A وسجلا CNAME هما `groups` و`share`، وLet's Encrypt يديره Snikket مع المنفذ 80 مفتوحًا | DNS وTLS: سجل A، وAAAA موصى به، وسجلا CNAME هما `www` و`mta-sts`، وشهادة صالحة بسلسلة كاملة |
| المنافذ: 443 خلف وكيل، و8448 للاتحاد ما لم يوجد تفويض | المنافذ: TCP 80 و443 و5222 و5269 و5000 و3478 و3479 و5349 و5350، وUDP 49152-65535 للمكالمات | المنافذ: 25 و587 و465 و143 و993 و443 و80، إضافة إلى 3478 عبر UDP للمكالمات |
| الاتحاد: نعم، مع شبكة Matrix كلها | الاتحاد: المنفذ 5269 للحوار بين الخوادم، لكن الاستخدام المقصود يبقى المجموعة المغلقة | الاتحاد: يتبادل المرحّل البريد مع مرحّلات أخرى، وتُحجب الرسائل غير المشفرة |
| التشفير: من طرف إلى طرف، يُفعَّل غرفة بغرفة، ولا رجعة فيه بعد التفعيل | التشفير: TLS نحو الخادم؛ ويُتحقق من التشفير من طرف إلى طرف في وثائق التطبيق قبل الوعد به | التشفير: OpenPGP إلزامي، ولا رسائل غير مشفرة على مرحّل chatmail الافتراضي |
| التطبيقات: Element على الجوال وسطح المكتب والويب، والإشعارات تُختبر على هواتفكم | التطبيقات: تطبيق Snikket (ومنه نسخة iOS) وConversations المتوافق، وإشعارات iOS عبر خدمة Snikket | التطبيقات: Delta Chat على الجوال وسطح المكتب دون عميل ويب، وإشعارات Apple وGoogle دون كشف المحتوى |
من يختار ماذا
عائلة من ثمانية أشخاص تريد أساسًا تبادل الصور وإجراء المكالمات: Snikket أو chatmail، لأن الإدارة تختصر في رابط دعوة. اختر Snikket إن أردت تطبيقًا واحدًا بمجموعات ومشاركة ملفات، وchatmail إن كان المعيار السرية افتراضيًا ودون حسابات تُنشأ. جمعية بغرفة لكل لجنة وضيوف من الخارج وجسور نحو أدوات أخرى: Matrix، أثقل لكنه أكثر تنوعًا. فريق صغير يستبدل Slack: Matrix، أو منصة فرق مثل Mattermost أو Rocket.Chat التي يقارنها مقالنا المخصص. في كل الحالات ليس الخادم ما يفشل، بل التبني. لذا اختر أولًا البروتوكول الذي يعجب تطبيقه أكثر الأشخاص ترددًا في المجموعة، ثم حدد حجم الـ VPS.
القرار في سبع خطوات قبل استئجار الـ VPS
عدّ المستخدمين وصنّفهم
دوّن عدد الأشخاص، وعلى أي هواتف (iPhone أو Android)، وهل سينضم ضيوف من الخارج. المجموعة المغلقة من المقربين تدل على Snikket أو chatmail، والغرف والضيوف يدلان على Matrix.
ثبّت التطبيق قبل الخادم
ثبّت Element وتطبيق Snikket وDelta Chat على هاتفي اثنين من المقربين، من بينهم الأقل ألفة بالتقنية. ردة فعلهما أثقل من أي سطر في الجدول.
ثبّت اسم النطاق
اختر نطاقًا فرعيًا نهائيًا، مثل
chat.your-domain.com. في Matrix يُكتب في كل معرّف ولا يمكن تغييره بعد ذلك. تحقق من أنه يشير إلى الخادم المستقبلي بالأمرdig +short A chat.your-domain.com.تحقق من أن المنافذ حرة
على خادم قائم، يعرض الأمر
ss -tlnp | grep -E ':(25|80|443)\b'ما يشغل هذه المنافذ أصلًا. يريد Snikket وchatmail المنفذين 80 و443 لنفسيهما، أما Matrix فيوضع خلف وكيل عكسي. إن كانت المنافذ مشغولة فخطط لـ VPS مخصص.حدّد حجم الـ VPS
لـ Matrix ابدأ بذاكرة 2 غيغابايت ومعالجين افتراضيين. وفي chatmail تذكر الوثائق 1 غيغابايت ومعالجًا واحدًا. وفي Snikket ابدأ بـ 2 غيغابايت وقس الاستهلاك أثناء التجربة بالأمر
docker stats.عيّن من يتولى الصيانة
اكتب اسم الشخص الذي يطبق التحديثات ويختبر النسخ الاحتياطية. وإن لم يرغب أحد في هذا الدور، تتيح خيار إدارة الـ VPS إسناده إلى مدير.
أجرِ تجربة تجريبية لأسبوعين
شغّل الخادم المختار مع ثلاثة إلى خمسة أشخاص، ثم احسب في النهاية من لا يزال يكتب. في Snikket ينشئ الأمر
docker exec snikket create-invite --admin --group defaultحساب المدير. في chatmail يتحقق الأمرscripts/cmdeploy dnsمن DNS. في Matrix اتبع دليل التثبيت، ثم مرّر الخادم على أداة اختبار الاتحاد في matrix.org.
التبني: المقربون والإشعارات
خادم متقن لا يستخدمه أحد بلا قيمة، والمعيار الحاسم هو ما يراه مقربوك على هواتفهم. على iPhone لا تتيح Apple بديلًا للتسليم الفوري: يفعّل Delta Chat الإشعارات تلقائيًا لملفات chatmail، وتوضح وثائقه أن عنوان IP وبيانات الملف الشخصي والمحتوى لا تُكشف لـ Apple أو Google. وعلى Android تعتمد الإشعارات على خدمة دفع متاحة (FCM أو microG)، وإلا فقد يتأخر التسليم. يذكر Snikket أن محتوى الإشعارات على iOS يُشفَّر بمفتاح يعرفه التطبيق وخادمك فقط. أما مع Matrix فاختبر إشعارات Element على كل طراز هاتف قبل القرار: لا نقدم هنا أي ضمان. وهناك احتكاكان آخران: لا يطلب Snikket وDelta Chat رقم هاتف، وهذا يطمئن بعض المقربين، ولا يملك Delta Chat عميل ويب، وهذا يزعج من يعملون على جهاز مشترك.
التحصين: أغلق التسجيل وافتح ما يلزم فقط
أيًّا كان اختيارك، ثلاث خطوات. أغلق التسجيل المفتوح: enable_registration: false في Synapse، والدعوات وحدها في Snikket، والأمر touch /etc/chatmail-nocreate في chatmail بعد تكوين المجموعة (العناوين القائمة لا تتأثر). وفي جدار حماية الـ VPS افتح منافذ الحزمة المختارة فقط مع SSH، مثل ufw allow 5222/tcp لاتصالات عملاء Snikket. وأخيرًا انسخ احتياطيًا ما لا يمكن إعادة بنائه: مفتاح التوقيع وقاعدة PostgreSQL في Synapse، ومجلدات Snikket، وصناديق بريد مرحّل chatmail.
استكشاف الأخطاء: الأعطال التي تتكرر
الأعراض التالية مأخوذة من صفحات استكشاف الأخطاء الرسمية لكل مشروع. وفي أغلب الحالات يُبدأ بـ DNS والمنافذ قبل المساس بالإعداد.
الأعراض والأسباب المحتملة والحلول
- Snikket: صفحة «Snikket is starting» لا تختفي — غالبًا مشكلة شهادة. تحقق من سجلات DNS الثلاثة، ومن فتح المنفذ 80 عند المضيف وفي
ufw، ثم اقرأ/var/log/letsencrypt/errors.logداخل الحاويةsnikket_certs. تجنب إعادة المحاولة في حلقة: تطبق Let's Encrypt حدودًا صارمة. - Snikket: تظهر كل روابط الدعوة منتهية — تحقق من أن العنوان كامل، ومن أن خدمة أخرى لا تستخدم المنفذ 5280، ومن أن الوكيل العكسي يمرر إلى Snikket.
- Snikket: يبلغ التطبيق أن الخادم غير مسؤول عن النطاق — خادم XMPP آخر يشغل منافذ Snikket، أو بقيت سجلات SRV قديمة من تثبيت سابق. ثم انتظر انتهاء ذاكرات DNS المؤقتة.
- Snikket: تفشل الملفات الكبيرة — وكيل عكسي يحدد حجم الرفع، ويجب أن يقبل 100 ميغابايت على الأقل. وما فوق ذلك يكون النقل مباشرًا من جهاز إلى جهاز بين شخصين متصلين، وهو غير مدعوم من iOS وإليه.
- Matrix:
M_UNKNOWNأو401 Unauthorizedفي الاتحاد — بحسب وثائق Synapse لا تتبع الخوادم المتحدة إعادة التوجيه HTTP 308؛ ويحل إعادة التوجيه 301 المشكلة. ثم اختبر بأداة الاتحاد في matrix.org. - Matrix: لا يستطيع مستخدمو الخوادم الأخرى الانضمام إلى غرفك — المنفذ 8448 غير متاح، أو التفويض غائب، أو الوكيل العكسي مضبوط خطأ. أعد اختبار الاتحاد قبل تغيير أي شيء.
- chatmail: لا تصل الرسائل — يشترط مكوّن التصفية شهادة TLS صالحة بسلسلتها الكاملة. شغّل
scripts/cmdeploy dnsللتحقق من السجلات، ثم تأكد من أن المنافذ 25 و465 و993 متاحة من الخارج. - chatmail: لا يتصل
cmdeployعبر SSH — يجب أن يكون مفتاح جهاز النشر من نوع ed25519 ومحميًا بعبارة مرور ومحمّلًا في ssh-agent، مع وصول SSH إلى المستخدم root في الخادم.
أي طريقة نعتمد
ليس أي من الثلاثة هو الصحيح في ذاته: الصحيح هو الذي سيظل مقربوك يفتحونه بعد ستة أشهر. للمجموعة المغلقة التي تريد أقل قدر من الإدارة انظر إلى Snikket أو chatmail، وللغرف والضيوف والتكاملات انظر إلى Matrix. Matrix (Synapse) هو التطبيق المتاح كقالب VPS في ServOrbit: بيئة جاهزة للاستخدام على VPS مع نطاق يُربط بها. أما Snikket وchatmail فيُنشران على VPS Cloud عادي بصلاحية root وعنوان IPv4 مخصص؛ وتفصّل صفحة VPS Cloud العروض. البرمجيات الثلاث مفتوحة المصدر وتديرها بنفسك: ServOrbit يوفر الخادم لا الأداة.