Server Admin Panel
لوحة إدارة خادم RoqueOS المتصل، مدمجة في التطبيق (Launchpad ← Server Admin). يستبدل HTML القديم في <your-server>:27021/admin — يستمر في العمل كـ fallback (طوارئ، scripts)، لكن اللوحة الأصلية هي حيث يحدث كل شيء يوميًا.
الأقسام المتاحة دائمًا
| القسم | ماذا يفعل |
|---|---|
| المراقبة | CPU/RAM/قرص/Docker مباشر، أعلى الحاويات |
| API Keys | إنشاء/إلغاء المفاتيح، عرض الأذونات، السجلات حسب المفتاح |
| سجل الاستخدام | السجلات حسب API Key (عدد الطلبات، IPs فريدة، النشاط) |
| Cloudflare Tunnel | حالة tunnel، إنشاء/إزالة المسارات، قائمة النطاقات الفرعية |
| الشبكة | LAN IP مكون، LANs أخرى محفوظة للوصول المباشر |
| الترجمات | مزودي OpenSubtitles / Subdl لـ Video Player |
| الموارد والإصدار | إصدار الخادم، التحديث متاح، الميزات النشطة |

أقسام multi-tenant (مُحَكَّمة بـ flag)
تظهر 5 أقسام إضافية فقط عندما يكون flag multiTenant نشطًا في Admin Panel ← Settings ← Cloud feature flags:
| القسم | ماذا يفعل |
|---|---|
| المستخدمون والدعوات | دعوة الأشخاص لاستخدام الخادم معك |
| أذونات التطبيقات | قوالب policy (مسموح / قياسي / مقيد) |
| استخدام الموارد | CPU/RAM/قرص/نطاق ترددي مجمع (متوافق مع LGPD) |
| التنبيهات | قواعد "تنبيه عند الاستخدام > X%" عبر email/Slack |
| سجل التدقيق | من فعل ماذا ومتى (metadata، لا محتوى أبدًا) |
لماذا محكومة بـ flag
يتطلب multi-tenant schema جديد (Firestore + SQLite على الخادم) ليس plug-and-play في جميع الـ deploys بعد. الاحتفاظ به مفتوحًا افتراضيًا سيكشف UI دون backend جاهز. عندما يتم shipping وحدة members في roqueos-server، يصبح flag ON افتراضيًا.
كيفية التشغيل الآن (Admin Panel فقط — ليس لكل مستخدم):
- تسجيل دخول admin في
/app - Launchpad ← Admin Panel
- Settings ← قم بالتمرير إلى Cloud Product (الميزات المتقدمة)
- شغل Multi-tenant (members + أذونات + تنبيهات) ← Save
- ارجع إلى Server Admin Panel ← تظهر 5 عناصر جديدة في sidebar
المستخدمون والدعوات

- زر "دعوة مستخدم" يفتح modal مع email + role (Owner/Admin/User)
- يتم إرسال email عبر SMTP للخادم برابط القبول
- بعد القبول، يدخل المستخدم في القائمة مع شارة الحالة (معلق/نشط/ملغى)
- قائمة العمليات لكل سطر تسمح بـ إلغاء الوصول (يعود إلى قائمة الملغية، لا يحذف البيانات)
Roles:
- Owner: أنت (1 لكل خادم)
- Admin: يدير المستخدمين الآخرين و policies، يرى كل شيء
- User: يستخدم التطبيقات وفقًا لـ policy النشطة
أذونات التطبيقات

3 قوالب مُعَدَّة مسبقًا:
| القالب | من يرى ماذا |
|---|---|
| مسموح | جميع التطبيقات مفتوحة لجميع roles. فريق صغير موثوق. |
| قياسي | Admin يرى كل شيء. User يرى الإنتاجية، الوسائط، المرافق (ليس Server Admin). |
| مقيد | User يرى فقط Finder، Notes، Browser و Chat. كل شيء آخر مخفي. |
تطبيق القالب مدمر — يعيد كتابة overrides لكل مستخدم الموجودة. لهذا السبب يوجد modal تأكيد إلزامي:

يسرد modal النتائج الـ 3 للإجراء:
- ✓ إعادة كتابة policies الخادم للقالب المحدد
- ⚠ حذف جميع overrides لكل مستخدم الموجودة (لا يمكن التراجع)
- ⟲ نسخة احتياطية من الحالة السابقة تبقى في
/admin/policies/historyلمدة 30 يومًا
يحتاج المستخدم للنقر تطبيق القالب (زر أحمر) للتأكيد. إلغاء هو الافتراضي.
استخدام الموارد

البطاقات التي تعرض الاستهلاك المجمع:
- CPU: % استخدام المضيف المتوسط
- ذاكرة RAM: GB مستخدمة / المجموع
- القرص: GB مستخدمة / المجموع المخصص
- النطاق الترددي الشهري: GB منقولة / حصة Hetzner (20 TB في الخطة القياسية)
النطاق الترددي ملون حسب threshold:
- < 75%: تدرج أزرق (صحي)
- 75-90%: تدرج برتقالي (انتباه)
- 90%+: تدرج أحمر (حرج)
خصوصية LGPD (إخلاء مسؤولية أزرق في footer): نجمع فقط مقاييس مجمعة (% CPU، MB RAM). أبدًا محتوى ملفات أو جلسات أو محادثات المستخدمين.
التنبيهات

LGPD banner في header (أزرق، مرئي دائمًا):
خصوصية LGPD — تراقب Alerts فقط المقاييس المجمعة (% CPU، MB RAM). أبدًا محتوى ملفات أو جلسات أو محادثات المستخدم.
أنشئ قاعدة:
- Metric: CPU / RAM / قرص / Bandwidth
- المشغل:
≥ - Threshold: number
- القناة: email (افتراضي)، Slack/Discord webhook (مخطط)
- الحالة: نشط / معطل (toggle في السطر)
عندما يطلق trigger، يتم إرسال alert عبر SMTP للخادم + يُسَجَّل في Audit Log.
سجل التدقيق

LGPD banner: السجل يسجل فقط metadata الإجراء (من، متى، النوع) — أبدًا المحتوى الذي تم التلاعب به.
الأحداث المسجلة:
member.invited(email + role)member.revokedpolicy.template_applied(أي قالب)policy.override_changed(المستخدم X، التطبيق Y، before/after)alert.triggered(القاعدة X، القيمة Y)apikey.created/apikey.revokedserver.config.changed
الاحتفاظ: 400 يومًا (متماشية مع متطلبات Google Cloud Data Access Audit Log القياسية لـ LGPD).
العرض التوضيحي العام
تريد التجربة دون تثبيت أي شيء؟ https://demo.level-hard.com هو خادم العرض التوضيحي العام، يتم تحديثه من قبل المؤسس بـ cleanup-demo.sh (cron يومي). القيود:
- غير admin: يمكنه استخدام التطبيقات لكنه لا يرى Server Admin (بوابة أمنية في
windowManagement.js:88) - multi-tenant عمدًا OFF في العرض التوضيحي (يتجنب التلوث)
- يتم تنظيف الحاويات + الملفات يوميًا
لاختبار multi-tenant تحتاج للتثبيت الخاص بك عبر install.sh وقلب flag.
مراجع متقاطعة
- Add Server Wizard — كيفية توصيل الخادم المثبت حديثًا
- Volumes والنسخ الاحتياطي — أين تعيش بيانات جداول multi-tenant
- RoqueOS Cloud — النسخة المدارة التي تأتي بالفعل مع multi-tenant مفعّل
- ذاكرة
multi_user_roles_decision.md(داخلية) — منطق LGPD + البنية المعمارية