تثبيت Antimatter
قم بتثبيت Antimatter باستخدام ملف compose الجاهز، أو من حزمة .deb أو .rpm الخاصة بإصدار، أو من أرشيف الإصدار. ثم أنشئ حساب المدير الأول.
التثبيت باستخدام Docker Compose
هذه هي الطريقة الموصى بها. ملف compose واحد يشغّل Antimatter وPostgreSQL وتخزين الملفات وخدمة GIF. تحتاج إلى خادم Linux مزوّد بـ Docker Engine وإضافة Compose الخاصة به (docker compose)، ونواة معالجة مركزي (CPU) واحدة على الأقل و4 جيجابايت من الذاكرة أو أكثر.
1. تنزيل ملف compose
mkdir antimatter && cd antimatter
curl -fsSLO https://antimatter.chat/compose.yaml
2. إنشاء ملف .env
يقوم ملف compose بقراءة إعداداته من ملف .env في نفس المجلد. أنشئ هذا الملف باستخدام أسرار عشوائية:
cat > .env <<EOF
SITE_URL=http://localhost:8065
POSTGRES_PASSWORD=$(openssl rand -hex 24)
S3_SECRET_KEY=$(openssl rand -hex 24)
GIFS_API_KEY=$(openssl rand -hex 24)
AM_AI_ENCRYPTION_KEY=$(openssl rand -base64 32)
EOF
chmod 600 .env
اضبط SITE_URL على العنوان الذي سيكتبه المستخدمون في متصفحهم، على سبيل المثال http://192.168.1.20:8065 على شبكة محلية أو https://chat.example.com مع نطاق خاص. احتفظ بملف .env: فالقاعدة والتخزين يستخدمان كلمات المرور هذه منذ أول تشغيل، كما أن مفاتيح واجهة برمجة التطبيقات (API) الخاصة باتصالات نماذج الذكاء الاصطناعي مشفرة باستخدام AM_AI_ENCRYPTION_KEY، وتحتاج إلى نفس الملف لاستعادة نسخة احتياطية.
3. التشغيل
docker compose up -d
docker compose ps
يستغرق التشغيل الأول دقيقة أو دقيقتين: يقوم PostgreSQL بإنشاء قاعدة البيانات، وخدمة bucket ذات التشغيل الواحد تنشئ حاوية التخزين، وخدمة gifs-stickers ذات التشغيل الواحد تستورد مجموعة الملصقات المبدئية، وAntimatter تنشئ جداولها. تابع العملية باستخدام docker compose logs -f antimatter.
لاستخدام اسم نطاق وHTTPS من البداية، راجع النطاق وHTTPS: باستخدام ملف compose، الأمر لا يتطلب سوى سطرين إضافيين في .env وملف https.
متغيرات .env
| المتغير | الافتراضي | وظيفته |
|---|---|---|
SITE_URL | مطلوب | العنوان العام لـ Antimatter (ServiceSettings.SiteURL). |
POSTGRES_PASSWORD | مطلوب | كلمة مرور مستخدم قاعدة البيانات antimatter. |
S3_SECRET_KEY | مطلوب | المفتاح السري لتخزين الملفات. |
GIFS_API_KEY | مطلوب | المفتاح الذي تستخدمه Antimatter لاستدعاء خدمة GIF. |
AM_AI_ENCRYPTION_KEY | فارغ | المفتاح الذي يشفّر مفاتيح واجهة برمجة التطبيقات (API) الخاصة باتصالات نماذج الذكاء الاصطناعي (openssl rand -base64 32). إذا كان فارغًا: ينشئ الخادم ملف مفتاح في وحدة التخزين data. راجع مفتاح التشفير. |
GIFS_UPLOAD_KEY | فارغ | يسمح للأشخاص بإضافة GIFs وملصقاتهم الخاصة من منتقي الرموز التعبيرية، وحذفها. إذا تُرك الحقل فارغًا، يُعطَّل الرفع. |
DOMAIN | فارغ | اسم النطاق الخاص بك، لملف https. |
HTTP_PORT | 8065 | منفذ المضيف لخادم الويب الخاص بـ Antimatter. |
CALLS_PORT | 8443 | منفذ UDP وTCP لصوت وصideo المكالمات. |
EDGE_SUBNET | 172.29.71.0/28 | الشبكة الفرعية للشبكة بين Caddy وAntimatter. غيّرها إذا كانت تتداخل مع إحدى شبكاتك. |
TZ | UTC | المنطقة الزمنية للحاويات. |
ANTIMATTER_IMAGE | ghcr.io/antimatterchat/antimatter-next:latest | صورة Antimatter التي سيتم تشغيلها (انظر أدناه). |
ما يتم تشغيله
| الخدمة | الصورة | الدور |
|---|---|---|
antimatter | ghcr.io/antimatterchat/antimatter-next | الخادم، وتطبيق الويب، والتطبيقات المضمنة. ينشر HTTP_PORT و CALLS_PORT. دليل بياناته هو وحدة التخزين data. |
postgres | postgres:17-alpine | قاعدة البيانات، في مجلد postgres. |
files | rustfs/rustfs | تخزين متوافق مع S3 للملفات المرفقة والتطبيقات المثبتة، في مجلد files. |
bucket | amazon/aws-cli | ينشئ حاوية antimatter ثم يخرج. |
gifs | ghcr.io/antimatterchat/gifs-server | خدمة الرموز التعبيرية GIF والملصقات، في مجلد gifs. |
gifs-stickers | ghcr.io/antimatterchat/gifs-server | يستورد حزمة الملصقات الأساسية عند أول تشغيل، ثم يخرج. |
https | caddy:2-alpine | مع ملف تعريف https فقط: HTTPS على المنافذ 80 و443. |
PostgreSQL، والتخزين، وخدمة GIF على شبكة داخلية (private) لا تملك اتصالاً بالإنترنت، ولا ينضم إليها سوى Antimatter. لا ينشر أي منها منفذًا.
لا يحتفظ حاوية Antimatter بأي شيء على القرص: إعداداتها موجودة في قاعدة البيانات (يشير إليها AM_CONFIG)، وملفاتها وتطبيقاتها موجودة في خدمة التخزين. يمكنك إزالة الحاوية وإعادة إنشائها في أي وقت. تحتوي وحدة التخزين data الخاصة بها فقط على ملف مفتاح تشفير الذكاء الاصطناعي، والذي ينشئه الخادم عندما يكون AM_AI_ENCRYPTION_KEY فارغًا. كل ما تحتاج إلى نسخه احتياطيًا موجود في وحدات التخزين postgres و files و gifs و data، بالإضافة إلى ملف .env الخاص بك.
اختر صورة
يُنشر صورتان لـ Antimatter، وكلاهما لـ linux/amd64 وlinux/arm64، وكلاهما مبنيان من فرع main لكل مستودع:
| الصورة | التطبيقات المدمجة | الوسوم |
|---|---|---|
ghcr.io/antimatterchat/antimatter | الدردشة بالذكاء الاصطناعي، والمكالمات، وGitHub، وGitLab، وJira، وMetrics. | latest، X.Y.Z للإصدارات، sha-<commit> |
ghcr.io/antimatterchat/antimatter-next | نفس الشيء، بالإضافة إلى القنوات الصوتية، الاستطلاعات، البريد، التقويم، الملاحظات، السبورة البيضاء، GIF، قوائم المهام، والميمات. يُعاد بناؤه كل ليلة. | latest, nightly, nightly-<YYYYMMDD>, sha-<commit> |
لم تعد حزم الصور تتضمن Kanban أو أدلة التشغيل (Playbooks) بعد الآن: قم بتثبيت أي منهما من إصدار GitHub الخاص به (انظر أدناه) إذا كنت ترغب في ذلك. الخادم الذي يحتوي على أحدهما مثبتًا مسبقًا يحافظ عليه أثناء الترقية.
يستخدم ملف compose الخاص بالموقع antimatter-next، لأن خدمة GIF ومعظم التطبيقات الموصوفة في هذا الموقع موجودة فقط في تلك الصورة. لتغيير الصورة، اضبط ANTIMATTER_IMAGE في .env ثم نفّذ docker compose up -d.
latest تحتك. في بيئة الإنتاج، ثبّت وسمًا مثل nightly-20261015 أو sha-<commit>، وغيّره عمدًا عند الترقية. يقوم الخادم بترقية قاعدة بياناته عند بدء التشغيل، لذا لا يمكنك الرجوع إلى صورة أقدم، أو الانتقال من antimatter-next إلى antimatter، دون استعادة نسخة احتياطية أُخذت قبل ذلك. راجع النسخ الاحتياطي والترقيات.داخل الصورة
- يوجد الخادم في
/antimatter، مع الملفات التنفيذيةantimatterوamctlفي/antimatter/bin(علىPATH). - يعمل كمستخدم غير مخصص
antimatter(uid 2000) على أساس distroless بسيط، دون shell. - المنافذ: 8065 (الويب وواجهة برمجة التطبيقات)، 8067 (المقاييس)، 8074 (العقدة)، 8443 UDP وTCP (المكالمات).
- وضع المحلّي (
ServiceSettings.EnableLocalMode) مفعّل، لذا يعملamctl --localداخل الحاوية. يقوم فحص الحالة بتشغيلamctl system status --local. - تتواجد التطبيقات المضمّنة في
/antimatter/prepackaged_plugins، وهي موقّعة بمفتاح توقيع تطبيقات Antimatter. - تتضمن الحزمة أدوات استخراج النصوص (
pdftotext،wvText،unrtf،tidy)، مما يتيح البحث في محتوى المستندات المرفوعة.
ملفات compose أخرى
يحتوي مستودع antimatter-docker على إعداد للإنتاج في deploy/compose/: nginx مع شهاداتك الخاصة أو Let's Encrypt (certbot)، PostgreSQL، خدمة GIF الاختيارية (الملف الشخصي gifs)، وأحجام مسماة لإعدادات الخادم وبياناته وسجلاته، موثّقة في ملف README الخاص به. يستخدم الصورة المستقرة افتراضيًا ويخزّن الملفات على حجم محلي بدلاً من تخزين S3. استخدمه إذا كنت تفضّل nginx على Caddy، أو إذا كان لديك شهادات بالفعل.
إنشاء أول مدير
افتح SITE_URL في متصفحك وأنشئ حسابًا. أول حساب يُنشأ على خادم جديد يصبح مدير النظام، ثم يوجهك الإعداد لإنشاء أول مجتمع (وهو الاسم الذي تعتمده Antimatter للفريق أو مساحة العمل).
قم بذلك فورًا بعد أول تشغيل: حتى ذلك الحين، يصبح أول من يصل إلى الخادم مديره. لإنشاء الحساب من سطر الأوامر بدلاً من ذلك، قبل أن يصبح الخادم قابلًا للوصول من الخارج:
docker compose exec antimatter amctl --local user create --system-admin --email-verified \
--email admin@example.com --username admin --password 'a-long-password'
docker compose exec antimatter amctl --local team create --name main --display-name "Main"
docker compose exec antimatter amctl --local team users add main admin
ثم سجّل الدخول في SITE_URL. ابدأ الأمر بمسافة لتجنب حفظ كلمة المرور في سجل shell الخاص بك (مع HISTCONTROL=ignorespace)، أو غيّر كلمة المرور بعد تسجيل الدخول.
الخطوات التالية بعد الدخول:
- بالنسبة لشركة أو مؤسسة، اضبط نوع المجتمعات الجديدة على مساحة عمل، وغيّر نوع المجتمع الذي أنشأته بالفعل من خلال إعداداته: Guild أو مساحة عمل.
- حدد من يمكنه إنشاء حسابات: تسجيل الدخول والحسابات.
- اضبط البريد الإلكتروني حتى تعمل الدعوات وإعادة تعيين كلمات المرور: البريد الإلكتروني والإشعارات الدافعة.
- افتح منفذ المكالمات في جدار الحماية الخاص بك: المكالمات والصوت.
- تحقق من التطبيقات المفعّلة: التطبيقات المضمّنة.
تنزيل إصدار
بدون Docker، ثبّت Antimatter من ملفات الإصدار على GitHub: github.com/AntimatterChat/antimatter/releases. لكل إصدار رقم إصدار مثل 0.9.0، ووسمه هو نفس الرقم مع حرف v في البداية (v0.9.0).
0.9.0-rc.1، يُوسم بـ إصدار مسبق على GitHub. إنه إصدار تجريبي، يُنشر قبل الإصدار النهائي.يحتوي كل إصدار على هذه الملفات، لخوادم amd64 وarm64:
| الملف | ما هو |
|---|---|
antimatter_<version>-1_amd64.deb, antimatter_<version>-1_arm64.deb | الحزمة الخاصة بـ Debian وUbuntu وتوزيعاتهما المشتقة. |
antimatter-<version>-1.x86_64.rpm, antimatter-<version>-1.aarch64.rpm | الحزمة الخاصة بـ Fedora وRHEL والتوزيعات المتوافقة مع RHEL. |
antimatter-<version>-linux-amd64.tar.gz, antimatter-<version>-linux-arm64.tar.gz | أرشيف الإصدار، لأي توزيع Linux، يُضبط يدويًا. |
SHA256SUMS | ملف SHA-256 الخاص بكل ملف في الإصدار. |
تحتوي الحزم والأرشيف على نفس البرنامج: الخادم (antimatter)، وأداة سطر الأوامر (amctl)، وكلا التطبيقين الويب (الواجهة الافتراضية والكلاسيكية)، والتطبيقات المدمجة، وقوالب البريد الإلكتروني، والترجمات. تضيف الحزم خدمة systemd وملف إعدادات، لذا كل واحدة منها تثبيت شامل: كل ما عليك فعله هو إضافة قاعدة بيانات PostgreSQL. لا توجد تنزيلات منفصلة للثنائيات: فهي موجودة في الأرشيف، في antimatter/bin/. وهي ثنائيات ثابتة، لذا تعمل على أي توزيع Linux من نفس معماريتها.
في أسماء الحزم، يُستبدل شرطة السطر السفلي في الإصدار التجريبي بعلامة الموجّه، وذلك حتى يرتّب مدير الحزم الإصدار التجريبي قبل الإصدار النهائي: يعطي الإصدار 0.9.0-rc.1 antimatter_0.9.0~rc.1-1_amd64.deb وantimatter-0.9.0~rc.1-1.x86_64.rpm. أما الأرشيف فيحتفظ بشرطة السطر السفلي.
يطبع antimatter version إصدار الإصدار كـرقم الإصدار، مع الالتزام الذي بُني منه كـتجزئة الإصدار. أما سطر الإصدار فيه فهو إصدار خط Mattermost الذي يستند إليه Antimatter.
التحقق من التحميل
حمّل الملف الذي تحتاجه وSHA256SUMS إلى نفس المجلد، من صفحة الإصدار أو باستخدام curl، ثم تحقق من الملف:
curl -fLO https://github.com/AntimatterChat/antimatter/releases/download/v<version>/antimatter_<version>-1_amd64.deb
curl -fLO https://github.com/AntimatterChat/antimatter/releases/download/v<version>/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
يجب أن يُدرج كل ملف حمّلته مع OK. أي نتيجة أخرى تعني أن الملف تالف أو غير مكتمل: حمّله مرة أخرى، ولا تثبّته. SHA256SUMS غير موقّع: يكشف عن التحميل التالف، ولا يثبت أكثر مما يثبته التحميل عبر HTTPS من GitHub.
تثبيت حزمة .deb أو .rpm
تثبّت الحزمة Antimatter كخدمة systemd، والتي تحتاج فقط إلى قاعدة بيانات للبدء. استخدمها على خادم 64-بت متوافق مع Debian أو Ubuntu أو Fedora أو RHEL مع systemd.
ما تثبّته الحزمة
| المسار | محتواها |
|---|---|
/opt/antimatter | البرنامج: bin/antimatter، bin/amctl، تطبيقات الويب (client/، client-fusion/)، التطبيقات المدمجة (prepackaged_plugins/)، القوالب، الترجمات والخطوط. يستبدلها كل ترقية. |
/etc/antimatter/antimatter.env | إعدادات الخدمة، كمتغيرات AM_: قاعدة البيانات، عنوان الموقع، خدمة GIF. قابلة للقراءة بواسطة root فقط. تحتفظ بها الترقيات. |
/etc/antimatter/config/config.json | ملف الإعدادات، حيث يحفظ الخادم الإعدادات المُعدّلة في وحدة التحكم بالنظام. يُنشأ من /opt/antimatter/defaults/config.json عند التثبيت الأول، ولا يُستبدل بعد ذلك أبداً. |
/var/lib/antimatter | الملفات المرفوعة (data/) والتطبيقات المثبتة (plugins/، client-plugins/). |
/var/log/antimatter | ملفات السجلات، إذا فعّلت تسجيل الملفات. إنه معطّل: تذهب السجلات إلى السجل. |
/usr/lib/systemd/system/antimatter.service | الخدمة. |
/usr/bin/amctl | رابط إلى /opt/antimatter/bin/amctl. |
المجلدات التي يكتب إليها الخادم داخل /opt/antimatter (config، data، plugins، client/plugins وlogs) هي روابط إلى /etc/antimatter، /var/lib/antimatter و/var/log/antimatter. لذلك، لن يمسّ الترقية، التي تستبدل /opt/antimatter، بياناتك أبدًا. كما ينشئ الحزمة مستخدم النظام antimatter، الذي يشغّل الخادم ويمتلك هذه المجلدات.
تعتمد الحزمة على ca-certificates. وتوصي بـ PostgreSQL (postgresql في Debian وUbuntu، وpostgresql-server في Fedora وRHEL)، وmedia-types (mailcap في حالة .rpm)، وgifs-server، وهو خدمة GIF التي لها إصدار خاص بها (انظر أسفل). يقوم apt وdnf بتثبيت الحزم الموصى بها عند توفرها. وتقترح الحزمة poppler-utils، wv، unrtf وtidy (بدون wv في حالة .rpm): فهي تستخرج النص من المستندات المرفوعة، مما يتيح للبحث العثور على الكلمات داخلها. قم بتثبيتها بنفسك إذا أردت ذلك.
1. تثبيت الحزم
حمّل حزمة Antimatter وحزمة خدمة GIF الخاصة ببنيتك، وتحقق منهما كما هو موضح أعلاه، ثم ثبّت كلاهما في أمر واحد، حتى يتم تلبية توصية gifs-server (لأنها غير متوفرة في مستودعات التوزيعات):
# Debian, Ubuntu
sudo apt install ./antimatter_<version>-1_amd64.deb ./gifs-server_*_amd64.deb
# Fedora, RHEL
sudo dnf install ./antimatter-<version>-1.x86_64.rpm ./gifs-server-*.x86_64.rpm
احتفظ بـ ./: فهي تخبر apt وdnf بتثبيت ملف محلي. لتثبيت دون خدمة GIF، اترك حزمتها خارج الأمر. تمكّن الحزمة خدمة antimatter لكنها لا تبدأها، وتطبع الخطوات التالية.
2. إنشاء قاعدة البيانات
تتطلب Antimatter PostgreSQL 15 أو أحدث، على هذا الخادم أو على خادم آخر. تحقق من إصدار PostgreSQL الخاص بتوزيعتك باستخدام psql --version. إذا كان الإصدار أقدم، فقم بتثبيت إصدار أحدث من مستودعات مشروع PostgreSQL نفسه، أو استخدم قاعدة بيانات على خادم آخر. في Debian وUbuntu، تبدأ حزمة postgresql قاعدة البيانات. في Fedora وRHEL، أنشئها وابدأها أولاً:
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
ثم أنشئ مستخدمًا وقاعدة بيانات لـ Antimatter:
sudo -u postgres psql -c "CREATE USER antimatter WITH PASSWORD 'a-long-password'"
sudo -u postgres psql -c "CREATE DATABASE antimatter OWNER antimatter"
يجب أن يقبل PostgreSQL اتصالات كلمة المرور من 127.0.0.1: سطور host في ملف pg_hba.conf الخاص به، مع الطريقة scram-sha-256.
3. ضبط قاعدة البيانات وعنوان الموقع
حرّر /etc/antimatter/antimatter.env (sudoedit /etc/antimatter/antimatter.env). احذف # من أمام الأسطر التي تستخدمها، ثم اضبط قاعدة البيانات والعنوان الذي سيفتحه المستخدمون:
AM_SQLSETTINGS_DRIVERNAME=postgres
AM_SQLSETTINGS_DATASOURCE=postgres://antimatter:a-long-password@localhost:5432/antimatter?sslmode=disable&connect_timeout=10
AM_SERVICESETTINGS_SITEURL=https://chat.example.com
يمكن وضع أي إعداد من إعدادات التهيئة في هذا الملف بصيغة AM_<SECTION>_<SETTING>: على سبيل المثال، SqlSettings.DataSource يصبح AM_SQLSETTINGS_DATASOURCE. لا يمكن تغيير الإعدادات المحددة هنا من وحدة التحكم بالنظام. راجع التهيئة. أعد تشغيل الخادم بعد كل تغيير: sudo systemctl restart antimatter.
يضبط الخادم أيضًا بعض القيم الافتراضية، والتي يمكن تجاوزها بسطر في antimatter.env: تسجيل الأحداث في الملفات معطّل (AM_LOGSETTINGS_ENABLEFILE=false, AM_NOTIFICATIONLOGSETTINGS_ENABLEFILE=false)، ووضع المحلّل مفعّل (AM_SERVICESETTINGS_ENABLELOCALMODE=true)، حتى يعمل amctl --local على الخادم.
4. ابدأ التشغيل
sudo systemctl start antimatter
journalctl -u antimatter -f
sudo -u antimatter amctl --local system status
عند التشغيل الأول، ينشئ الخادم جداوله، ثم يستمع على المنفذ 8065. افتح http://<server>:8065، أو نطاقك بعد إعداد وكيل عكسي (راجع النطاق وHTTPS)، وأنشئ الحساب الأول فورًا: سيصبح مدير النظام. لإنشائه من سطر الأوامر بدلاً من ذلك، استخدم أوامر amctl الواردة في إنشاء أول مدير، مع استخدام sudo -u antimatter amctl --local بدلاً من docker compose exec antimatter amctl --local.
5. فعّل GIF
تطبيق GIF مضمّن ومفعّل، ويحدد antimatter.env بالفعل عنوان خدمة GIF على نفس الخادم (AM_GIFS_SERVICE_URL=http://127.0.0.1:8080/v2). لكنه لا يزال بحاجة إلى مفتاح الواجهة البرمجية للخدمة. قام حزمة gifs-server بتوليد مفتاح عند تثبيتها:
sudo systemctl start gifs-server-stickers # imports the sticker pack, about a minute and a half
sudo systemctl start gifs-server
sudo grep -v '^#' /etc/gifs-server/api-keys
ضع المفتاح في antimatter.env بصيغة AM_GIFS_API_KEY=<key> وأعد تشغيل Antimatter، أو أدخله كـمفتاح الواجهة البرمجية في وحدة التحكم بالنظام › الإضافات › GIF. إذا كانت خدمة GIF تعمل على خادم آخر، اضبط AM_GIFS_SERVICE_URL على عنوانه. للسماح للمستخدمين بإضافة GIF وملصقاتهم الخاصة، راجع GIF.
الخدمة
- يعمل الخادم باسم مستخدم
antimatter، في المسار/opt/antimatter، ويقرأ الملف/etc/antimatter/antimatter.env. يعيد systemd تشغيل الخادم عند انتهائه، ويمنحه مهلة تصل إلى ساعة واحدة للبدء، لأن ترحيلات قاعدة البيانات لإصدار جديد قد تستغرق وقتاً طويلاً. - تُحفظ سجلاته في الدورية (journal):
journalctl -u antimatter. - الخادم مُعزَّز الأمان: المساران
/usrو/etcللقراءة فقط بالنسبة للخادم، باستثناء/etc/antimatter/config، ولا يمكنه رؤية/homeأو/rootأو/run/user. إذا قمت بنقل تخزين الملفات (FileSettings.Directory)، فاختر مجلداً خارج هذه المسارات، يكون مملوكاً لمستخدمantimatter. - تستبدل عمليات الترقية ملف الخدمة. لتعديله، استخدم
sudo systemctl edit antimatter، حيث تُحفظ تعديلاتك في ملف منفصل.
ترقية الحزمة
- خذ نسخة احتياطية (انظر النسخ الاحتياطية والترقيات).
- حمّل الحزمة الجديدة وملف
SHA256SUMS، وتحقق منهما. - أوقف الخادم، وثبّت الحزمة الجديدة فوق القديمة، ثم أعد تشغيله:
sudo systemctl stop antimatter sudo apt install ./antimatter_<new version>-1_amd64.deb # or: sudo dnf install ./antimatter-<new version>-1.x86_64.rpm sudo systemctl start antimatter journalctl -u antimatter -f
لا تعيد الحزمة تشغيل الخادم بنفسها. بعد الترقية، تُطبع الرسالة: Antimatter was upgraded; restart it to run the new version: sudo systemctl restart antimatter: إذا لم تكن قد أوقفت الخادم أولاً، أعد تشغيله فوراً. تستبدل الترقية /opt/antimatter وملف الخدمة، وتحافظ على antimatter.env، وconfig.json، و/var/lib/antimatter، والسجلات. عند بدء التشغيل، يحدّث الخادم قاعدة البيانات ويثبّت الإصدارات الأحدث من التطبيقات المدمجة.
إذا غيّر إصدار جديد الملف الافتراضي antimatter.env، يسأل apt عما إذا كنت تريد الإبقاء على نسختك: الإبقاء عليها. يحافظ dnf على نسختك ويحفظ النسخة الجديدة باسم /etc/antimatter/antimatter.env.rpmnew. الترقية تتم للأمام فقط: لا تثبّت إصداراً أقدم فوق أحدث.
إزالة الحزمة
أمر sudo apt remove antimatter أو sudo dnf remove antimatter يوقف الخدمة ويعطّلها، ويحذف البرنامج. يحافظ على البيانات (/var/lib/antimatter)، والإعدادات (/etc/antimatter)، وقاعدة البيانات، ومستخدم antimatter: احذفها بنفسك لإزالة Antimatter بالكامل.
التطبيقات في الحزم والأرشيف
تتضمن الحزم والأرشيف أحدث إصدار موقّع من هذه التطبيقات، في prepackaged_plugins/: دردشة الذكاء الاصطناعي، والمكالمات، وGIFs، والصور الساخرة (Memes)، والملاحظات، والاستطلاعات، وقائمة المهام (Todo)، والقنوات الصوتية، والسبورة البيضاء. إذا لم يكن هناك إصدار متاح لتطبيق ما عند بناء إصدار الخادم، فسيتم استبعاده: تعرض الأداة ls /opt/antimatter/prepackaged_plugins ما يتضمنه إصدارك. يتم تضمين الصور الساخرة (Memes) وقائمة المهام (Todo) ولكن دون تفعيلها: يوضح قسم التطبيقات المضمنة كيفية تثبيتها وتمكينها.
لم يعد Kanban وأدلة التشغيل (Playbooks) مضمّنين مع الخادم أو مع أي من صور Docker: الخادم الذي يحتوي على أحدهما مثبتًا مسبقًا يحافظ عليه أثناء الترقية، بينما يقوم أي شخص آخر بتثبيته من إصداره الخاص، تمامًا مثل التطبيقات أدناه. تطبيقات صور Docker الأخرى غير موجودة أيضًا في الحزم أو الأرشيف: Mail، والتقويم، وGitHub، وGitLab، وJira، وMetrics. قم بتثبيت كل تطبيق، بما في ذلك Kanban وأدلة التشغيل، من إصداراته الخاصة:
| التطبيق | الإصدارات | معرّف التطبيق |
|---|---|---|
| Kanban | antimatter-plugin-boards | focalboard |
| دلائل التشغيل | antimatter-plugin-playbooks | playbooks |
| البريد | antimatter-plugin-mail | com.antimatterchat.mail |
| التقويم | antimatter-plugin-calendar | com.antimatterchat.calendar |
| GitHub | antimatter-plugin-github | github |
| GitLab | antimatter-plugin-gitlab | com.github.manland.mattermost-plugin-gitlab |
| Jira | antimatter-plugin-jira | jira |
| المقاييس | Antimatter-plugin-metrics | com.mattermost.mattermost-plugin-metrics |
يحتوي كل إصدار للتطبيق على حزمة التطبيق (ملف .tar.gz)، وتوقيعه (نفس الاسم مع إضافة .sig)، وملف SHA256SUMS. لتثبيت تطبيق، اسمح بالرفع، ثم أضف الحزمة باستخدام amctl:
# 1. In /etc/antimatter/antimatter.env, add this line, then restart Antimatter
AM_PLUGINSETTINGS_ENABLEUPLOADS=true
sudo systemctl restart antimatter
# 2. Download the bundle where the antimatter user can read it, and install it
cd /tmp
curl -fLO https://github.com/AntimatterChat/antimatter-plugin-boards/releases/download/v<version>/<bundle>.tar.gz
sudo -u antimatter amctl --local plugin add <bundle>.tar.gz
sudo -u antimatter amctl --local plugin enable focalboard
لترقية تطبيق مثبّت بهذه الطريقة، أضف الحزمة الجديدة باستخدام plugin add --force: فترقيات الحزم ترقّي التطبيقات المدمجة فقط. يمكنك إزالة سطر AM_PLUGINSETTINGS_ENABLEUPLOADS مرة أخرى بعد ذلك. راجع تثبيت تطبيقات أخرى لمعرفة الطرق الأخرى لتثبيت التطبيقات.
توقيعات التطبيقات
تُوقّع حزم التطبيقات بمفتاح توقيع تطبيقات Antimatter: كل ملف .tar.gz.sig هو توقيع GPG منفصل لحزمته. يفحص الخادم هذه التوقيعات قبل تثبيت أي تطبيق مدمج. لفحص حزمة بنفسك:
curl -fsSLO https://raw.githubusercontent.com/AntimatterChat/antimatter-docker/main/keys/antimatter-plugin-signing.asc
gpg --import antimatter-plugin-signing.asc
gpg --verify <bundle>.tar.gz.sig <bundle>.tar.gz
يجب أن يُبلّغ gpg عن توقيع سليم من Antimatter Plugin Signing، مع البصمة 06C8 1032 4677 0F08 BBA7 78B9 E69B 05C3 92A6 9A45. كما يحذّر من أن المفتاح غير مُوثَّق بتوقيع موثوق؛ وهذا أمر طبيعي لمفتاح لم توقّعه بنفسك. الإصدار الذي لا يحتوي على ملفات .sig يكون غير موقّع، وتُبيّن ملاحظات الإصدار ذلك.
التثبيت من أرشيف إصدار
الحزمة antimatter-<version>-linux-<arch>.tar.gz (مثل antimatter-0.9.0-linux-amd64.tar.gz) مناسبة لتوزيعات لا تتوفر فيها حزم .deb أو .rpm، أو لتخطيط خاص بك. تحتوي على مجلد واحد باسم antimatter/ يضم bin/antimatter، وbin/amctl، وconfig/config.json، وتطبيقات الويب (client/ وclient-fusion/)، والتطبيقات المضمّنة (prepackaged_plugins/، راجع ما سبق)، وقوالب البريد الإلكتروني والترجمات.
1. تجهيز PostgreSQL
يدعم Antimatter قاعدة بيانات PostgreSQL فقط، الإصدار 15 أو أحدث (الإصدارات الأقدم تبدأ مع خطأ في السجل). أنشئ مستخدمًا وقاعدة بيانات:
sudo -u postgres psql <<'EOF'
CREATE USER antimatter WITH PASSWORD 'a-long-password';
CREATE DATABASE antimatter OWNER antimatter;
EOF
2. فك الضغط والإعداد
sudo tar -xzf antimatter-<version>-linux-amd64.tar.gz -C /opt
sudo useradd --system --user-group antimatter
sudo mkdir -p /opt/antimatter/data
sudo chown -R antimatter:antimatter /opt/antimatter
وجّه الخادم إلى قاعدة البيانات، إما في /opt/antimatter/config/config.json (SqlSettings.DataSource) أو باستخدام متغيرات البيئة، وعرّف عنوان الموقع:
AM_SQLSETTINGS_DRIVERNAME=postgres
AM_SQLSETTINGS_DATASOURCE=postgres://antimatter:a-long-password@localhost:5432/antimatter?sslmode=disable&connect_timeout=10
AM_SERVICESETTINGS_SITEURL=https://chat.example.com
ملف config.json الموجود في الأرشيف هو إعداد افتراضي كامل: تُحفظ التغييرات التي تجريها في وحدة التحكم بالنظام فيه. للاحتفاظ بالإعداد في قاعدة البيانات بدلاً من ذلك، راجع الإعداد.
3. تشغيله كخدمة
وحدة systemd، في /etc/systemd/system/antimatter.service:
[Unit]
Description=Antimatter
After=network.target postgresql.service
[Service]
Type=notify
User=antimatter
Group=antimatter
WorkingDirectory=/opt/antimatter
ExecStart=/opt/antimatter/bin/antimatter
EnvironmentFile=-/etc/antimatter.env
TimeoutStartSec=3600
Restart=always
RestartSec=10
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
ضع متغيرات AM_ الخاصة بك في /etc/antimatter.env (قابلة للقراءة بواسطة root فقط)، ثم:
sudo systemctl daemon-reload
sudo systemctl enable --now antimatter
journalctl -u antimatter -f
يستمع الخادم على المنفذ 8065. افتح http://<server>:8065، أو نطاقك بعد إعداد وكيل عكسي (راجع النطاق وHTTPS)، وأنشئ الحساب الأول: سيصبح مدير النظام.
يدير bin/amctl الخادم قيد التشغيل من سطر الأوامر. على الخادم نفسه، يعمل دون تسجيل الدخول عبر الوضع المحلي: اضبط AM_SERVICESETTINGS_ENABLELOCALMODE=true، ثم نفّذ sudo -u antimatter /opt/antimatter/bin/amctl --local system status.
بالنسبة إلى GIF، ثبّت خدمة GIF (انظر أدناه) واضبط AM_GIFS_SERVICE_URL وAM_GIFS_API_KEY كما في الخطوة 5 من حزم التثبيت.
حزم خدمة GIF والوكيل الدافعي
تتوفر لخدمة GIF والوكيل الدافعي إصدارات مستقلة، وتخضع للقواعد ذاتها الخاصة بالخادم: حزمة .tar.gz، وحزمة .deb وحزمة .rpm لكل من amd64 وarm64، وملف SHA256SUMS. الإصدارات التي تحتوي على شرطة هي إصدارات مسبقة. تحقّق من التحميلات باستخدام sha256sum --check --ignore-missing SHA256SUMS، كما هو الحال مع الخادم.
خدمة GIF (gifs-server)
الإصدارات: github.com/AntimatterChat/gifs-server/releases. الحزمة هي gifs-server-<version>-linux-<arch>.tar.gz؛ وتُسمّى الحزم gifs-server.
sudo apt install ./gifs-server_*_amd64.deb # Debian, Ubuntu
sudo dnf install ./gifs-server-*.x86_64.rpm # Fedora, RHEL
تُثبّت الحزمة:
/usr/bin/gifs-server، وخدمةgifs-serverالتي تعمل باسم مستخدمgifs-serverوتحتفظ بمكتبتها في/var/lib/gifs-server؛- خدمة
gifs-server-stickers، التي تستورد أو تحدّث حزمة الملصقات في/usr/share/gifs-server/stickersعند بدء تشغيلها، ثم تتوقف؛ - إعداداتها،
/etc/gifs-server/gifs-server.env(متغيراتAM_GIFS_، وتُحفظ عند الترقية)، و/etc/gifs-server/api-keys، بمفتاح API واحد في كل سطر، مع توليد مفتاح عشوائي عند التثبيت الأول.
يستمع على 127.0.0.1:8080، لذا يمكن لـ Antimatter على الخادم نفسه الوصول إليه فقط. إذا كان Antimatter يعمل في مكان آخر، فاضبط AM_GIFS_LISTEN=:8080 في gifs-server.env وقَيِّد الوصول إلى المنفذ عبر جدار الحماية. يحدد الملف الإعدادات الأخرى: AM_GIFS_UPLOAD_KEYS (المفاتيح المسموح بها لإضافة GIFs والملصقات، وحذف تلك التي أُضيفت باستخدامها)، وAM_GIFS_PUBLIC_URL، وAM_GIFS_TRUST_PROXY، وAM_GIFS_LOG_LEVEL. يوصي الحزمة باستخدام ffmpeg، وgifsicle، وlibrsvg2-bin (librsvg2-tools في حالة .rpm)، وخط DejaVu: يستخدم الخادم هذه الأدوات لإنشاء صيغ GIF والفيديو والملصقات عند استيراد الملفات أو استلامها، ويعمل دونها.
على غرار الخادم، يكون الخادم مفعّلًا لكنه غير مُشغَّل عند التثبيت. شغّله كما هو موضح في الخطوة 5 من الحزم. بعد الترقية، أعد تشغيله: sudo systemctl restart gifs-server. عند إزالة الحزمة، يبقى الكتالوج في /var/lib/gifs-server.
الوكيل الوسيط للإشعارات الفورية
الإصدارات: github.com/AntimatterChat/push-proxy/releases. الملف المضغوط هو antimatter-push-proxy-<version>-linux-<arch>.tar.gz، وتُسمّى الحزم antimatter-push-proxy. تُثبّت الحزمة /usr/bin/antimatter-push-proxy وخدمة antimatter-push-proxy، التي تعمل باسم مستخدم antimatter-push-proxy وتقرأ /etc/antimatter-push-proxy/antimatter-push-proxy.json (يُحفظ عند الترقية). تُوضع بيانات اعتماد Apple وFirebase في /etc/antimatter-push-proxy/certs: يشرح إشعارات الدفع مصدرها.
sudo apt install ./antimatter-push-proxy_*_amd64.deb # or: sudo dnf install ./antimatter-push-proxy-*.x86_64.rpm
sudo install -o root -g antimatter-push-proxy -m 0640 \
AuthKey_ABCDE12345.p8 firebase-service-account.json /etc/antimatter-push-proxy/certs/
sudoedit /etc/antimatter-push-proxy/antimatter-push-proxy.json
sudo systemctl start antimatter-push-proxy
journalctl -u antimatter-push-proxy -f
في ملف الإعدادات، تكون المسارات نسبية إلى /etc/antimatter-push-proxy: على سبيل المثال "AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8" و"ServiceFileLocation": "./certs/firebase-service-account.json". ثم اضبط خادم الإشعارات الفورية في Antimatter على http://<proxy host>:8066. بعد الترقية، أعد تشغيله: sudo systemctl restart antimatter-push-proxy.
أوامر الخادم الأخرى
إلى جانب تشغيل الخادم (antimatter، أو antimatter server)، يحتوي الملف التنفيذي على بعض أوامر الصيانة. تقرأ هذه الأوامر نفس الإعداد الذي يستخدمه الخادم.
| الأمر | وظيفته |
|---|---|
antimatter version | يطبع الإصدار، رقم البناء، تاريخ البناء، ومعرّف البناء. |
antimatter db ping | يتحقق من إمكانية الوصول إلى قاعدة البيانات. |
antimatter db init | ينشئ الإعداد في قاعدة البيانات (مع ضبط AM_CONFIG على عنوان postgres://). |
antimatter db migrate | يطبّق ترحيلات قاعدة البيانات دون بدء تشغيل الخادم. |
antimatter db version | يطبع آخر ترحيل طُبّق على قاعدة البيانات. |
antimatter import bulk, antimatter export bulk | يستورد أو يصدّر البيانات بالصيغة الجماعية (راجع النسخ الاحتياطي والترقيات). |