الإعدادات

أين تحتفظ Antimatter بإعداداتها، والطرق الثلاثة لتغييرها (وحدة التحكم بالنظام، متغيرات البيئة، amctl)، وأين تذهب السجلات.

أين توجد الإعدادات

لكل إعداد في الخادم اسم يتكون من قسم ومفتاح، مثل ServiceSettings.SiteURL أو EmailSettings.SMTPServer. معاً، تشكّلان إعداداً واحداً، يُخزَّن في أحد مكانين:

  • في قاعدة البيانات. يحدد ملف تكوين الموقع AM_CONFIG على عنوان اتصال PostgreSQL، لذا يكون الإعداد صفّاً في قاعدة البيانات ولا يحتفظ الحاوية بأي شيء على القرص. الخوادم متعددة التي تتشارك قاعدة بيانات واحدة تتشارك أيضاً إعداداتها.
  • في ملف. في غياب AM_CONFIG، يقرأ الخادم config/config.json المجاور لمجلده bin/ (/antimatter/config/config.json في صورة Docker). تعمل أرشيف الإصدار وملفات compose للإنتاج الخاصة بـ antimatter-docker بهذه الطريقة، وكذلك حزم .deb و.rpm، حيث يكون الملف الخاص بهما /etc/antimatter/config/config.json. احرص على أن يكون هذا الملف قابلًا للقراءة من قبل مستخدم الخادم فقط، إذ يحتوي على كلمات مرور ومفاتيح.

يقبل AM_CONFIG (أو علم --config في أمر antimatter) مسار ملف أو عنوان postgres://. الإعدادات التي تُترك دون تحديد تأخذ قيمتها الافتراضية.

لنقل إعداد موجود من ملف إلى قاعدة البيانات، نفّذ هذا على الخادم، ثم ابدأ الخادم مع ضبط AM_CONFIG على نفس العنوان:

amctl --local config migrate /opt/antimatter/config/config.json \
    "postgres://antimatter:PASSWORD@localhost:5432/antimatter?sslmode=disable&connect_timeout=10"

متغيرات البيئة

يمكن أيضاً تقديم أي إعداد كمتغير بيئة. تفوز المتغيرات على الإعداد المخزَّن، مما يجعلها مناسبة لما ينتمي إلى النشر: قاعدة البيانات، عنوان الموقع، تخزين الملفات، المنافذ.

قاعدة التسمية

اكتب AM_، ثم القسم، ثم المفتاح، بأحرف كبيرة ومفصولة بعلامات شرطة سفلية. الكلمات داخل اسم القسم أو المفتاح لا تُفصَل:

الإعدادالمتغير
ServiceSettings.SiteURLAM_SERVICESETTINGS_SITEURL
SqlSettings.DataSourceAM_SQLSETTINGS_DATASOURCE
EmailSettings.SMTPServerAM_EMAILSETTINGS_SMTPSERVER
PrivacySettings.EnableUserBlockingAM_PRIVACYSETTINGS_ENABLEUSERBLOCKING
  • الإعدادات الصحيحة والخاطئة تأخذ true أو false؛ والأرقام أرقام عادية.
  • إعدادات القوائم تأخذ قيمها مفصولة بمسافات، على سبيل المثال AM_SERVICESETTINGS_TRUSTEDPROXYIPHEADER="X-Forwarded-For X-Real-IP".
  • الإعدادات التي تكون كائنات تأخذ JSON. المتغير الوحيد من هذا النوع للتطبيقات هو AM_PLUGINSETTINGS_PLUGINS، وهو يستبدل إعدادات كل التطبيقات دفعة واحدة: اضبط إعدادات التطبيقات في وحدة التحكم بالنظام أو باستخدام amctl بدلاً من ذلك (انظر أدناه).
  • تستخدم إعدادات Mattermost الأقدم بادئة MM_، على سبيل المثال MM_SQLSETTINGS_DATASOURCE. لا يزال يعمل كاسم مستعار قديم. عند ضبط كلاهما، تتفوق متغير AM_.

يتم قفل الإعداد المُعطى عبر متغير في وحدة التحكم بالنظام، مع ملاحظة "تم ضبط هذا الإعداد عبر متغير بيئة. لا يمكن تغييره عبر وحدة التحكم بالنظام." لا يُكتب في الإعدادات المخزنة: احذف المتغير وستُطبَّق القيمة المخزنة مرة أخرى.

مع Docker Compose

أضف المتغيرات تحت environment: في خدمة antimatter، أو في compose.override.yaml بجانب compose.yaml (يقوم Compose بقراءته تلقائيًا، وهو يبقى بعد تحديث الملف المُحمَّل):

services:
  antimatter:
    environment:
      AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
      AM_EMAILSETTINGS_SMTPPORT: "587"
      AM_LOGSETTINGS_CONSOLELEVEL: INFO

طبّق التغييرات باستخدام docker compose up -d، والذي يعيد إنشاء الحاوية.

المتغيرات التي تقرأها التطبيقات

هناك بعض المتغيرات التي ليست إعدادات ولا تملك حقلًا في وحدة التحكم بالنظام: AM_CONFIG (موقع الإعدادات)، وAM_AI_ENCRYPTION_KEY وAM_AI_ENCRYPTION_PREVIOUS_KEYS، وهو المفتاح الذي يُشفّر مفاتيح API لاتصالات النماذج (انظر الذكاء الاصطناعي).

تقرأ بعض التطبيقات متغيرات خاصة بها، مضبوطة على خدمة antimatter: تطبيق المكالمات يقرأ AM_CALLS_* (انظر المكالمات والصوت)، وتطبيق GIFs يقرأ AM_GIFS_SERVICE_URL، AM_GIFS_API_KEY و AM_GIFS_UPLOAD_KEY (انظر التطبيقات المدمجة).

وحدة التحكم بالنظام

وحدة التحكم بالنظام هي منطقة إدارة تطبيق الويب، مخصصة لمديري النظام. لفتحها، انقر على صورتك في أعلى شريط التطبيق واختر وحدة التحكم بالنظام، أو انتقل إلى https://chat.example.com/admin_console. يحتوي شريطها الجانبي على مربع البحث في الإعدادات يبحث في كل الصفحات.

The System Console, with its sidebar of sections on the left and the SAML 2.0 settings page on the right.
وحدة التحكم بالنظام. يقسم الشريط الجانبي الصفحات إلى أقسام مثل التقارير، إدارة المستخدمين، والبيئة.

أقسامها هي:

  • التقارير: الإحصائيات وسجلات الخادم.
  • إدارة المستخدمين: المستخدمون، المجموعات، المجتمعات (المدرجة كفِرق)، القنوات، الصلاحيات، والإدارة المندوبة.
  • خصائص النظام: خصائص الملف الشخصي المخصصة والوصول المبني على الخصائص.
  • البيئة: خادم الويب، قاعدة البيانات، تخزين الملفات، وكيل الصور، SMTP، الإشعارات الدافعة، تقييد المعدل، التسجيل، مدد الجلسة، ومراقبة الأداء.
  • إعدادات الموقع: الهوية البصرية، المستخدمون والفِرَق، الإشعارات، المنشورات، مشاركة الملفات، والسلوكيات الأخرى على مستوى الخادم.
  • المصادقة: التسجيل، تسجيل الدخول عبر البريد الإلكتروني وكلمة المرور، MFA، AD/LDAP، SAML 2.0، OAuth 2.0، OpenID Connect، والوصول للضيوف.
  • الذكاء الاصطناعي: اتصالات النماذج والميزات المدمجة للذكاء الاصطناعي (إعادة صياغة، ملخصات، ترجمة تلقائية، تحويل النص إلى كلام). انظر الذكاء الاصطناعي.
  • الإضافات: إدارة التطبيقات وإعدادات كل تطبيق مثبَّت.
  • التكاملات: خطوط الويب، أوامر الشرطة المائلة، حسابات البوتات، GIFs، تحويل النص إلى كلام، CORS.
  • الامتثال: الاحتفاظ بالبيانات، تصدير بيانات الامتثال والمراقبة، سجلات التدقيق، وشروط الاستخدام المخصصة.
  • تجريبي: ميزات قد تتغير.

في هذا الدليل، يُكتب كل إعداد على شكل مساره في وحدة التحكم بالنظام، ثم اسمه، ثم مفتاح إعداده، على سبيل المثال وحدة التحكم بالنظام › إعدادات الموقع › المستخدمون والفِرَق › تفعيل التجاهل والحظر وطلبات الرسائل (PrivacySettings.EnableUserBlocking).

تُطبَّق معظم التغييرات فور النقر على حفظ. بعض الإعدادات (عنوان الاستماع، وبعض إعدادات قاعدة البيانات والمخزن المؤقت) تتطلب إعادة تشغيل، ويُذكر ذلك في الصفحة.

نقابة أو مساحة عمل

لكل مجتمع نوع، يحدد بعض إعداداته الافتراضية:

  • النقابة، للمجتمعات العامة أو المجتمعات القائمة على الهوايات: تكون المكالمات مغلقة في قنواتها (حيث يتحدث الأشخاص في القنوات الصوتية)، ولا يمكن أرشفة القنوات إلا من قبل مسؤوليها والأدوار التي تدير القنوات.
  • مساحة العمل، للشركات أو المؤسسات: تكون المكالمات مفتوحة في قنواتها، ويمكن لمسؤولي القناة (منشئها ومن يعيّنهم كمسؤولين) أرشفتها أيضًا.

وحدة التحكم بالنظام › إعدادات الموقع › المستخدمون والفِرَق › نوع المجتمعات الجديدة (TeamSettings.DefaultCommunityKind، AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND) هو نوع المجتمعات التي يتم إنشاؤها من تلك اللحظة فصاعدًا: النقابة (الافتراضي) أو مساحة العمل؛ لا يزال الإعداد يخزن ويقرأ القيم الأقدم community وworkplace. يحدد نمط التخطيط المختار عند إنشاء المجتمع نوعه الخاص. يمكن لمسؤولي كل مجتمع تغيير نوعه لاحقًا، من إعدادات الفريق › عام. تضع النقابات الجديدة الجميع في كل قناة (TeamSettings.AllChannelsMembershipForNewTeams) هو الافتراضي للنقابات الجديدة فقط: لا تبدأ مساحات العمل بهذه الطريقة أبدًا (انظر الجميع في كل قناة).

بالنسبة للشركة، اضبطه على مساحة العمل قبل إنشاء أول مجتمع، أو قبل ترقية الخادم الحالي إلى الإصدار 0.9.0: تمنح الترقية كل مجتمع موجود القيمة التي يكون عليها الإعداد في تلك اللحظة (انظر الترقية إلى 0.9.0).

رسائل تحترق بعد القراءة

يمكن للأشخاص إرسال رسائل يتم حذفها بعد فترة من فتح كل قارئ لها (انظر رسائل الحذف عند القراءة). توجد الإعدادات في وحدة التحكم بالنظام › إعدادات الموقع › المنشورات، تحت رسائل الحذف عند القراءة:

الإعدادالمفتاح والمتغيرالافتراضي
تفعيل رسائل «الحرق عند القراءة»ServiceSettings.EnableBurnOnRead, AM_SERVICESETTINGS_ENABLEBURNONREADمفعّل
مدة «الحرق عند القراءة»: المدة التي تبقى فيها الرسالة بعد فتحها، عندما لا يختار المرسل مدة محددةServiceSettings.BurnOnReadDurationSeconds, AM_SERVICESETTINGS_BURNONREADDURATIONSECONDS600 (10 دقائق)
أطول مدة يمكن للمرسلين اختيارها: من ساعة واحدة إلى 7 أيام؛ يتم تقصير أي اختيار أطول من ذلك إلى هذه المدةServiceSettings.BurnOnReadMaximumDurationSeconds, AM_SERVICESETTINGS_BURNONREADMAXIMUMDURATIONSECONDS86400 (يوم واحد)
الحد الأقصى لمدى صلاحية رسائل «الحذف بعد القراءة»: يتم حذف الرسالة بعد هذه المدة من إرسالها، حتى لو لم يقرأها الجميعServiceSettings.BurnOnReadMaximumTimeToLiveSeconds, AM_SERVICESETTINGS_BURNONREADMAXIMUMTIMETOLIVESECONDS604800 (7 أيام)

يتم التحقق من أطول مدة مرة أخرى عند قراءة الرسالة، لذا فإن تقليلها يؤدي أيضًا إلى تقصير الرسائل المرسلة بالفعل.

أداة سطر الأوامر amctl

يدير amctl الخادم من سطر الأوامر: المستخدمون، المجتمعات، القنوات، التطبيقات، الإعدادات، المهام، والمزيد. يتواصل مع الخادم بأحد طريقتين.

الوضع المحلي، على الخادم

يتيح الوضع المحلي لـ amctl التحدث إلى الخادم عبر مقبس يونكس، دون تسجيل الدخول. يكون مفعّلاً في صورة Docker وفي حزم .deb و.rpm. على خادم مثبّت من أرشيف، فعّله عبر ServiceSettings.EnableLocalMode (AM_SERVICESETTINGS_ENABLELOCALMODE=true). يكون المقبس افتراضياً في /var/tmp/antimatter_local.socket (ServiceSettings.LocalModeSocketLocation).

# with Docker Compose
docker compose exec antimatter amctl --local system status
# with a release archive
sudo -u antimatter /opt/antimatter/bin/amctl --local system status
# with the .deb or .rpm package
sudo -u antimatter amctl --local system status
أي شخص يستطيع استخدام المقبس، أو تنفيذ docker compose exec على المضيف، يملك صلاحيات مدير النظام الكاملة.

عن بُعد، بحساب

من أي جهاز، سجّل الدخول بحساب مدير نظام (أو رمز وصول شخصي)، ثم نفّذ الأوامر على ذلك الخادم:

amctl auth login https://chat.example.com --name prod --username admin
amctl system status

أوامر الإعداد

الأمروظيفته
amctl config get ServiceSettings.SiteURLيطبع إعداداً واحداً.
amctl config set TeamSettings.EnableOpenServer falseتغير الإعداد قيمةً واحدةً. تأخذ إعدادات القائمة قيمةً واحدةً أو عدة قيم.
amctl config patch settings.jsonيدمج ملف JSON يحتوي على إعدادات في التهيئة.
amctl config showيطبع التهيئة كاملة بصيغة JSON.
amctl config editيفتح التهيئة في محرّرك ($EDITOR).
amctl config resetيعيد الإعدادات إلى قيمها الافتراضية.
amctl config reloadيعيد تحميل التهيئة من مكان تخزينها، بعد تغيير أُجري خارج الخادم.

تقع إعدادات التطبيقات تحت PluginSettings.Plugins.<app id>، بمفاتيح بحروف صغيرة. على سبيل المثال، لضبط عنوان الخدمة والمفتاح لتطبيق GIFs من مضيف Docker:

docker compose exec -T antimatter amctl --local config patch /dev/stdin <<'EOF'
{"PluginSettings": {"Plugins": {"com.antimatterchat.gifs": {
  "serviceurl": "http://gifs:8080/v2",
  "apikey": "the GIFS_API_KEY of your .env"
}}}}
EOF

أوامر مفيدة أخرى: amctl user create، amctl user deactivate، amctl team create، amctl plugin list، amctl plugin enable، amctl system supportpacket و amctl logs. نفّذ amctl help <command> لمعرفة خيارات كل أمر.

السجلات

يكتب الخادم سجلّه في مكانين، ولكلٍّ منهما مستواه (DEBUG، INFO، WARN أو ERROR)، ويُضبط ذلك في وحدة التحكم بالنظام › البيئة › السجلات:

الوجهةالإعداداتالقيم الافتراضية
الوحدة الطرفية (الإخراج القياسي)إخراج السجلات إلى وحدة التحكم (LogSettings.EnableConsole)، مستوى سجل وحدة التحكم (LogSettings.ConsoleLevel)، إخراج سجلات وحدة التحكم بصيغة JSON (LogSettings.ConsoleJson)مفعّل، DEBUG، JSON
ملف، antimatter.logإخراج السجلات إلى ملف (LogSettings.EnableFile)، مستوى سجل الملف (LogSettings.FileLevel)، مجلد سجل الملف (LogSettings.FileLocation)مفعّل، INFO، مجلد logs/ المجاور لمجلد bin/

تُستبدل ملفات السجل عند بلوغ حجمها 100 ميغابايت، وتُضغط الملفات القديمة.

ملف compose الخاص بالموقع يُعطّل التسجيل في ملف (AM_LOGSETTINGS_ENABLEFILE=false)، لذا تكون السجلات في إخراج الحاوية فقط:

docker compose logs -f antimatter
docker compose logs --since 1h antimatter | grep -i error

يكون مستوى وحدة التحكم بالنظام افتراضياً DEBUG، وهو مفصّل. على خادم نشط، اضبط AM_LOGSETTINGS_CONSOLELEVEL=INFO. يضبط config.json الخاص بأرشيف الإصدار والحزم هذا المستوى مسبقاً على INFO. عند استخدام أرشيف الإصدار تحت systemd، تذهب مخرجات وحدة التحكم بالنظام إلى السجل (journalctl -u antimatter) والملف إلى /opt/antimatter/logs/antimatter.log. تُطفئ الحزم تسجيل الملفات، لذا تكون سجلاتها في السجل فقط.

يجب أن تبقى ملفات السجل والتدقيق داخل الجذر المخصص للسجلات: AM_LOG_PATH (لا يزال MM_LOG_PATH القديم يعمل) إذا تم تعيينه، وإلا في مجلد logs. يتم فرض هذا الإجراء افتراضيًا: إذا كان مجلد سجل الملف، أو هدف السجل المتقدم، أو مسار سجل التدقيق خارج الجذر، يتوقف الخادم عند بدء التشغيل، ويُرفض المسار عند حفظ التكوين. يمكنك إيقاف فرض هذا الإجراء باستخدام AM_FEATUREFLAGS_ENFORCELOGPATHROOT=false. عند تعيين AM_LOG_PATH وترك حقل مجلد سجل الملف فارغًا، تذهب السجلات إلى AM_LOG_PATH.

عند تفعيل تسجيل الملفات، يمكن لمديري النظام أيضًا قراءة السجل في وحدة التحكم بالنظام › التقارير › سجلات الخادم: شارات مستوى ملونة، وعوامل تصفية سريعة حسب المستوى، ومتابعة مباشرة للسجل، وإعدادات مسبقة للنطاق الزمني من 5 دقائق إلى 24 ساعة، أو باستخدام amctl logs.