إنتقل إلى المحتوى الرئيسي

إشعارات Slack

تستخدم Sham Bus تطبيق Slack باسم ShamBus Notifications. لا تُحفظ روابط Incoming Webhook في Git أو .env.prod، بل في ملفات محمية على خادم الإنتاج:

/opt/shambus/.runtime-secrets/slack/
├── dev.url
├── bugs.url
├── operations.url
└── releases.url

قبل التفعيل تكون صلاحية المجلد 0700 والملفات 0600. يحول سكربت التفعيل المجلد إلى 2750 والملفات إلى 0640 مع المجموعة الرقمية الخاصة بمستخدم Alertmanager غير المميز (65534). يبقى حساب النشر مالك الملفات، ولا تُمنح أي صلاحية لـother. يحافظ setgid على المجموعة عند التدوير. يحتوي كل ملف على رابط Webhook واحد فقط وسطر جديد اختياري.

تستخدم GitHub Actions أسرار المستودع المقابلة التالية، مع رجوع مؤقت إلى SLACK_WEBHOOK_URL للتوافق مع الإعداد القديم:

SLACK_DEV_WEBHOOK_URL
SLACK_BUGS_WEBHOOK_URL
SLACK_OPERATIONS_WEBHOOK_URL
SLACK_RELEASES_WEBHOOK_URL

التوجيه

المسارالقناة المقصودةالمحتوى
dev#shambus-devتكاملات التطوير والمرحلة التجريبية
bugs#shambus-bugsGlitchTip وتنبيهات التطبيق والبنية وفشل النسخ الاحتياطي
operations#shambus-operationsطوارئ السائق والأحداث التشغيلية الحرجة
releases#shambus-releasesنشرات الإنتاج والموبايل والرجوع

يمكن أن تشير الملفات مؤقتاً إلى Webhook واحد أثناء التهيئة، لكن الرسائل ستصل عندها إلى القناة المرتبطة بذلك الـWebhook؛ حقل القناة داخل payload لا يتجاوز ربط Slack.

التفعيل

بعد إنشاء Webhooks من إعدادات تطبيق Slack، اكتبها مباشرة على الخادم ولا تنسخها إلى المحادثات أو السجلات. ثم غيّر في .env.prod:

SLACK_SECRETS_DIR=./.runtime-secrets/slack
ALERTMANAGER_CONFIG_FILE=./infrastructure/docker/alertmanager/alertmanager.slack.yml

فعّل الإعداد. السكربت idempotent: يتحقق من الملفات، يحدّث .env.prod من دون أسرار، يعيد إنشاء Alertmanager، يربط GlitchTip، ثم يتحقق من المنظومة:

./infrastructure/scripts/configure-slack-production.sh

التحقق

التحقق الآمن من الملفات والإعدادات والمستلمين، من دون إرسال رسالة:

./infrastructure/scripts/verify-slack-production.sh

اختبار قبول يرسل رسالة واحدة لكل Webhook مختلف ويحقن تنبيهاً اصطناعياً قصير العمر عبر Alertmanager الحقيقي:

./infrastructure/scripts/verify-slack-production.sh --send-test

للإشعارات التشغيلية من مهمة خادم، استخدم السكربت المشترك حتى لا يظهر السر في سطر أوامر curl:

./infrastructure/scripts/notify-slack.sh \
operations warning "عنوان مختصر" "رسالة تشغيلية بلا بيانات عميل"

لا ترسل الأسماء أو الهواتف أو نصوص تذاكر الدعم أو رموز الحجز أو الأسرار. استخدم معرفاً داخلياً ورابطاً إلى النظام المحمي عند الحاجة للتحقيق.

تدوير Webhook

  1. أنشئ Webhook جديداً للقناة نفسها.
  2. استبدل الملف المطلوب كتابةً ذرية وبصلاحية 0600.
  3. شغّل configure-slack-production.sh ليعيد صلاحية المجموعة المقيدة، ويعيد إنشاء Alertmanager، ويحدّث GlitchTip عند تدوير bugs.url.
  4. شغّل فحص القبول واقرأ الرسالة في القناة.
  5. ألغِ Webhook القديم من إعدادات تطبيق Slack.

إذا فشل Slack، تبقى تنبيهات Alertmanager متجهة أيضاً إلى ntfy؛ تعطل مزود واحد لا يجب أن يلغي قناة الإنذار الأخرى.