لماذا تستضيف Rocket.Chat ذاتيًا على خادم VPS
تذهب Rocket.Chat أبعد من مجرد أداة مراسلة للفِرَق: فهي تقدّم وحدة قناة متعددة أصلية (WhatsApp Business، البريد الإلكتروني، أدوات دردشة على المواقع)، ومكالمات صوتية ومرئية، واتحادًا عبر بروتوكول Matrix. لوكالة أو مؤسسة صغيرة تريد توحيد التواصل الداخلي ودعم العملاء، تتجنّب الاستضافة الذاتية على VPS تعدُّ الاشتراكات وتُبقي مجمل المراسلات على بنية تحتية تتحكّم أنت بها. تعتمد Rocket.Chat على MongoDB، ما يجعلها أكثر نهمًا قليلاً من Mattermost، لكنه يفتح الباب أمام تكاملات غنية وسوق للإضافات.
فوائد ملموسة لRocket.Chat ذاتية الاستضافة
- وحدة قناة متعددة مدمجة لمعالجة الدعم عبر الويب والبريد والمراسلة من واجهة واحدة.
- مكالمات صوتية/مرئية ومشاركة الشاشة دون الاعتماد على خدمة طرف ثالث.
- اتحاد Matrix لربط خادمك بمؤسسات أخرى.
- سوق تطبيقات وكتالوج واسع من التكاملات (webhooks وbots).
- تخصيص واسع لسمة المنصة وهويتها البصرية.
- بيانات المحادثات والملفات محفوظة على خادم VPS الخاص بك.
- SSO (LDAP، SAML، OAuth) مجاني في الاستضافة الذاتية — دون تكلفة إضافية خلافًا لSlack.
المتطلبات العتادية والبرمجية
Rocket.Chat وMongoDB متطلّبتان نسبيًا من حيث الذاكرة. لفريق حتى 50 مستخدمًا، خصّص خادم VPS بـ 2 إلى 4 vCPU وذاكرة (RAM) لا تقل عن 4 غيغابايت؛ اهدف إلى 8 غيغابايت لمنصة نشطة مع قناة متعددة ومكالمات مرئية. يجب حتمًا أن تعمل MongoDB في وضع replica set لأن Rocket.Chat تستخدم oplog للوقت الحقيقي. احسب 30 إلى 50 غيغابايت من SSD. تحتاج إلى Docker وCompose، ونطاق فرعي مع سجل A، وreverse proxy يتعامل مع WebSockets.
نشر Rocket.Chat مع Docker وSSL
توفير خادم VPS
ثبّت Docker وإضافة Compose، وأنشئ /opt/rocketchat. تحقّق من كفاية الذاكرة (RAM): يمكن لMongoDB وRocket.Chat إشباع خادم VPS بذاكرة 2 غيغابايت تحت الحِمل.
إعداد MongoDB في replica set
صرِح عن خدمة mongodb (الصورة bitnami/mongodb أو mongo) مع تفعيل replica set: إلزامي لoplog. من دون هذه الخطوة، تبدأ Rocket.Chat لكن الوقت الحقيقي وبعض الوظائف تفشل. احفظ البيانات في وحدة تخزين مخصّصة.
تعريف خدمة Rocket.Chat
أضِف خدمة rocketchat (الصورة registry.rocket.chat/rocketchat/rocket.chat) مع المتغيرات MONGO_URL وMONGO_OPLOG_URL وROOT_URL بصيغة HTTPS. اجعلها تعتمد على MongoDB واعرض المنفذ 3000 داخليًا فقط.
التشغيل والتحقّق
نفّذ docker compose up -d ثم docker compose logs -f rocketchat. يُرحّل التشغيل الأول مخطط MongoDB وقد يستغرق دقيقة إلى دقيقتين. انتظر الرسالة التي تشير إلى جاهزية الخادم على المنفذ 3000.
وضع reverse proxy وSSL
مع Caddy: chat.yourdomain.com { reverse_proxy localhost:3000 }. مع Nginx، مرّر الطلبات إلى 127.0.0.1:3000 مع تمرير ترويستَي Upgrade/Connection لWebSocket، ثم ولّد الشهادة عبر certbot.
إغلاق مساعد التثبيت
إذا تُرك وشأنه، يعرض Rocket.Chat عند أول تحميل مساعدًا يُنشئ حساب المسؤول — ويمكن لأي زائر يصل قبلك أن يستحوذ عليه. مرّر ADMIN_USERNAME وADMIN_PASS وADMIN_EMAIL وOVERWRITE_SETTING_Show_Setup_Wizard=completed كمتغيّرات بيئة منذ أول إقلاع.
الاتصال لأول مرة
في تثبيت من كتالوج ServOrbit، يوجد حساب المسؤول سلفًا بكلمة مرور عشوائية معروضة في مساحة العميل. افتح https://chat.yourdomain.com، سجّل الدخول، غيّر كلمة المرور، عطّل التسجيل العمومي إذا كانت النسخة خاصة، واضبط SMTP للدعوات.
الإدارة بعد النشر: القنوات والأدوار والwebhooks
بعد تسجيل الدخول كمسؤول، انتقل إلى Administration > Rooms لإنشاء قنواتك (قناة عامة، مجموعة خاصة، قناة نقاش). حدّد اتفاقية تسمية منذ البداية، مثل: #فريق-dev و#دعم-العملاء و#إعلانات-عامة. عيّن الأدوار عبر Administration > Roles: الأدوار Admin وModerator وUser وGuest مهيّأة مسبقًا؛ يمكنك إنشاء أدوار مخصّصة بصلاحيات دقيقة (قراءة دون كتابة، رؤية دون دعوة، إشراف دون إدارة). وللفِرَق الكبيرة، استخدم مجموعات LDAP لتعيين الأدوار تلقائيًا عند تسجيل الدخول. تتيح webhooks الواردة إرسال إشعارات من أدوات خارجية (GitLab، Grafana، CRM) مباشرةً إلى قناة: Administration > Integrations > New Integration > Incoming WebHook. يولّد Rocket.Chat رابطًا فريدًا؛ يرسل المستدعي طلب POST بتنسيق JSON يتضمّن على الأقل حقل text. اسم مستعار وصورة رمزية اختيارية يساعدان في تمييز مصدر الرسالة للوهلة الأولى.
ربط القنوات المتعددة: WhatsApp وأداة الدردشة والبريد
توحّد وحدة Omnichannel القنوات الخارجية في طابور تذاكر تديره فرقتك. فعّلها في Administration > Omnichannel > Activation. لأداة الدردشة على الويب، انتقل إلى Omnichannel > Livechat > Installation: يولّد Rocket.Chat مقتطفًا بلغة JavaScript تضعه في موقعك مع إمكانية تخصيص لونه وعنوانه والحقول المملوءة مسبقًا. للبريد الإلكتروني، اضبط عنوان IMAP في Omnichannel > Email Inbox: كل رسالة واردة تُنشئ تذكرة مسنَدة تلقائيًا لقسم الدعم. لWhatsApp Business API، تحتاج إلى مزوّد معتمد (BSP) ك360dialog أو Twilio: من سوق التطبيقات، ثبّت تطبيق WhatsApp وأدخل بيانات BSP. تصل محادثات WhatsApp إلى الطابور نفسه مع سجل موحّد. يتنقّل الوكلاء بين القنوات دون تغيير الأداة — وهذه الميزة الأساسية لقناة متعددة أصلية.
SSO مجاني في الاستضافة الذاتية. يدعم Rocket.Chat كلًا من LDAP/Active Directory وSAML 2.0 وOAuth (مثل Google وGitHub وGitLab) دون تكلفة اشتراك إضافية. على Slack، يقتصر SAML SSO على خطط Business+؛ أما على Rocket.Chat ذاتي الاستضافة فيمكن تفعيله في Administration > Settings > LDAP أو > SAML. وهذا مميّز رئيسي للشركات التي تستخدم Active Directory أو IdP مثل Keycloak.
تحديث Rocket.Chat بDocker (rolling update)
نسخ احتياطي لMongoDB قبل أي تحديث
نفّذ mongodump من داخل الحاوية: docker exec <mongodb_container> mongodump --out /data/backup/. انسخ الdump خارج الخادم (عبر scp أو rsync). لا تتجاهل هذه الخطوة: بعض ترحيلات مخطط Rocket.Chat لا رجعة فيها.
تحديث صورة Docker
في ملف docker-compose.yml، غيّر وسم الصورة (مثال: rocket.chat:7.4 إلى rocket.chat:7.5). ثم نفّذ docker compose pull && docker compose up -d. تتوقف Rocket.Chat، تنطلق الصورة الجديدة وتُرحّل قاعدة البيانات. راقِب السجلات: docker compose logs -f rocketchat.
التحقّق من الترحيل والتراجع عند الحاجة
بعد إعادة التشغيل، سجّل الدخول وتحقّق من Administration > Info أن الإصدار المعروض مطابق للهدف. إذا فشل الترحيل، أوقف الحاوية، استعد الdump بmongorestore، وأعد الصورة القديمة. لا تتيح Rocket.Chat تراجعًا تلقائيًا — الdump هو شبكة الأمان الوحيدة.
استكشاف الأخطاء: مشكلات حقيقية شائعة
replica set غير مهيّأ: هذا هو الخطأ الأول. من دون rs.initiate()، يكون oplog غير متاح والدردشة الحقيقية معطّلة. إذا استخدمت صورة Bitnami، مرّر MONGODB_REPLICA_SET_MODE=primary وMONGODB_REPLICA_SET_KEY. WebSocket منقطع: إذا وصلت الرسائل عبر HTTP polling بدل WebSocket، تحقّق أن reverse proxy يمرّر ترويستَي Upgrade وConnection. مساعد التثبيت متاح علنيًا: إذا لم تمرّر OVERWRITE_SETTING_Show_Setup_Wizard=completed، يستطيع أي شخص إنشاء حساب المسؤول. ذاكرة MongoDB مستنزفة: يمكن لWiredTiger استهلاك 50٪ من الذاكرة افتراضيًا — حدّده ب--wiredTigerCacheSizeGB 0.5. خطأ SSL داخلي: تحقّق أن ROOT_URL يحتوي نطاقك بصيغة HTTPS دون شرطة مائلة في النهاية.
مراقبة نسختك من Rocket.Chat
لاكتشاف الأعطال سريعًا، ضع ثلاث طبقات للمراقبة. طبقة الحاويات: يعطي docker stats --no-stream المعالج والذاكرة والشبكة لحظيًا. اضبط تنبيهًا عند توقف حاوية عبر docker events --filter event=die في سكريبت systemd؛ حلقة إعادة تشغيل بسيطة تكفي للحالات غير الحرجة. الطبقة التطبيقية: تعرض Rocket.Chat مقاييس Prometheus على /metrics (فعّلها في Administration > Settings > General > Enable Prometheus). اربطها بGrafana للوحات معلومات المستخدمين المتصلين والرسائل في الدقيقة وزمن استجابة WebSocket وحجم قاعدة MongoDB. اضبط تنبيهات على العتبات الحرجة: استهلاك ذاكرة MongoDB يتجاوز 80٪، طابور رسائل معلّق، أو شهادة SSL ستنتهي في أقل من 14 يومًا. الطبقة التحتية: فحص HTTP خارجي على عنوان خادمك لتلقّي تنبيه عند أي انقطاع شامل. راقِب أيضًا أحجام أجزاء Docker بانتظام: قاعدة MongoDB والملفات التي يرفعها المستخدمون قد تنمو بسرعة على نسخة نشطة.
خطأ replica set في MongoDB: إذا ظهر في السجلات MongoServerError: not primary and secondaryOk=false، فاتصالك يشير إلى عقدة ثانوية أو لم يُنتخَب رئيس بعد. تحقّق بdocker exec -it <mongodb> mongosh أن حالة العضو PRIMARY عبر rs.status(). إذا لم يُهيّأ replica set، نفّذ rs.initiate() يدويًا مرة واحدة.
Rocket.Chat مقابل Mattermost
| المعيار | Rocket.Chat | Mattermost |
|---|---|---|
| قاعدة البيانات | MongoDB (replica set إلزامي) | PostgreSQL |
| بصمة الذاكرة | أكثر نهمًا (MongoDB) | أكثر اقتصادًا عند الحِمل نفسه |
| القناة المتعددة / دعم العملاء | وحدة أصلية مدمجة | عبر تكاملات طرف ثالث |
| مكالمات صوتية/مرئية | مدمجة | عبر إضافات / Calls (نسخة مدفوعة) |
| الاتحاد | Matrix | محدود |
| SSO (LDAP / SAML) | مجاني في الاستضافة الذاتية | مدفوع في ما يتجاوز Pro |
| سوق التطبيقات | غني وأصلي | إضافات، كتالوج أكثر محدودية |
| الجمهور المستهدف | تواصل موحّد + دعم العملاء | الفِرَق التقنية وChatOps |
| الإعداد | مزيد من الضبط (replica set) | أكثر مباشرةً مع PostgreSQL |