أغلب المدارس الخاصة الصغيرة تدير شؤون طلابها في ملفات Excel: ملف للطلاب وأولياء الأمور، وملف للحضور يرسله كل معلم، وملف للدرجات يجمعه الوكيل في نهاية الفصل، ثم يكتشف أحدهم أن اسم الطالب مكتوب بطريقتين في ملفين، وأن ملف الحضور الذي عدله المعلم أمس ليس النسخة التي عند الإدارة. في مقال الأنظمة التي تحتاجها الجامعة ذكرنا أن نظام معلومات الطلاب Student Information System واختصاراً SIS هو مركز بقية الأنظمة، وفي هذا المقال سوف نجرب خيارين مفتوحي المصدر للمدارس على Docker، ونقارنهما بخيار ثالث يعمل فوق Odoo، وسوف نتناول:
- ما الذي يحفظه نظام شؤون الطلاب، وأين ينتهي دوره ويبدأ دور منصة التعلم LMS.
- تثبيت RosarioSIS 13.0.1 بال Docker Image الذي ينشره مطوره، مع الواجهة العربية، وإضافة طالب.
- تثبيت Gibbon 30.0.01 من حزمة التثبيت الرسمية، مع العربية، وإضافة طالب.
- OpenEduCat، وهو وحدات تعليمية فوق Odoo، ومتى يكون هو الخيار الأنسب.
- نقاط القوة ونقاط الضعف لكل نظام، وجدول للاختيار.
ما الذي يحفظه نظام شؤون الطلاب SIS؟
نظام شؤون الطلاب هو السجل الرسمي للطالب في المدرسة: من هو، وفي أي صف وشعبة، ومن ولي أمره، ومتى حضر وغاب، وما درجته النهائية في كل مادة، وما رسومه. وأما ما يحدث داخل المقرر يوماً بيوم، من دروس وواجبات واختبارات، فهو عمل منصة التعلم كما في دليل تثبيت Moodle. والصورة التالية تبين الحد بينهما:

وقد يتساءل البعض: أليس في Moodle نفسه طلاب وصفوف ودرجات، فلماذا نظام آخر؟ والإجابة أن ال LMS يعرف الطالب داخل المقررات فقط، فلا يعرف ولي الأمر ولا الحضور اليومي للمدرسة كلها ولا السجل الأكاديمي عبر السنوات ولا الرسوم، وإذا جعلته المصدر لهذه البيانات فسوف تعود إلى ملفات Excel بجانبه. والجداول الدراسية نفسها يمكن أن تبنيها أداة متخصصة ثم تدخلها في ال SIS، كما في مقال الجدول الدراسي مع FET.
ثلاثة خيارات مفتوحة المصدر
الخيارات المفتوحة لنظام شؤون الطلاب كثيرة، ولكن أغلبها توقف تطويره أو صمم لنظام تعليمي محدد، والثلاثة التالية نشطة حتى أكتوبر 2026، ولكل منها طريقة مختلفة:
| النظام | آخر إصدار عند التجربة | التقنية | الترخيص | جربناه |
|---|---|---|---|---|
| RosarioSIS | 13.0.1 (12 أكتوبر 2026) | PHP وPostgreSQL | GPL-2.0 | نعم |
| Gibbon | 30.0.01 (6 فبراير 2026) | PHP وMySQL | GPL-3.0 | نعم |
| OpenEduCat على Odoo | الفرع 20.0 (آخر تعديل 9 أكتوبر 2026) | Python وPostgreSQL | LGPL-3 | لا، من الكود والتوثيق |
ولاحظ أن الاسم الذي يبحث عنه الناس «Odoo Education» ليس تطبيقاً رسمياً في Odoo Community، وإنما المقصود غالباً OpenEduCat، وهو مشروع مستقل يبني وحداته فوق Odoo.
RosarioSIS
RosarioSIS نظام لإدارة المدرسة يطوره François Jacquet، ويغطي الطلاب والمستخدمين والجدولة والدرجات والحضور والانضباط والمحاسبة ورسوم الطلاب والمقصف، والمطور نفسه ينشر ملفات Docker وDocker Image على Docker Hub. والوسم الوحيد المنشور هناك هو master، ويتغير مع كل إصدار، لذلك ثبتناه بالبصمة التي جربناها، وفيها الإصدار 13.0.1 مع PHP 8.1.34، وملف README يطلب PostgreSQL 15.
التثبيت على Docker
أنشئ الملف compose.yaml التالي:
name: edu5-sis-rosario
services:
db:
image: postgres:15.19
container_name: edu5-sis-rosario-db
restart: unless-stopped
mem_limit: 384m
environment:
POSTGRES_USER: rosario
POSTGRES_PASSWORD: change-me-db
POSTGRES_DB: rosariosis
volumes:
- rdb:/var/lib/postgresql/data
web:
image: rosariosis/rosariosis@sha256:9aaa979b937c47032f1516a83a5393affe30ccef04b2bdcfe1ecd4c99e7e2c65
container_name: edu5-sis-rosario-web
restart: unless-stopped
mem_limit: 512m
depends_on: [db]
environment:
PGHOST: db
PGUSER: rosario
PGPASSWORD: change-me-db
PGDATABASE: rosariosis
ROSARIOSIS_YEAR: 2026
ROSARIOSIS_LANG: ar_AE
ROSARIOSIS_ADMIN_EMAIL: [email protected]
ports:
- "127.0.0.1:31180:80"
volumes:
- rweb:/var/www/html
volumes:
rdb:
name: edu5-sis-rosario-db
rweb:
name: edu5-sis-rosario-webثم شغله وأنشئ قاعدة البيانات بالصفحة InstallDatabase.php:
docker compose up -d
curl -s http://127.0.0.1:31180/InstallDatabase.php | sed 's/<[^>]*>/ /g' | tr -s ' \n' | tail -c 80Success: database installed. Access RosarioSISفي الإعداد أعلاه لاحظ التالي:
- اللغة: المتغير
ROSARIOSIS_LANGبالقيمةar_AEيجعل سكربت البداية يولد إعداد اللغة Locale العربي داخل ال Container، فالمشروع فيه ترجمتان عربيتانar_AEوar_DZ. وصفحة إنشاء قاعدة البيانات تعرض ترجمة بيانات القاعدة نفسها إلى الفرنسية والبرتغالية والروسية والإسبانية والأوكرانية فقط، فبيانات المثال مثل «Default School» و«Quarter 1» تبقى بالإنجليزية حتى تغيرها. - الدخول الأول: اسم المستخدم وكلمة المرور الافتراضيان هما
adminوadminكما في ملف README، فغير كلمة المرور قبل أن يصل أي شخص إلى الصفحة. - رسائل عند التشغيل: سجل ال Container في البصمة التي جربناها يطبع تحذيرين:
Unable to load dynamic library 'gd'بسبب غيابlibwebp.so.7، وUnable to load dynamic library 'zip'بسبب غيابlibzip.so.4. أي أن إضافتي الصور والملفات المضغوطة في PHP لا تعمل في هذا ال Image، والنظام فتح وأضاف الطالب دونهما، ولكن جرب رفع صورة طالب وتصدير الملفات قبل الاعتماد عليه، أو ابن ال Image بنفسك من ملفات Docker نفسها. - الموارد: بعد التثبيت كانت الذاكرة المستخدمة 43MB لسيرفر الويب و39MB لقاعدة البيانات، وفي القاعدة 100 جدول.
الواجهة بالعربية وإضافة طالب
بعد الدخول تنقلب الواجهة إلى اليمين، والقوائم مترجمة في أغلبها، والصورة التالية للوحة البداية:

ثم أضفنا طالباً من «الطلاب» ثم «إضافة طالب» باسم عربي:

وبعد الحفظ ظهر الطالب في القائمة، والاسم العربي محفوظ صحيحاً في PostgreSQL، وتأكدنا من ذلك بالاستعلام:
docker exec edu5-sis-rosario-db psql -U rosario -d rosariosis -c "select student_id, first_name, last_name, username from students;" student_id | first_name | last_name | username
------------+------------+-----------+----------
1 | Student | Student | student
2 | خالد | العتيبي | khalid.s
(2 rows)
وما وجدناه في العربية يستحق أن تجمعه في قائمة قبل أن يراه الموظفون:
- نصوص غير مترجمة: «Remove Access» و«Historical Grades» في القائمة، و«were found» في عبارة عدد النتائج.
- ترجمة حرفية خاطئة: «لفة الشرف» لقائمة الشرف Honor Roll، و«برنامج العمل العالمي/فئة قائمة مرتبة» لما هو في الأصل المعدل التراكمي وترتيب الطالب GPA / Class Rank.
- حقول من بيئة أخرى: نموذج الطالب يأتي بحقول مثل Social Security وEthnicity، وهي حقول مخصصة Custom Fields يمكنك أن تغير اسمها أو تحذفها من «حقول الطالب».
والترجمة ملفات .po في مجلد locale/ar_AE.utf8، فتعديلها ممكن بأي محرر ترجمة، وإرسال التعديل إلى المشروع أفضل من أن تبقيه عندك.
نقاط القوة ونقاط الضعف
نقاط القوة:
- تثبيت سريع بال Docker Image الذي ينشره المطور، وخفيف على الموارد.
- يغطي أغلب ما تحتاجه المدرسة في نظام واحد: الطلاب والجدولة والدرجات والحضور والرسوم والانضباط.
- PostgreSQL، وهي قاعدة بيانات تعرفها فرق التقنية جيداً في النسخ الاحتياطي والتقارير.
- إصدارات متتالية، وآخرها قبل أيام من التجربة.
نقاط الضعف:
- ال Image المنشور بوسم واحد متحرك
master، وفيه إضافتان لا تعملان في البصمة التي جربناها. - الترجمة العربية فيها نصوص ناقصة وترجمات حرفية، وبيانات المثال لا تترجم.
- يطوره شخص واحد في الأساس، ويبيع إضافات مدفوعة Premium add-ons كما في موقعه، فراجع هل ما تحتاجه في النسخة المجانية قبل أن تقرر.
Gibbon
Gibbon منصة مدرسية بدأها Ross Parker في مدرسة في هونغ كونغ، وتغطي الطلاب والموظفين والجدول والحضور والتقييم والرعاية التربوية والتخطيط للدروس، وملاحظات الإصدار 30.0.01 تذكر أن الحد الأدنى أصبح PHP 8.0 وMySQL 8.0. ولا يوجد Docker Image رسمي، والمشروع ينشر حزمة تثبيت Install Bundle فيها الكود مع مكتباته، حجمها 90MB، لذلك بنينا Image بأنفسنا على PHP 8.3 مع Apache.
التثبيت على Docker
ضع الحزمة gibbon-v30.0.01.tar.gz من صفحة الإصدار بجانب الملف Dockerfile التالي:
FROM php:8.3.36-apache-trixie
RUN apt-get update && apt-get install -y --no-install-recommends libicu-dev libzip-dev libpng-dev libjpeg-dev libfreetype-dev locales \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j3 pdo_mysql gettext intl zip gd \
&& echo "ar_SA.UTF-8 UTF-8" >> /etc/locale.gen && echo "en_GB.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen \
&& rm -rf /var/lib/apt/lists/*
RUN a2enmod rewrite && { echo "max_input_vars = 5000"; echo "memory_limit = 256M"; echo "upload_max_filesize = 20M"; echo "post_max_size = 21M"; } > /usr/local/etc/php/conf.d/gibbon.ini
COPY gibbon-v30.0.01.tar.gz /tmp/
RUN tar xzf /tmp/gibbon-v30.0.01.tar.gz -C /var/www/html && rm /tmp/gibbon-v30.0.01.tar.gz \
&& mkdir -p /var/www/html/uploads && chown -R www-data:www-data /var/www/htmlثم compose.yaml، وقاعدة البيانات MySQL بترميز utf8mb4 حتى تحفظ العربية:
name: edu5-sis-gibbon
services:
db:
image: mysql:8.4.11
container_name: edu5-sis-gibbon-db
restart: unless-stopped
mem_limit: 640m
environment:
MYSQL_DATABASE: gibbon
MYSQL_USER: gibbon
MYSQL_PASSWORD: change-me-db
MYSQL_ROOT_PASSWORD: change-me-root
command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
volumes:
- gdb:/var/lib/mysql
web:
image: edu5-gibbon:30.0.01
container_name: edu5-sis-gibbon-web
restart: unless-stopped
mem_limit: 512m
depends_on: [db]
ports:
- "127.0.0.1:31280:80"
volumes:
- gweb:/var/www/html
volumes:
gdb:
name: edu5-sis-gibbon-db
gweb:
name: edu5-sis-gibbon-webdocker build -t edu5-gibbon:30.0.01 .
docker compose up -dنجرب العطل: معالج التثبيت والموجه mod_rewrite
التثبيت من المتصفح على العنوان /installer/install.php بثلاث خطوات: متطلبات النظام ولغة النظام، ثم بيانات قاعدة البيانات، ثم حساب المسؤول وإعدادات المدرسة. وفي أول نسخة من ملف Dockerfile لم يكن فيها الأمر a2enmod rewrite، فعرضت الخطوة الأولى «Not ready to install.»، وأمام «Apache Module mod_rewrite» القيمة «Not Available»، فالمعالج يفحص المتطلبات قبل أن يسمح بالمتابعة، ولهذا السبب أضفنا السطر. وفي الصفحة نفسها فحص «Secure HTTPS Connection»، وهو لا يمنع التثبيت ولكنه يذكرك أن الإنتاج يحتاج HTTPS أمام النظام كما في تثبيت Caddy.
واخترنا في الخطوة الأولى العربية بالرمز ar_SA من قائمة اللغات، وفي الخطوة الثانية لا تختر بيانات المثال Demo Data في الإنتاج، وهذه الخطوة تنشئ 208 جداول وتأخذ دقائق، فلا تغلق الصفحة. وفي الخطوة الثالثة انتبه إلى خيارين مفعلين افتراضياً:
- Statistics Collection: يرسل إلى مشروع Gibbon عنوان الموقع ونوع التثبيت واسم المدرسة، كما تقول الصفحة نفسها.
- Receive Support?: يضيف بريد المسؤول إلى القائمة البريدية للمشروع.
عطلنا الاثنين، لأن قرار إرسال اسم المدرسة إلى طرف خارجي قرار للإدارة وليس لمن يثبت النظام. وبعد التثبيت تأكدنا من الإعدادات في قاعدة البيانات:
code name systemDefault installed rtl
ar_SA العربية - المملكة العربية السعودية Y Y Y
name value
timezone Asia/Riyadh
country Saudi Arabia
installType Testing
statsCollection N
currency SAR ﷼
registerGibbonSupport Nالواجهة بالعربية وإضافة طالب
الحزمة العربية نزلت مع التثبيت، والعمود rtl قيمته Y، فانقلبت الواجهة إلى اليمين، وأغلب القوائم والنماذج مترجمة، مع نصوص قليلة بالإنجليزية مثل الملاحظة الزرقاء في أعلى نموذج إضافة المستخدم:

أضفنا الطالب بالدور «طالب»، وظهرت رسالة «تم الانتهاء من طلبك بنجاح»، ثم ظهر في قائمة المستخدمين:

وما وجدناه في العربية وفي الإعدادات الافتراضية:
- ترتيب الاسم: القوائم تعرض اسم العائلة ثم فاصلة ثم الاسم الأول، وهذا مألوف في المدارس الدولية وغير مألوف في المدارس العربية، فراجع إعدادات عرض الأسماء قبل الطباعة.
- أيام الأسبوع: الجدول في لوحة البداية من الاثنين إلى الجمعة، وأسماء الأيام بالإنجليزية، فاضبط أيام الدراسة من الأحد إلى الخميس في إعدادات المدرسة إن كانت مدرستك كذلك.
- المراحل الافتراضية: الصفوف جاهزة من «السنة 7» إلى «السنة 13» على النظام البريطاني، فأعد تسميتها حسب مراحل مدرستك.
- بقايا إنجليزية: «View الواجب المنزلي» في لوحة البداية، و«1 to 2 السجلات» في عداد النتائج، ورسالة ملفات تعريف الارتباط Cookies.
نقاط القوة ونقاط الضعف
نقاط القوة:
- واجهة حديثة، وترجمة عربية مع دعم اتجاه الكتابة من اليمين RTL من معالج التثبيت نفسه.
- أوسع من شؤون الطلاب: تخطيط الدروس والواجبات والتقييم والرعاية التربوية، وهو مناسب لمدرسة لا تريد LMS منفصلاً في البداية.
- خلفه مجتمع ومؤسسة Gibbon Foundation، وليس مطوراً واحداً.
نقاط الضعف:
- لا يوجد Docker Image رسمي، وتحتاج أن تبني بيئة PHP بنفسك وتعرف متطلباتها مثل mod_rewrite.
- تصميمه الافتراضي للمدارس الدولية: المراحل وترتيب الأسماء وأيام الأسبوع تحتاج ضبطاً.
- خيارات إرسال البيانات إلى المشروع مفعلة افتراضياً في المعالج.
OpenEduCat على Odoo
إذا كانت المؤسسة تستخدم Odoo أصلاً للمحاسبة والموارد البشرية، كما في دليل تثبيت Odoo Community، فإن OpenEduCat يضيف إليه الجانب التعليمي بوحدات Odoo عادية. والفرع 20.0 في مستودع المشروع فيه الوحدات التالية: الأساس openeducat_core، والقبول openeducat_admission، والحضور، والواجبات، والاختبارات، والرسوم، والمكتبة، والمرافق، والفصول، وأولياء الأمور، والأنشطة، والجدول الدراسي openeducat_timetable. وكل وحدة فيها ملف ترجمة عربية ar_001.po، والترخيص LGPL-3، وصفحة التثبيت تشرح الطريقة.
ولم نثبت OpenEduCat في هذا المختبر، فما سبق من الكود والتوثيق، لذلك لا نقارن واجهته العربية بالنظامين السابقين. ولكن الفرق الأساسي واضح من بنيته: OpenEduCat ليس نظاماً مستقلاً، فالرسوم فيه فواتير Odoo، والموظفون موظفو Odoo، وهذا قوي إذا كان Odoo عندك، وثقيل إذا كنت تحتاج نظام مدرسة فقط.
نقاط القوة: تكامل مباشر مع محاسبة Odoo وموارده البشرية، ونموذج وحدات تضيف منه ما تحتاجه، والمشروع نشط ويتبع إصدارات Odoo.
نقاط الضعف: تحتاج خبرة في Odoo نفسه للتثبيت والترقية، وكل ترقية لإصدار Odoo تنتظر توافق الوحدات، والمشروع يبيع نسخة مؤسسية Enterprise بجانب النسخة المجتمعية، فتأكد أن الميزة التي تحتاجها في النسخة المجتمعية.
أي نظام تختار؟
| الحالة | الأنسب | والسبب |
|---|---|---|
| مدرسة صغيرة أو متوسطة تريد البدء بسرعة وبموارد قليلة | RosarioSIS | Docker Image من المطور، وموارد قليلة، ويغطي الأساسيات والرسوم |
| مدرسة تريد نظاماً واحداً للشؤون والتخطيط للدروس والتقييم | Gibbon | أوسع في الجانب التعليمي، وترجمته العربية أنظف في تجربتنا |
| مؤسسة تستخدم Odoo للمحاسبة والموارد البشرية | OpenEduCat | الطالب والرسوم داخل النظام نفسه دون تكامل منفصل |
| جامعة | لا أحد من الثلاثة غالباً | الجامعة تحتاج خططاً دراسية وساعات معتمدة وتسجيلاً للمقررات، وهي أكبر مما صممت له هذه الأنظمة، كما في مقال الأنظمة التي تحتاجها الجامعة |
وأياً كان اختيارك، فالنظام يحفظ بيانات أطفال وأولياء أمور، وفي السعودية يحكمها نظام حماية البيانات الشخصية، لذلك ضع أمامه HTTPS، وفعل التحقق الثنائي للمسؤولين إن وجد، وراجع الصلاحيات قبل أن تعطي المعلمين حسابات.
التحقق من النجاح
- الطالب الذي أضفته يظهر في القائمة، والاسم العربي محفوظ كما هو في قاعدة البيانات، كما رأينا في الاستعلامين.
- في RosarioSIS افتح سجل ال Container بالأمر
docker logs، وتأكد من رسائل الإضافات التي ذكرناها، وجرب رفع صورة طالب. - في Gibbon افتح صفحة فحص النظام System Check بعد الدخول، كما تنصح صفحة الخطوة الأخيرة في المعالج.
النسخ الاحتياطي والاستعادة
في النظامين القاعدة هي الأهم، ومعها مجلد الملفات المرفوعة. لRosarioSIS:
docker exec edu5-sis-rosario-db pg_dump -U rosario -Fc rosariosis > rosariosis-$(date +%F).dumpولGibbon، مع مجلد uploads داخل ال Volume:
docker exec edu5-sis-gibbon-db sh -c 'mysqldump --single-transaction -ugibbon -p"$MYSQL_PASSWORD" gibbon' > gibbon-$(date +%F).sql
docker run --rm -v edu5-sis-gibbon-web:/src:ro -v "$PWD":/backup alpine tar czf /backup/gibbon-uploads-$(date +%F).tgz -C /src uploadsوالاستعادة عكس ذلك: pg_restore أو mysql في قاعدة فارغة، ثم فك مجلد الملفات، وجرب الاستعادة على سيرفر اختبار مرة كل فصل دراسي، لأن النسخة التي لم تجرب استعادتها غير مضمونة.
التحديث إلى إصدار أحدث
- RosarioSIS: خذ نسخة من القاعدة، ثم غير البصمة في
compose.yamlإلى الإصدار الجديد، وسكربت البداية ينسخ الكود الجديد ويحتفظ بملف الإعداد، والنظام نفسه يقارن رقم الإصدار في القاعدة بالكود ويحدثها عند الدخول. وملف README ينبه إلى أن الانتقال إلى Debian 12 وPostgreSQL 15 منذ الإصدار 12.1.1 يحتاج ترقية القاعدة يدوياً. - Gibbon: خذ نسخة، ثم ابن Image بالحزمة الجديدة، ثم ادخل بحساب المسؤول وشغل التحديث من صفحة التحديث في إدارة النظام، واقرأ ملاحظات الإصدار قبل ذلك لأن الحد الأدنى لإصدار PHP وMySQL يرتفع بين الإصدارات الرئيسية.
مشكلات شائعة وحلولها
- «Not ready to install» في Gibbon: اقرأ قائمة المتطلبات في الصفحة نفسها، وفي تجربتنا كان السبب
mod_rewrite. - الأسماء العربية تظهر علامات استفهام في سطر أوامر MySQL: البيانات سليمة غالباً، والمشكلة في ترميز العميل، فأضف
--default-character-set=utf8mb4إلى الأمر قبل أن تحكم. - بيانات المثال في RosarioSIS بالإنجليزية: غير اسم المدرسة والفترات Marking Periods من قائمة المدرسة، فهي بيانات وليست ترجمة.
- المعالج في Gibbon يتوقف في الخطوة الثانية: إنشاء الجداول يأخذ دقائق على سيرفر بطيء، فلا تعد إرسال النموذج، والسبب أن الإرسال الثاني يبدأ على قاعدة فيها جداول من المحاولة الأولى.
تنظيف المختبر
docker compose down -vفي مجلد كل نظام، ثم احذف ال Docker Images بأسمائها إذا لم تعد تحتاجها.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- نظام شؤون الطلاب هو السجل الرسمي للطالب والشعبة والحضور والدرجة النهائية، وال LMS يأخذ منه ويعيد إليه.
- RosarioSIS 13.0.1 يثبت بسرعة من Docker Image المطور وبموارد قليلة، ولكن البصمة التي جربناها فيها إضافتا gd وzip لا تعملان، والترجمة العربية فيها نصوص ناقصة.
- Gibbon 30.0.01 يحتاج بناء بيئة PHP بنفسك، ومعالجه يفحص المتطلبات، وترجمته العربية مع RTL أنظف، ولكن إعداداته الافتراضية للمدارس الدولية.
- OpenEduCat هو الخيار إذا كان Odoo عندك أصلاً، وليس تطبيقاً رسمياً من Odoo.
- عطل خيارات إرسال البيانات في المعالج، وغير كلمات المرور الافتراضية، وضع HTTPS قبل أي بيانات حقيقية.
سجل التحديثات
- أكتوبر 2026: كتابة المقال وتجربة RosarioSIS 13.0.1 مع PostgreSQL 15.19، وGibbon 30.0.01 مع PHP 8.3.36 وMySQL 8.4.11، على Docker.