# CCL Platform Infrastructure: الفيديو لايف والتخزين فالسيرفرات ديالنا

> هادا هو الـ Backend اللي كيتشاركوه CCL و Schoolaris و Polypro للحصص لايف، التسجيلات وملفات الدروس. فيه الفيديو بـ LiveKit مع ربعة ديال workers للتسجيل، تخزين S3 متعدد المستأجرين (multi-tenant) على MinIO، وروابط موقعة صالحة لمدة محدودة باش يتشافو الفيديوهات. كل منصة كتلقى الحصص لايف داخل الصفحات ديالها، التسجيلات كيرجعو كإعادة، والملفات كيتفحصو قبل ما يتخزنو.

صاوبتو وكنصاينو كمطور full-stack فـ CCL، فالسيرفرات ديال الشركة.
أونلاين على https://ccl.ma/
Canonical: https://salaheddine-elfatimi.com/ar/projects/ccl-platform-infrastructure
التقنيات: TypeScript, React, Bun, Elysia, Prisma, MySQL, Redis, MinIO, LiveKit, Docker, Caddy, Dokploy, ClamAV, FFmpeg

## الزبون

CCL (Centre de Compétences et Leadership) مركز تكوين فمراكش. فـ CCL كنصاوب وكنصاين بزاف ديال المنصات التعليمية، منهم المواقع ديال CCL، و Schoolaris، منصة الدعم المدرسي أونلاين للتلاميذ المغاربة، و Polypro Academy، منصة باش تتعلم اللغات. CCL و Schoolaris و Polypro فيهم الفيديو لايف، يعني الثلاثة كانو محتاجين الفيديو، التسجيل والتخزين.

## شنو كان محتاج

الحصص لايف ديال CCL كانت كتدوز فليانات Zoom، والتسجيلات كتبقى فالأداة ديال الاجتماعات، ماشي حدا البرنامج ديال المتعلم. الهدف كان نرجعو الحصص لداخل المنصات، والفيديو والتسجيلات يكونو فالسيرفرات ديال الشركة، ماشي عند خدمة كتخلصها بالدقيقة.

باش تستضيف الفيديو لايف بوحدك، ما يكفيش تنصب سيرفر وصافي. التسجيل تقيل: كل تسجيل كيشغل Chrome كامل بلا واجهة، و worker واحد كان كيهز تقريبا من 5 حتى 8 قبل ما تبدا الماكينة تعيا. الحصة المسجلة كتاخد تقريبا 1 GB فالساعة، الملفات اللي كيتصيفطو خاصهم يتفحصو قبل ما يتخزنو، والفيديوهات خاصهم يدوزو بروابط ما تبقاش مفتوحة ديما.

## شنو صاوبت

- **LiveKit مورا Caddy، مع TURN**: السيرفر ديال LiveKit و Redis و TURN خدامين فـ Docker، و Caddy كيتكلف بـ HTTPS. و TURN على TLS كيخلي التلاميذ اللي فشبكات مسدودة (المدرسة، الخدمة، الموبايل) يدخلو حتى هوما، والـ API ديالنا هي اللي كتصاوب القاعات وكتوقع رمز دخول قصير المدة لكل تلميذ.
- **ربعة ديال workers للتسجيل**: التسجيلات كيديروها ربعة ديال workers ديال LiveKit Egress كيتشاركو طابور Redis واحد، وكل واحد عندو المجلد المؤقت ديالو. ملي كان المجلد مشترك، الـ workers ولاو كيمسحو الـ sockets ديال بعضياتهم: بان بحال مشكل ديال القدرة، وما كانش.
- **حد محسوب باختبار الضغط**: فاختبار ضغط فماي 2026 على سيرفر الإنتاج اللي فيه 80 نواة، 24 تسجيل فنفس الوقت خداو تقريبا نص الـ CPU، وكل الملفات كاملين؛ و 30 خدمو ولكن بلا حتى هامش. داكشي علاش الـ API ما كتبداش التسجيل رقم 25 بوحدها، عمرها ما كتوقف تسجيل خدام، والإدارة تقدر تتجاوز هاد الحد يدويا.
- **قاعات ما كتسدش مع أول انقطاع**: القاعات كتصاوبها الـ API، ماشي ملي يدخل أول واحد، وكتبقى مفتوحة 15 دقيقة كتسنى أول واحد يدخل، و 5 دقايق من بعد ما يخرج آخر واحد. إلا طاح الويفي عند الأستاذ، الحصة والتسجيل ديالها ما كيوقفوش.
- **تخزين متعدد المستأجرين على MinIO**: ملفات الدروس والتسجيلات ديال كل منصة كيمشيو لتخزين S3 على MinIO. و ClamAV كيفحص كل ملف قبل ما يتخزن، والفيديوهات كيتحولو لـ HLS متكيف باش يتشافو أونلاين.
- **روابط موقعة كيسالي الوقت ديالها**: الفيديوهات والملفات كيوصلو للمتعلمين بروابط موقعة كيسالي الوقت ديالها، عوض روابط عمومية دايمة.

## شنو ولّا يقدر يدير

**الحصص لايف والتسجيلات وملفات الدروس كيدوزو على سيرفرات متحكمين فيها: فكونتينرات Docker مورا Caddy مع HTTPS أوتوماتيكي، وClamAV كيفحص كل ملف قبل ما يتخزن، والفيديوهات كيتحولو لـ HLS متكيف.**

دابا CCL و Schoolaris و Polypro كيديرو الحصص لايف داخل المنصات ديالهم، على نفس البنية المشتركة، بلا ما يصيفطو التلاميذ لليانات ديال الاجتماعات. التسجيلات كتمشي لتخزين متحكمة فيه الشركة وكترجع كإعادة. واختبار الضغط عطانا حد معروف، 24 تسجيل فنفس الوقت، ولكن غير على هاد الماكينة: إلا تبدل السيرفر، خاص الاختبار يتعاود.
