إشعارات 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-bugs | GlitchTip وتنبيهات التطبيق والبنية وفشل النسخ الاحتياطي |
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
- أنشئ Webhook جديداً للقناة نفسها.
- استبدل الملف المطلوب كتابةً ذرية وبصلاحية
0600. - شغّل
configure-slack-production.shليعيد صلاحية المجموعة المقيدة، ويعيد إنشاء Alertmanager، ويحدّث GlitchTip عند تدويرbugs.url. - شغّل فحص القبول واقرأ الرسالة في القناة.
- ألغِ Webhook القديم من إعدادات تطبيق Slack.
إذا فشل Slack، تبقى تنبيهات Alertmanager متجهة أيضاً إلى ntfy؛ تعطل مزود واحد لا يجب أن يلغي قناة الإنذار الأخرى.