# تشغيل نظام سجلات الطلاب محلياً ونسخه احتياطياً

هذا الدليل مختصر للتشغيل والنسخ الاحتياطي. اتبعي الدليل التفصيلي الأحدث في [`INSTALLATION_AR.md`](./INSTALLATION_AR.md) لتثبيت النظام على Windows أو Linux.

> **تنبيه أمني:** سجلات الطلاب وبيانات الدخول معلومات حساسة. اجعلي قاعدة البيانات غير متاحة من الإنترنت العام، واستخدمي كلمات مرور قوية، وقصري حساب المدير على الأشخاص المخولين فقط.

## المتطلبات

| المكوّن | المتطلب | الغرض |
|---|---|---|
| نظام التشغيل | Windows 10/11 أو Ubuntu/Linux حديث | جهاز السيرفر المحلي |
| Node.js | الإصدار 22 أو أحدث | تشغيل التطبيق |
| MySQL | الإصدار 8 أو أحدث | حفظ حسابات الإدارة وسجلات الطلاب |
| شبكة داخلية | عنوان ثابت مفضل للسيرفر | وصول أجهزة المؤسسة عبر المتصفح |

## الإعداد الأولي

انسخي المشروع إلى جهاز السيرفر، ثم انسخي نموذج الإعداد الموجود داخل التوثيق إلى ملف بيئة خاص لا يرفع إلى Git:

```bash
cp docs/env.local.example .env
```

عدّلي `DATABASE_URL` في ملف `.env` باسم قاعدة بيانات MySQL وكلمة مرور قوية. بعد إنشاء قاعدة البيانات ومستخدم محدود الصلاحيات، طبقي الجداول مرة واحدة:

```bash
mysql -u student_admin -p student_records < docs/local-schema.sql
pnpm install
pnpm build
```

يشغّل الأمر التالي التطبيق في بيئة إنتاج محلية:

```bash
NODE_ENV=production pnpm start
```

في Windows PowerShell استخدمي الصيغة التالية بدلاً من السطر الأخير:

```powershell
$env:NODE_ENV="production"; pnpm start
```

بعد التشغيل، افتحي عنوان السيرفر داخل الشبكة، مثل `http://192.168.1.20:3000`. عند استخدام إعدادات `LOCAL_AUTH_ENABLED=true` و`VITE_LOCAL_AUTH_ENABLED=true`، سيحوّل زر الإدارة إلى صفحة دخول محلية محمية باسم المستخدم وكلمة المرور في ملف `.env`. ينشئ التطبيق حساب المدير المحلي في جدول `users` عند أول دخول ناجح. لا تضعي أسراراً أو كلمات مرور في كود التطبيق أو في ملف مرفوع إلى مستودع عام.

## بيانات السجل

يحفظ النظام الجديد رقمين فقط لكل سجل: **رقم الجلوس** و**رقم الاستمارة البنكية**. كلا الرقمين فريدان ولا يقبل النظام تكرارهما.

## تثبيت التطبيق على أندرويد

التطبيق مُعد كـ **تطبيق ويب قابل للتثبيت**. افتحي الموقع من Chrome على أندرويد، ثم اختاري **تثبيت التطبيق** أو **إضافة إلى الشاشة الرئيسية** من قائمة المتصفح. سيظهر رمز مستقل على شاشة الهاتف ويعمل بواجهة ملائمة للجوال. يحتاج البحث وإدارة السجلات إلى اتصال بالسيرفر الذي يحفظ قاعدة البيانات.

## النسخ الاحتياطي والاستعادة

خذي نسخة احتياطية دورية لقاعدة البيانات إلى قرص مختلف أو مساحة تخزين مؤمنة خارج السيرفر. المثال التالي ينشئ ملفاً يحوي البنية والبيانات:

```bash
mysqldump -u student_admin -p --single-transaction --routines --events student_records > backups/student_records_YYYY-MM-DD.sql
```

في PowerShell يمكن تشغيل الأمر نفسه بعد استبدال اسم الملف بالتاريخ الفعلي. لا تضعي مجلد `backups` داخل مجلد عام للموقع، ولا تشاركي ملف النسخ الاحتياطي لأنه يحوي بيانات الطلاب وحسابات الإدارة.

للاستعادة إلى قاعدة جديدة أو فارغة:

```bash
mysql -u student_admin -p student_records < backups/student_records_YYYY-MM-DD.sql
```

اختبري الاستعادة دورياً على قاعدة بيانات تجريبية، ولا تنفذيها مباشرة على قاعدة الإنتاج قبل أخذ نسخة جديدة منها.

## الاستمرارية لمدة سنة وما بعدها

لا يحتوي النظام على **مدة انتهاء برمجية**؛ لذلك يمكنه الاستمرار أكثر من سنة. استمراريته الفعلية تعتمد على بقاء جهاز السيرفر أو الاستضافة قيد التشغيل، وتوفر قاعدة بيانات MySQL، وتجديد إعدادات تسجيل الدخول عند الحاجة، والالتزام بالنسخ الاحتياطي ومراجعة التحديثات الأمنية. إذا تعطلت الاستضافة أو تلفت القاعدة دون نسخة احتياطية، فلن تكفي ملفات الواجهة وحدها لاستعادة بيانات الطلاب.

للاستخدام المؤسسي، يوصى بمراجعة تشغيلية شهرية تشمل التحقق من نجاح النسخ الاحتياطي، فحص مساحة القرص، مراجعة حسابات المديرين، وتثبيت تحديثات النظام وNode.js ضمن نافذة صيانة.
