مثال توضيحي: تخيل مجموعة صغيرة من المتطوعين ترغب في امتلاك خادم Matrix خاص بها على عنوان IP محدد chat.example.com. هذا إعداد افتراضي، وليس تقريرًا عن خادم تم اختباره. يمكن تطبيق الخطوات نفسها على نطاق حقيقي، ولكن اختر اسم خادم Matrix بعناية: يستخدمه Synapse في معرّفات المستخدمين، ولا يمكن تغييره لاحقًا.
يشرح هذا الدليل كيفية إنشاء خدمة Synapse وقاعدة بيانات PostgreSQL باستخدام Docker Compose. تبدأ صورة Docker الرسمية لـ Synapse بقاعدة بيانات SQLite افتراضيًا، وهو أمر مناسب للتجربة المؤقتة؛ بينما توصي وثائق Docker الخاصة بـ Synapse باستخدام PostgreSQL في بيئات الإنتاج. لذلك، يقوم هذا المثال بإنشاء إعدادات Synapse أولًا، ثم يُغيّر إعدادات قاعدة البيانات إلى PostgreSQL، ثم يُشغّل كلا الحاويتين. الصورة الرسمية هي [اسم الصورة] ghcr.io/element-hq/synapse. تمت مراجعة التعليمات وتفاصيل الصورة مع الوثائق الرسمية الحالية بتاريخ 6 أكتوبر 2026؛ قد تتغير علامات الصورة وإصدارات البرامج المدعومة، لذا يُرجى مراجعة الوثائق المرفقة قبل أي عملية نشر طويلة الأمد.
ما تحتاجه قبل التثبيت
- خادم لينكس أو أي مضيف آخر يدعم Docker مع تثبيت Docker Engine ومكوّن Docker Compose الإضافي. تأكد من توفر Compose باستخدام الأمر المناسب
docker compose version. اتبع تعليمات التثبيت الرسمية من Docker لنظام التشغيل الخاص بك.
- نطاق أو نطاق فرعي يشير إلى الخادم. في هذا المثال،
chat.example.comهو اسم خادم Synapse، لذا ستكون معرّفات المستخدمين المحليين على النحو التالي @alex:chat.example.com: . استبدله بنطاق تتحكم به قبل إنشاء التكوين.
- يُستخدم خادم وكيل عكسي أو أي طريقة أخرى لإنهاء بروتوكول TLS للاستخدام العام.
8008لا يُعد مُستمع HTTP الافتراضي لـ Synapse على المنفذ نقطة نهاية HTTPS مُتاحة على الإنترنت. يربط مثال Compose هذا ذلك المنفذ بواجهة الاسترجاع الخاصة بالمضيف، بحيث يمكن لخادم وكيل عكسي على نفس الجهاز الوصول إليه.
ليس بالضرورة أن يكون الاسم هو SYNAPSE_SERVER_NAMEعنوان URL لكل اتصال عميل. إذا كنت ترغب في استخدام معرّفات أقصر، مثل " @alex:example.comأثناء خدمة العملاء من" chat.example.com، فإن ذلك يتطلب تحديد نطاق وتكوين اكتشاف مُسبقين. حدد هذا قبل إنشاء الحسابات.
1. أنشئ دليل عمل وكلمة مرور لقاعدة البيانات
على الخادم، أنشئ مجلدًا لمشروع Compose وملفات Synapse الدائمة:
mkdir -p ~/matrix-synapse/data
cd ~/matrix-synapse
أنشئ ملفًا محليًا .envيمكن لـ Docker Compose قراءته. أنشئ كلمة مرور عشوائية طويلة باستخدام مدير كلمات مرور أو مولد كلمات مرور آمن محلي، وضعها بعد POSTGRES_PASSWORD=. استخدم الأحرف والأرقام في هذا المثال لتجنب مشاكل الاقتباس في YAML لاحقًا. لا ترفع هذا الملف إلى مستودع عام، وقيّد صلاحياته.
umask 077
nano .env
يجب أن يحتوي الملف على سطر واحد، على سبيل المثال POSTGRES_PASSWORD=replace-with-a-long-random-value. النص هنا هو نص مؤقت، وليس كلمة مرور قابلة لإعادة الاستخدام. احتفظ بكلمة المرور لاستخدامها في إعدادات قاعدة بيانات Synapse في الخطوة 3.
2. حدد خدمات Synapse و PostgreSQL
أنشئ compose.yamlفي دليل المشروع:
services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: synapse
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
POSTGRES_DB: synapse
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U synapse -d synapse"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
synapse:
image: ghcr.io/element-hq/synapse:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
SYNAPSE_SERVER_NAME: chat.example.com
SYNAPSE_REPORT_STATS: "no"
volumes:
- ./data:/data
ports:
- "127.0.0.1:8008:8008"
volumes:
postgres_data:
استبدل chat.example.comاسم الخادم النهائي الذي اخترته. يتيح فحص سلامة PostgreSQL لـ Compose الانتظار حتى تُبلغ قاعدة البيانات عن جاهزيتها قبل بدء تشغيل Synapse. ./dataيبقى كل من وحدة تخزين قاعدة البيانات المُسماة والدليل المُثبَّت على المضيف بعد استبدال الحاوية؛ فإزالة الحاويات وحدها لا تمحوهما. تجنّب حذف docker compose down -vوحدة تخزين قاعدة البيانات إلا إذا كنت ترغب في حذفها عمدًا.
يُستخدم هذا المثال :latestلتسهيل عملية السحب الأولى. بالنسبة للخادم المُدار، حدد وسجل علامة إصدار Synapse أو ملخص الصورة، ثم قم بتحديثها من خلال عملية ترقية مُخططة بعد مراجعة ملاحظات الإصدار. لا تفترض أن latestالعلامة القابلة للتغيير ستحتفظ بنفس الإصدار.
3. قم بإنشاء إعدادات Synapse وقم بتوجيهها إلى PostgreSQL
قم بتشغيل الصورة الرسمية مرة واحدة في وضع إنشاء التكوين. ولأن Compose يتم تثبيته ./dataفي هذا الموقع /data، فإن التكوين المُنشأ ومفتاح التوقيع يبقيان على المضيف.
docker compose run --rm synapse generate
يستخدم هذا الأمر اسم الخادم وخيار الإحصائيات المجهولة من بيئة Compose. كما يقوم Synapse بإنشاء مفتاح توقيع؛ احتفظ به مع دليل البيانات وقم بتضمينه في النسخ الاحتياطية المحمية. لا تقم بإعادة إنشائه أو حذفه أثناء تحديث الحاوية العادي.
افتح القسم data/homeserver.yamlالمُنشأ واستبدله database:بالإعدادات التالية. استخدم كلمة المرور الأصلية بدلاً .envمن الكلمة الافتراضية:
database:
name: psycopg2
args:
user: synapse
password: 'replace-with-the-same-random-value'
dbname: synapse
host: postgres
port: 5432
cp_min: 5
cp_max: 10
حافظ على مسافة بادئة ملف YAML المحيطة، وتأكد من وجود database:قسم نشط واحد فقط. اسم المضيف postgresهو اسم خدمة Compose، والذي يمكن للحاويات حله على شبكتها الافتراضية المشتركة. يستخدم التكوين اسم محرك PostgreSQL الموثق من Synapse، psycopg2وأسماء وسيطات قاعدة البيانات بما في ذلك dbname.
في هذا المثال البسيط، تظهر كلمة مرور قاعدة البيانات في إعدادات Synapse بالإضافة إلى .envالملف المحمي. تعامل مع كلا الملفين كبيانات سرية، وقيد الوصول إلى المضيف، واستخدم أسلوبًا مخصصًا لإدارة البيانات السرية إذا كانت بيئة النشر لديك تتطلب ذلك. لا تقم بلصق كلمة المرور الحقيقية في السجلات أو لقطات الشاشة أو طلبات الدعم.
4. ابدأ تشغيل Synapse باستخدام Docker Compose
ابدأ تشغيل المكدس في الخلفية:
docker compose up -d
تحقق من حالة الخدمة واقرأ سجلات بدء التشغيل:
docker compose ps
docker compose logs --tail=100 synapse
انتظر حتى يُكمل Synapse إعداد قاعدة البيانات عند بدء التشغيل لأول مرة. تشغيل الحاوية يعني فقط أن العملية نشطة؛ لذا، تفحّص السجلات بحثًا عن أخطاء في التكوين أو قاعدة البيانات أو الأذونات قبل المتابعة. لمراقبة السجلات فور وصولها، استخدم الأمر docker compose logs -f synapseواضغط Ctrl+Cلإيقاف متابعتها دون إيقاف الحاوية.
5. تحقق من واجهة برمجة التطبيقات المحلية وقم بتكوين الوصول العام
من مضيف Docker، اطلب نقطة نهاية إصدارات واجهة برمجة تطبيقات عميل Synapse:
curl -fsS http://127.0.0.1:8008/_matrix/client/versions
تُعدّ الاستجابة الناجحة عبارة عن بيانات JSON تصف إصدارات واجهة برمجة تطبيقات عميل Matrix المدعومة. وهذا يؤكد أن مستمع HTTP يستجيب محليًا؛ ولكنه لا يثبت أن نظام أسماء النطاقات (DNS) أو بروتوكول HTTPS أو الاتحاد مُهيأ بشكل صحيح.
قم بتهيئة خادم الوكيل العكسي للمضيف لإعادة توجيه الطلبات الخاصة بالنطاق المُختار http://127.0.0.1:8008والحصول على شهادة TLS صالحة. احتفظ بمسار طلب Matrix عند استخدام الوكيل. ثم تحقق من نقطة النهاية العامة.
curl -fsS https://chat.example.com/_matrix/client/versions
استبدل اسم المضيف المذكور في المثال باسم مضيفك الحقيقي. إذا احتاج العملاء إلى اكتشاف الخادم الرئيسي من نطاق معرف مستخدم منفصل، فانشر سجلات اكتشاف Matrix المعروفة المناسبة لهذا التصميم. يتطلب الاتحاد أيضًا توجيهًا عامًا صحيحًا ونظام أسماء نطاقات (DNS)؛ ففتح المنفذ المحلي 8008وحده لا يوفر نشرًا عامًا كاملًا. راجع إرشادات Synapse الخاصة بالوكيل العكسي والاتحاد قبل إتاحة الخدمة.
6. أنشئ حساب المسؤول الأول
يُعطّل برنامج Synapse التسجيل العام افتراضيًا. بالنسبة للخوادم الخاصة، احتفظ بهذا الإعداد الافتراضي وأنشئ الحسابات من سطر الأوامر. أضف registration_shared_secretقيمة قوية مؤقتًا إلى data/homeserver.yaml، ثم أعد تشغيل Synapse ليتعرف على التغيير.
docker compose restart synapse
شغّل أداة التسجيل داخل الحاوية. ستطلب منك اسم المستخدم وكلمة المرور؛ سيؤدي هذا الإعداد --adminإلى إنشاء أول مسؤول.
docker compose exec synapse register_new_matrix_user \
http://localhost:8008 \
-c /data/homeserver.yaml \
--admin
بعد إنشاء الحساب، قم بإزالته registration_shared_secretمن الإعدادات وأعد تشغيل Synapse. يُتيح ترك كلمة المرور مُفعّلة لأي شخص يحصل عليها تسجيل حسابات عادية أو حسابات إدارية عبر واجهة التسجيل. سجّل الدخول عبر عميل Matrix يدعم خوادم منزلية مخصصة، باستخدام عنوان URL للخادم الذي يوفره خادم الوكيل العكسي الخاص بك.
النسخ الاحتياطية، والترقيات، والإصلاحات الشائعة
- احفظ البيانات المهمة احتياطيًا: أوقف أو أنشئ لقطة دورية لبيانات PostgreSQL، واحفظ نسخة احتياطية منها
./data، بما في ذلك الإعدادات والوسائط ومفتاح التوقيع. compose.yamlلا يمكن استعادة الخادم الرئيسي بنسخة احتياطية واحدة فقط. خزّن النسخ الاحتياطية في مكان منفصل عن الخادم، وتأكد دوريًا من إمكانية قراءتها.
- لا يمكن لبرنامج Synapse الكتابة إلى هذا المجلد
/data: تحقق من ملكية المضيف وأذونات الوصول إليه ./data. يحتاج مستخدم وقت تشغيل الصورة الرسمية إلى إذن لقراءة الإعدادات وكتابة البيانات. اضبط ملكية المضيف بعناية بدلاً من جعل المجلد قابلاً للكتابة من قِبل جميع المستخدمين.
- فشل الاتصال بقاعدة البيانات: تحقق من أن إعدادات قاعدة البيانات تستخدم
host: postgres، وأن كلمة المرور مطابقة .env، وأن docker compose logs postgresقاعدة البيانات سليمة. يقلل شرط جاهزية Compose من depends_onحالات التزامن عند بدء التشغيل، ولكنه لا يُصلح بيانات الاعتماد غير الصحيحة.
- تعمل واجهة برمجة التطبيقات المحلية، لكن لا يمكن للعملاء الاتصال: تحقق من سجل نظام أسماء النطاقات (DNS)، وشهادة TLS، وخادم الوكيل العكسي، وسجلات الاكتشاف لنطاقك المُختار. يُعدّ تعيين منفذ الاسترجاع فقط مقصودًا لخادم وكيل على نفس المضيف؛ أما خادم الوكيل في حاوية أخرى فيحتاج إلى شبكة Docker مشتركة وتصميم توجيه مختلف.
- الترقية: قم بعمل نسخة احتياطية أولاً، ثم راجع ملاحظات إصدار Synapse، وقم بتحديث علامة الصورة المثبتة، وأعد إنشاء الخدمة باستخدام
docker compose pullالأمر التالي docker compose up -d. احتفظ بنفس دليل البيانات، ووحدة تخزين قاعدة البيانات، واسم الخادم، ومفتاح التوقيع.
في نموذج الإعداد التوضيحي لمجموعة المتطوعين، لا يكتمل التثبيت إلا عند استجابة نقطة نهاية الإصدارات المحلية، واستجابة نقطة نهاية HTTPS عبر الخادم الوكيل، وتمكّن المسؤول من تسجيل الدخول باستخدام نطاق معرف المصفوفة المقصود. تُعدّ هذه الفحوصات مؤشرات عملية على نجاح عملية النشر الأولية، لكنها لا تُغني عن مراجعة متطلبات الأمان والنسخ الاحتياطي والاتحاد والتشغيل قبل دعوة مجتمع أوسع.
المراجع الرسمية