1. الغرض من المستند وأدوار المسؤول
الوثيقة مخصصة للمتخصصين الذين يقومون بتكوين برنامج CShark وصيانته في موقع العميل.
تم وصف العمل اليومي مع النظام في وثيقة منفصلة "دليل المستخدم"والنشر - في الوثيقة "تعليمات تثبيت نسخة من البرنامج".
| الدور | مجال المسؤولية |
|---|---|
| مسؤول النظام | طوبولوجيا الكائن، الأجهزة، الكاميرات، شاشات العرض، التكامل، معلمات النظام، التحديث |
| مسؤول مواقف السيارات | قواعد معالجة الأحداث وأوضاع المنطقة والمشغلين وحقوقهم |
| مهندس نظام العملاء | البنية التحتية، والنسخ الاحتياطي، والرصد، والشبكة |
يتم تحديد الحقوق حسب القدوة (القسم 12)؛ التقسيم إلى الأدوار أعلاه تنظيمي.
2. تكوين البرمجيات ووضع المكونات
| الخدمة | الغرض | ميناء |
|---|---|---|
core | خادم التطبيقات: منطق التطبيق، REST API، WebSocket، مستهلكي الأحداث | داخلي |
gateway | بوابة الجهاز: استقبال أحداث الكاميرا والتحكم في لوحة النتائج | 18010/tcp |
web | واجهة ويب ونقطة وصول واحدة إلى API | 8088/tcp |
postgres | قاعدة بيانات PostgreSQL 17 | داخلي |
nats | حافلة الأحداث NATS JetStream | داخلي |
seaweedfs | تخزين إطار الكائن، بروتوكول S3 | 18333/tcp |
تم تضمين ملف تعريف إمكانية الملاحظة في مجموعة أدوات التحقق؛ نشرته جرافانا بتاريخ 13000/tcp، فإن خدماتها المتبقية متاحة فقط داخل شبكة Compose.
يتم تشغيل جميع الخدمات في حاويات داخل محيط الشبكة المغلقة للمنشأة. لا يتم تنفيذ المكالمات إلى الخدمات الخارجية أثناء التشغيل.
3. إدارة الخدمة
دليل العمل: /opt/cshark-stand.
# حالة الخدمات
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml --profile obs ps
# التشغيل
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml --profile obs up -d
# الإيقاف
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml --profile obs stop
# إعادة تشغيل خدمة منفردة
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml restart core
# سجلات الخدمة
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml logs -f core
4. الإعدادات
يتم تعيين المعلمات بواسطة متغيرات البيئة (file .env بجوار ملف وصف الخدمة). بعد تغيير الإعدادات، يجب إعادة تشغيل الخدمة.
| متغير | الغرض | القيمة الافتراضية |
|---|---|---|
CSHARK_DATABASE_URL | سلسلة اتصال قاعدة البيانات | — |
CSHARK_NATS_URL | عنوان حافلة الحدث | nats://nats:4222 |
CSHARK_S3_ENDPOINT_URL | عنوان تخزين الكائن | http://seaweedfs:8333 |
CSHARK_S3_PUBLIC_ENDPOINT_URL | عنوان التخزين لإنشاء روابط للعميل | — |
CSHARK_S3_ACCESS_KEY, CSHARK_S3_SECRET_KEY | مفاتيح الوصول إلى التخزين | — |
CSHARK_S3_BUCKET | حاوية الكائن | cshark-media |
CSHARK_AUTH_ENFORCE | المصادقة الإلزامية | true |
CSHARK_AUTH_SECRET | سر توقيع رمز الجلسة | تعيين أثناء التثبيت |
CSHARK_CORS_ORIGINS | مصادر واجهة الويب المسموح بها | — |
CSHARK_WEB_PORT | منفذ نشر واجهة الويب | 8088 |
CSHARK_OTEL_ENDPOINT | عنوان جامع القياس عن بعد | غير محدد |
5. الإعداد الأولي للكائن
عند تسجيل الدخول لأول مرة، يكون معالج الإعداد الأولي متاحًا. التسلسل:
- قم بتغيير كلمة المرور لحساب المسؤول المدمج.
- إنشاء كائن (وقوف السيارات)، والمستويات، والمناطق، وأماكن وقوف السيارات.
- قم بتحميل الخلفية الرسومية للمستوى ووضع الكائنات على الرسم التخطيطي.
- تسجيل الكاميرات وربطها بأماكن وقوف السيارات.
- إنشاء قوالب وأجهزة للوحات المعلومات.
- قم بإعداد رسم بياني لمناطق إمكانية الوصول ونقاط الدخول.
- إنشاء أدوار وحسابات المشغل.
- تكوين قواعد معالجة الأحداث.
6. إعداد الطوبولوجيا والدوائر
القسم "الإدارة" → "الطوبولوجيا".
التسلسل الهرمي: التنظيم → موقف السيارات → المستوى → المنطقة → مكان وقوف السيارات.
| طبيعة العمل: | النظام |
|---|---|
| إنشاء المستوى | تشير إلى الاسم والرقم التسلسلي |
| إنشاء منطقة | تشير إلى الاسم، مرجع المستوى، النوع |
| إنشاء مكان لوقوف السيارات | الإشارة إلى الرمز (الفريد داخل الكائن)، والمنطقة، والنوع |
| تحميل الطبقة الأساسية للمستوى | قم بتنزيل الملف الرسومي لخطة المستوى |
| التنسيب على الرسم البياني | قم بتعيين إحداثيات وشكل أماكن وقوف السيارات والمناطق والأجهزة في محرر المخطط |
يتم عرض رموز أماكن وقوف السيارات للمستخدمين ويجب أن تتوافق مع العلامات الموجودة على الموقع.
7. إعداد كاميرات تحليل الفيديو
القسم "المعدات".
- قم بتكوين الكاميرا لإرسال الأحداث إلى عنوان بوابة الجهاز (بروتوكول البائع عبر HTTP). يتم تحديد العنوان والمنفذ في إعدادات الكاميرا.
- تظهر الكاميرا التي تصل إلى النظام في قائمة الأجهزة التي لم يتم اكتشافها.
- تسجيل الكاميرا: قم بتعيين الاسم وعنوان الشبكة والموقع.
- ربط الكاميرا بأماكن وقوف السيارات التي تخدمها.
- التحقق من وصول الأحداث: يجب أن تتغير حالة أماكن وقوف السيارات المرتبطة عندما يتغير الوضع.
يتم إجراء مراقبة الأداء تلقائيًا بناءً على إشارات التواجد الدورية. يتم عرض حالة الجهاز في قسم "المعدات" وفي الرسم التخطيطي للموقع. يتم حفظ تاريخ تغييرات الحالة.
بالنسبة للأجهزة التي تدعم التحكم، يتوفر نقل الأوامر عبر قناة الأوامر.
8. إنشاء لوحات المعلومات
القسم "لوحة النتائج".
8.1. قوالب
يصف القالب تخطيط الإطار ويتكون من مناطق:
| نوع المنطقة | المحتويات |
|---|---|
| نص | نص تعسفي مع استبدال قيمة السياق |
| عداد مقاعد مجاني | عدد المقاعد المجانية في منطقة أو كائن |
| سهم الاتجاه | اتجاه الحركة إلى المنطقة |
| الصورة | صورة ثابتة |
| رمز الاستجابة السريعة | الرابط مشفر في الصورة |
| خريطة المستوى | مخطط مستوى لشاشات عالية الدقة |
| جدول المنطقة | ملخص المنطقة |
| المؤشر | مؤشر رقمي |
يتم ضبط حجم الخط تلقائيًا وفقًا لحجم المنطقة؛ إذا كانت سعة المنطقة غير كافية، فسيتم إصدار تحذير عند حفظ القالب.
8.2. أجهزة العرض
- أنشئ جهازًا، وحدد فئة: لوحة LED نصية (EK07، بروتوكول TCP/RS-485) أو كشك ويب على شاشة عالية الدقة.
- تحديد معلمات الاتصال.
- قالب الارتباط والمنطقة ونقطة الدخول.
- تحقق من النتيجة من خلال معاينة الإطار الذي تم إنشاؤه.
يتم إنشاء عنوان عام للنموذج لكشك الويب /kiosk/display/<المعرّف>?token=<الرمز>; تفتح الشاشة هذه الصفحة في وضع الكشك. الرمز يقيد الوصول إلى المحتوى.
8.3. أولويات المحتوى
الطوارئ ← الاستبدال اليدوي ← الجدول الزمني ← التوظيف. يحل محتوى الطوارئ (وضع الحريق أو المأوى) محل أي محتوى آخر ولا يمكن استبداله يدويًا.
8.4. المرسل إليه النصوص
تنقسم أسباب عدم التوفر إلى عامة (معروضة للسائق) وإدارية (متاحة للموظفين فقط). النصوص الإدارية غير موجودة فعليًا في استجابة الكشك العام وفي تدفق WebSocket. الحالة التشخيصية للشاشة متاحة على /api/displays/{id}/state للموظفين المعتمدين فقط.
10. تحديد أوضاع ومناطق الكائن
حالات المنطقة والكائن: الموظفون، والحرائق، والمأوى، والصيانة.
| طريقة تغيير الوضع | النظام |
|---|---|
| يدويا | قسم "الإدارة" ← "المناطق" ← اختيار الوضع |
| تلقائيا | وذلك بناء على إشارة من أنظمة الإطفاء الأوتوماتيكية من خلال بوابة الجهاز |
يتغير تغيير الوضع على الفور: توفر أماكن وقوف السيارات في المنطقة، ومحتويات لوحات المعلومات (يحظى محتوى الطوارئ بالأولوية القصوى)، وقواعد معالجة الأحداث، وتكوين الإشعارات.
يعود المسؤول إلى الوضع العادي يدويًا بعد إزالة السبب.
11. وضع قواعد معالجة الأحداث
القسم "الإدارة" ← "القواعد".
يتم تعيين القاعدة وفقًا للمخطط التالي:
الزناد (نوع الحدث) × المنطقة (الجسم، المنطقة، مجموعة الأماكن، مكان محدد) × شرط (الوقت، الحالة، علامات أخرى) → الإجراءات
الإجراءات المتاحة: إخطار المشغل، إنشاء حادث، تغيير الحالة، إرسال أمر إلى الجهاز.
تدخل القاعدة حيز التنفيذ دون إعادة تشغيل الخدمات. يتم تحديد الترتيب الذي يتم به تطبيق القواعد حسب أولويتها.
أمثلة: "انتهاك العلامات في منطقة للأشخاص ذوي القدرة المحدودة على الحركة ← خلق حادثة ذات مستوى حرج"؛ "تم احتلال مكان وقوف السيارات عند المدخل لأكثر من 10 دقائق دون إذن ← قم بإبلاغ مشرف المناوبة."
12. إدارة المستخدمين والأدوار والحقوق
القسم "الإدارة" ← "المستخدمون" و"الأدوار".
- يتم تعيين الأذونات في مساحة واحدة بالنموذج "resource:action" (على سبيل المثال،
displays:manage,users:manage). - الدور هو مجموعة مسماة من الأذونات. يتم تعيين دور للمستخدم؛ بالإضافة إلى ذلك، قد يتم إصدار تصاريح فردية.
- لا يتم عرض أقسام الواجهة التي لا يمكن للمستخدم الوصول إليها بسبب الحقوق في التنقل.
- يتم تسجيل إجراءات المستخدم في سجل الإجراءات.
متطلبات كلمة المرور: 6 أحرف على الأقل. يتم تخزين كلمات المرور في شكل تجزئات (خوارزمية bcrypt)؛ ولا يتم تخزينها أو نقلها بنص واضح.
يتم تنفيذ الجلسات بواسطة الرموز الموقعة؛ يتم تحديد سر التوقيع بواسطة المعلمة CSHARK_AUTH_SECRET. يؤدي تغيير السر إلى إنهاء جميع الجلسات النشطة.
13. إعداد التكامل مع الأنظمة الخارجية
القسم "الإدارة" ← "التكاملات".
| فرصة | الوصف |
|---|---|
| واجهة برمجة تطبيقات REST | أدلة المرافق، وتوافر أماكن وقوف السيارات، وتلقي معلومات حول جلسات نظام التحكم في الوصول الخارجي؛ مواصفات OpenAPI متاحة على /openapi.json |
| مفاتيح الوصول | يتم إنشاؤها بنطاقات الرؤية وحدود معدل الطلب |
| خطافات الويب الصادرة | الاشتراك في نظام خارجي للأحداث؛ يتم توقيع الطلبات، ويتكرر التسليم إذا كان هناك خطأ |
ويتم التفاعل مع نظام ركن السيارات الآلي الشريك (مجموعة المدخل) من خلال هذه الآليات.
14. الاحتفاظ بالبيانات وسياسات الاحتفاظ بها
| البيانات | موقع التخزين | مدة التخزين: مدة تخزين المنتجات |
|---|---|---|
| الدلائل والطوبولوجيا والمستخدمين | قاعدة بيانات قاعدة البيانات | إلى أجل غير مسمى |
| الزيارات، وأحداث مواقف السيارات، ولقطات الإشغال | جداول PostgreSQL عادية مع فهارس الكائنات والوقت | تحددها السياسة التشغيلية المعتمدة |
| لقطات الحدث | تخزين الكائن | قابلة للتخصيص ومتوافقة مع فترة تخزين الأحداث |
| سجل نشاط المستخدم | قاعدة بيانات قاعدة البيانات | قابل للتخصيص |
يتم تحديد فترة التخزين من خلال السياسات الموجودة في قسم إعدادات النظام. اللقطات متاحة فقط عبر روابط محدودة الوقت؛ تم إغلاق الوصول العام المباشر إلى مرافق التخزين.
15. النسخ الاحتياطي والاستعادة
15.1. النسخ الاحتياطي
tools/backup/backup.sh /path/to/backups
يتم إنشاء تفريغ قاعدة البيانات وبيان الوسائط. يتم نسخ كائنات التخزين بشكل منفصل باستخدام أدوات المزامنة - يتم إصدار الأمر بواسطة البرنامج النصي. التردد الموصى به: قاعدة البيانات - يوميًا (وفقًا للجدول الزمني الخاص بالمضيف)، المواد الإعلامية - أسبوعيًا. لا يقل عمق تخزين النسخ عن مدة تخزين البيانات في النظام.
15.2. التحقق من النسخة
الاستعادة إلى قاعدة بيانات مؤقتة دون المخاطرة بقاعدة البيانات العاملة:
tools/backup/restore.sh backups/cshark-XXXX.dump cshark_restore_check
يعرض البرنامج النصي عدادات التحكم (مساحات السيارات، الزيارات، الحوادث، المستخدمين) للتسوية.
15.3. التعافي
توقف قبل التعافي core وgateway عبر ملف الإنشاء /opt/cshark-stand/compose.yml، قم بتنفيذ برنامج الاسترداد القياسي من التسليم ثم ابدأ تشغيل نفس الخدمات. يتم تسجيل الأوامر والمسار إلى النسخة الاحتياطية في سجل العمل؛ يتم اختبار الاستعادة أولاً على حامل منفصل.
تتم استعادة مواد الوسائط عن طريق المزامنة في حاوية كائن مع التحقق من البيان.
16. المراقبة والتشخيص
| تحقق | الأمر أو العنوان |
|---|---|
| صحة التطبيق | curl -fsS http://127.0.0.1:8088/api/health |
| حالة الخدمة | sudo docker compose --env-file /opt/cshark-stand/.env -f /opt/cshark-stand/compose.yml --profile obs ps |
| المجلات | sudo docker compose --env-file /opt/cshark-stand/.env -f /opt/cshark-stand/compose.yml logs -f core |
يقوم البرنامج بإنشاء مقاييس وسجلات وتتبعات وفقًا لمعيار OpenTelemetry. عند تمكين ملف تعريف إمكانية المراقبة، تتوفر لوحات Grafana.
المؤشرات الرئيسية:
| المؤشر | ماذا يعني ذلك |
|---|---|
| عدد الأحداث المنشورة | استلام البيانات من المعدات |
| عدد الأحداث التي تمت معالجتها | تشغيل مستهلكي خادم التطبيق |
| حجم الرسائل غير المجهزة | النمو يعني أن الخادم لا يمكنه مواكبة ذلك أو توقف المستهلك |
| عدد عملاء WebSocket المتصلين | أماكن عمل المشغل النشطة |
يتم استبعاد البيانات الشخصية والحساسة تلقائيًا من السجلات.
17. تحديث البرنامج
يتم بدء التحديث من قبل مسؤول العميل. لا توجد آليات للتحديث القسري والتحكم عن بعد من خارج محيط المنشأة.
الإصدار الحالي لا يتضمن التحديث التلقائي عن بعد. قبل تنفيذ آلية مُدارة واعدة، يتم إجراء التحديث كتسليم تنظيمي منفصل: قبول المجموعة الموقعة غير المتصلة بالإنترنت، والتحقق من SHA-256 وتوقيع المفتاح الخارجي، وإنشاء نسخة احتياطية والتحقق منها، وتنفيذ التعليمات الخاصة بالإصدار واختبار الدخان الكامل. يتم تنفيذ العملية من قبل المسؤول خلال فترة الصيانة المتفق عليها.
تتبع عمليات الترحيل مبدأ الضغط والتوسيع: يتم إصدار تغييرات المخطط التفصيلية في إصدار يتبع إصدار التعليمات البرمجية التي تعمل بدونها. لذلك، يعد الرجوع إلى إصدار سابق من التعليمات البرمجية أمرًا آمنًا ولا يتطلب التراجع عن المخطط.
يُسمح بالإرجاع فقط على المجموعة المحفوظة والمختبرة مسبقًا من الإصدار السابق بعد تقييم مدى توافق نظام البيانات. إن التغيير التعسفي لعلامة الحاوية في مثيل مثبت ليس تحديثًا قياسيًا.
18. الأعطال والحلول النموذجية
| تسجيل | السبب المحتمل | الإجراءات |
|---|---|---|
| لا يتم تحديث حالات أماكن وقوف السيارات | تسليم الحدث مكسور | التحقق من توفر الكاميرا؛ التحقق من سجلات بوابة الجهاز؛ تحقق من معدل الرسائل غير المعالجة - إذا زاد، أعد تشغيل خادم التطبيق |
| الأحداث تصل دون إطارات | تخزين الكائنات غير متوفر | التحقق من خدمة التخزين؛ لم يتم فقدان الأحداث، وستكون الإطارات مفقودة فقط خلال فترة عدم التوفر |
| لا يتم تحديث لوحة النتائج | جهاز العرض غير متوفر | تحقق من الاتصال في قسم "المعدات"؛ معاينة الإطار - إذا تشكل الإطار، تكون المشكلة في قناة الاتصال مع الجهاز |
| واجهة الويب غير متوفرة | الخدمة لا تعمل أو المنفذ مشغول | التحقق من حالة الحاويات. إذا كان هناك تعارض في المنفذ، قم بتعيين CSHARK_WEB_PORT وإعادة التشغيل |
| يتم إعادة تشغيل واجهة الويب بشكل دوري | شبكة الحاويات المفقودة | إعادة إنشاء الخدمة بالمفتاح --force-recreate |
| لم يتم تسجيل كافة المستخدمين | تم تغيير سر توقيع الرمز المميز | تحقق CSHARK_AUTH_SECRET; بعد تغيير السر، مطلوب إعادة تسجيل الدخول |
| حدث خطأ أثناء تحميل الإطارات في وحدة التخزين مما يشير إلى وجود تناقض في الوقت | اختلاف ساعة المضيف والحاوية | مزامنة وقت المضيف عبر NTP |
| حجم قاعدة البيانات آخذ في الازدياد | لم يتم تكوين سياسات الاستبقاء | اضبط فترة تخزين الأحداث والإطارات في إعدادات النظام |
19. موقع الملفات والمكونات
| مكون | الموقع |
|---|---|
| ملف وصف الخدمة | /opt/cshark-stand/compose.yml |
| إعدادات البيئة | /opt/cshark-stand/.env |
| التفاصيل الأولية | /opt/cshark-stand/INITIAL-CREDENTIALS.txt |
| سجل التثبيت | /opt/cshark-stand/install.log |
| بيانات قاعدة البيانات | حجم عامل الميناء pg_data |
| بيانات تخزين الكائنات | حجم عامل الميناء seaweed_data |
| بيانات ناقل الحدث | حجم عامل الميناء nats_data |
| الكود المصدري لخادم التطبيق (داخل الصورة) | /app/apps/core/app/ |
| نص مصدر بوابة الجهاز (داخل الصورة) | /app/apps/gateway/gateway/ |
| ترحيل مخطط قاعدة البيانات | /app/apps/core/alembic/versions/ |
| ملفات واجهة الويب الثابتة | /usr/share/nginx/html/ في حاوية واجهة الويب |
| مواصفات واجهة البرنامج | http://<العنوان>:8088/openapi.json |
| وثائق API التفاعلية | http://<العنوان>:8088/docs |
الوصول داخل الحاوية:
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml exec core sh
docker run --rm cshark-core:<الإصدار> cat /etc/os-release # نظام التشغيل الأساسي للصورة
20. الدعم الفني
| قناة | معنى |
|---|---|
| المنظمة | جمعية ذات مسؤولية محدودة "كومبيتينسيا" |
| الهاتف: | +7 495 532-61-18 |
| وضع التشغيل | الاثنين - الجمعة، 09:00 - 18:00 بتوقيت موسكو |
| عنوان الدعم | 115280، موسكو، ش. لينينسكايا سلوبودا، 21 عاما، مبنى 1 |
يتم عرض إجراءات معالجة الطلبات والأولويات وأوقات الاستجابة في الوثيقة "وصف العمليات التي تضمن صيانة دورة حياة البرنامج".