إعدادات النظام
تتحكم إعدادات النظام في سلوك التطبيق بشكل عام، ومعايير الأمان، وتكوين النشر. يتناول هذا القسم بنية الأمان، وتكوين التطبيق، ونماذج النشر البديلة.
بنية الأمان
يستخدم Aptli نموذج أمان مكون من أربع طبقات مع تطبيق العرض من جانب الخادم (SSR):
الطبقة ١: المصادقة
هويتك - التحقق من هوية المستخدم قبل الوصول.
- تسجيل الدخول باستخدام كلمة المرور (مع متطلبات التعقيد)
- مزودي OAuth (GitHub، Google)
- المصادقة الثنائية (TOTP)
- التحقق من صحة البريد الإلكتروني مطلوب
- إدارة الجلسة مع انتهاء الصلاحية
- قفل تام بعد محاولات فاشلة
الطبقة ٢: حقوق المسؤول (تساهلية)
ما يمكنك تعديله - منح أذونات صريحة.
- أذونات إنشاء/تحديث/حذف لكل نموذج
- حقوق فائقة:
appSettingSchemasModify،adminRightsModify،viewDeleted - محددة بنطاق الإجراءات (يمكن الإنشاء ولكن لا يمكن الحذف)
- الافتراضي: وصول للعرض فقط
الطبقة ٣: قيود الأدوار (تقييدية)
ما لا يمكنك رؤيته - عوامل تصفية البيانات على مستوى الحقل.
- عوامل تصفية النموذج + الحقل + المقارنة + القيمة
- يتم تطبيقها من جانب الخادم قبل استعلام قاعدة البيانات
- لا يمكن تجاوزها عبر استدعاءات API أو عمليات التصدير أو لقطات الشاشة
- دمج قيود متعددة (منطق AND)
الطبقة ٤: العرض من جانب الخادم (SSR)
التنفيذ على مستوى واجهة برمجة التطبيقات (API) - البيانات غير موجودة فعليًا للمستخدمين غير المصرح لهم.
- يتم تصفية جميع الاستعلامات من جانب الخادم (واجهة برمجة تطبيقات خادم Nuxt)
- يتم تطبيق قيود الأدوار قبل البحث في MongoDB
- لا توجد تصفية من جانب العميل (لا يمكن تجاوزها)
- تعرض واجهة برمجة التطبيقات (API) الرمز ٤٠٤ للسجلات غير المصرح بها (حتى لو كان المهاجم يعرف المعرف)
أهمية SSR:
- التصفية من جانب العميل: البيانات المرسلة إلى المتصفح، مخفية باستخدام JavaScript (يمكن تجاوزها عبر أدوات المطورين)
- التصفية من جانب الخادم: لا يتم إرسال البيانات أبدًا إلى المستخدمين غير المصرح لهم (آمن)
يستخدم Aptli SSR - لا تصل البيانات غير المصرح بها أبدًا إلى العميل.
إعدادات التطبيق
صفحة إعدادات التطبيق تعرض خيارات التكوين ومعلمات الأمان
الوصول المطلوب: حق المسؤول appSettingSchemasModify
انتقل إلى: المسؤول → إعدادات التطبيق
إعدادات المصادقة
المجالات المسموح بها:
- قائمة بنطاقات البريد الإلكتروني التي يمكنها تسجيل الحسابات
- مثال:
["company.com", "contractor.com"] - يمكن التسجيل فقط عبر رسائل البريد الإلكتروني الواردة من هذه النطاقات
- الافتراضي: نطاق النشر الخاص بك
السماح بالتسجيل:
true- يمكن للمستخدمين التسجيل بأنفسهم إذا تطابق النطاقfalse- يجب على المسؤول إنشاء الحسابات يدويًا- الافتراضي:
false(وصول خاضع للرقابة)
طرق تسجيل الدخول النشطة:
- اسم المستخدم/كلمة المرور (مربع اختيار)
- GitHub OAuth (مربع اختيار)
- Google OAuth (مربع اختيار)
- يجب تمكين طريقة واحدة على الأقل
- الافتراضي: اسم المستخدم/كلمة المرور فقط
طلب المصادقة الثنائية:
true- يجب على جميع المستخدمين تمكين المصادقة الثنائية (يمكن تكوين فترة السماح)false- المصادقة الثنائية اختيارية- الافتراضي:
false
أمان الجلسة
الحد الأقصى لمحاولات تسجيل الدخول:
- عدد محاولات تسجيل الدخول الفاشلة قبل القفل التام
- النطاق الصالح: ٣-١٠ محاولات
- الافتراضي:
5
وقت تسجيل الخروج التلقائي:
- مهلة عدم النشاط بالثواني
- إعادة قراءة/كتابة البيانات تعيد ضبط العد التنازلي
- النطاق الصالح: ١ ساعة - ٧ أيام
- الافتراضي:
86400(١ يوم)
انتهاء صلاحية رمز CSRF:
- مهلة انتهاء جلسة الخادم بالدقائق
- يفرض إعادة تسجيل الدخول بغض النظر عن النشاط
- النطاق الصالح: ١ ساعة - ٤ أسابيع
- الافتراضي:
10080(١ أسبوع)
انتهاء صلاحية الجلسة:
- المدة القصوى المطلقة للجلسة
- يتوافق مع رمز CSRF لمستخدمي الجهاز الواحد
- قد يكون لمستخدمي الأجهزة المتعددة تواريخ انتهاء صلاحية مختلفة
- الافتراضي:
10080دقيقة (١ أسبوع)
الاحتفاظ بالبيانات
الاحتفاظ بالحذف المؤقت:
- المدة التي تبقى فيها السجلات المحذوفة مؤقتًا في قاعدة البيانات
- الخيارات: ٣٠ يومًا، ٩٠ يومًا، ١ سنة، إلى أجل غير مسمى
- الافتراضي:
90 days - ينطبق على المهام والتقارير والمستخدمين والميزات (عند تعيين deletedAt)
جدول ضغط الإصدارات:
- عدد مرات ضغط إصدارات الميزات القديمة
- الخيارات: أسبوعي، شهري، ربع سنوي
- الافتراضي:
Monthly - الإصدارات المضغوطة لا تزال قابلة لإعادة البناء (ضغط بدون فقدان)
سجل المعاملات:
- لا يتم حذف معاملات المخزون أبدًا (سجل تدقيق ثابت)
- يمكن أرشفتها في قاعدة بيانات منفصلة (تكوين متقدم)
الإعدادات الافتراضية للمستخدمين الجدد
أدوار المستخدمين الجدد:
- مصفوفة من معرّفات الأدوار يتم تعيينها تلقائيًا
- مصفوفة فارغة = لا توجد قيود تلقائية
- الافتراضي:
[](يقوم المسؤول بالتعيين يدويًا)
حقوق المسؤول للمستخدمين الجدد:
- مجموعة من سلاسل حقوق الأذونات
- مجموعة فارغة = وصول للعرض فقط
- الافتراضي:
[](لا توجد أذونات كتابة)
أمثلة على التكوينات:
الإعدادات الافتراضية للعامل الميداني: ٠
الإعدادات الافتراضية لمنسق المكتب: ١
النشر الذاتي
يدعم Aptli النشر الذاتي (يتطلب ترخيصًا في الوضع الذاتي).
أوضاع النشر
وضع SaaS (الافتراضي): ٢
- لا يوجد تحقق من الترخيص
- يدير Aptli البنية التحتية
- تحديثات تلقائية
- دعم احترافي متضمن
وضع الاستضافة الذاتية: ٣
- التحقق من الترخيص مطلوب
- يدير العميل البنية التحتية
- تحديثات يدوية (استبدال المجلد
.output) - مفتاح الترخيص من Aptli مطلوب
نظام الترخيص
كيفية العمل:
١. قم بنشر المجلد .output/ على الخادم الخاص بك
٢. يقوم الخادم بإنشاء معرف نشر فريد (بصمة الأجهزة + اسم المضيف)
٣. تبدأ فترة تجريبية مدتها ٣٠ يومًا تلقائيًا
٤. أرسل معرف النشر عبر البريد الإلكتروني إلى [email protected]
٥. تقوم Aptli بإنشاء ترخيص JWT باستخدام معرفات النشر المصرح بها
٦. قم بالتفعيل عبر صفحة /admin/license أو متغير البيئة NUXT_LICENSE_KEY
النشر المتعدد:
- لكل خادم معرف نشر فريد
- الترخيص يسرد جميع معرفات النشر المصرح بها
- لا يمكن استنساخ الخادم بدون ترخيص جديد
- يمنع التوزيع غير المصرح به
التحقق من صحة الترخيص:
- يتم التحقق عند بدء تشغيل الخادم
- الترخيص غير صالح = لن يبدأ التطبيق
- انتهاء فترة التجربة = تحذير لمدة ٧ أيام، ثم الحظر
- تجديد الترخيص عبر البريد الإلكتروني
متغيرات البيئة (الاستضافة الذاتية)
مطلوب: ٤
اختياري - OAuth: ٥
اختياري - البريد الإلكتروني: ٦
اختياري - فحص الملفات: ٧
اختياري - الترخيص: ٨
متطلبات البنية التحتية
الحد الأدنى:
- ٢ نواة معالج
- ٤ جيجابايت ذاكرة وصول عشوائي (RAM)
- ٢٠ جيجابايت سعة تخزين (تزداد مع زيادة البيانات)
- MongoDB ٥.٠+
- Node.js ٢٠+
الموصى به:
- ٤ نوى معالج
- ذاكرة وصول عشوائي (RAM) سعة ٨ جيجابايت
- سعة تخزين SSD ١٠٠ جيجابايت
- مجموعة نسخ متماثلة MongoDB (توافر عالٍ)
- موزع الحمل (التوسع الأفقي)
الخدمات الاختيارية:
- برنامج ClamAV الخفي (فحص الملفات)
- Redis (تخزين مؤقت للجلسات - تحسين الأداء)
- خادم SMTP (إشعارات البريد الإلكتروني)
خطوات النشر
١. إنشاء التطبيق: ٩
٢. نسخ المخرجات: ١٠
٣. تعيين متغيرات البيئة:
قم بإنشاء /aptli/.env باستخدام المتغيرات المطلوبة
٤. تشغيل الخادم: ١١
٥. تنشيط الترخيص:
- انتقل إلى
https://your-domain/admin/license - انسخ معرف النشر
- أرسله عبر البريد الإلكتروني إلى [email protected]
- الصق مفتاح الترخيص الذي تلقيته
- انقر على "تنشيط"
٦. تكوين الوكيل العكسي: Nginx/Apache إلى منفذ الوكيل ٣٠٠٠ → HTTPS
٧. إعداد مدير العمليات: PM٢ أو systemd للحفاظ على تشغيل الخادم
التحديثات (الاستضافة الذاتية)
عملية التحديث اليدوية:
١. نسخ قاعدة البيانات احتياطيًا: mongodump
٢. نسخ ملف .env احتياطيًا
٣. تنزيل مجلد .output/ الجديد من Aptli
٤. إيقاف الخادم: pm2 stop aptli
٥. استبدال المجلد .output/
٦. استعادة ملف .env
٧. بدء تشغيل الخادم: pm2 start aptli
٨. التحقق: التحقق من الإصدار في /admin/license
يوفر Aptli:
- ملاحظات الإصدار مع التغييرات الجذرية
- نصوص برمجية للترحيل (في حالة تغيير قاعدة البيانات)
- تعليمات التراجع
- دعم احترافي أثناء التحديثات
أفضل ممارسات الأمان
SSL/TLS مطلوب:
- استخدم HTTPS في بيئة الإنتاج (وليس HTTP)
- شهادات مجانية: Let's Encrypt
- رفض اتصالات HTTP (إعادة التوجيه إلى HTTPS)
تكوين جدار الحماية:
- السماح بـ: HTTPS (٤٤٣)، SSH (٢٢)
- الحظر: منفذ MongoDB (٢٧٠١٧) من الإنترنت العام
- التقييد: صفحات الإدارة إلى VPN أو قائمة IP المسموح بها
أمان الجلسة:
NUXT_SESSION_PASSWORD- ٣٢ حرفًا عشوائيًا على الأقل- تغيير كلمة مرور الجلسة كل ثلاثة أشهر
- انتهاء صلاحية الجلسة قصير الأمد للبيئات عالية الأمان
أمان قاعدة البيانات:
- تم تمكين مصادقة MongoDB
- بيانات اعتماد مستخدم منفصلة (ليست root)
- اتصالات مشفرة (MongoDB TLS)
- نسخ احتياطية منتظمة (تلقائية، استعادة تم اختبارها)
أسرار OAuth:
- تخزينها في متغيرات البيئة (وليس في الكود)
- تغييرها كل ثلاثة أشهر
- إلغاء تطبيقات OAuth غير المستخدمة
أمان تحميل الملفات:
- تم تمكين فحص ClamAV في بيئة الإنتاج
- فرض حدود لحجم الملفات
- تقييد أنواع الملفات المسموح بها
- عزل التخزين للملفات المشبوهة
المراقبة:
- محاولات تسجيل الدخول الفاشلة (الكشف عن الهجمات العشوائية)
- حالات فشل التفويض (الكشف عن محاولات الوصول غير المصرح بها)
- أنماط استخدام غير عادية لواجهة برمجة التطبيقات (API)
- حالات فشل الاتصال بقاعدة البيانات
اعتبارات الامتثال
موقع البيانات: يسمح وضع الاستضافة الذاتية بالتحكم في موقع البيانات:
- الاستضافة في منطقة جغرافية محددة
- تلبية المتطلبات التنظيمية (اللائحة العامة لحماية البيانات (GDPR)، قانون نقل التأمين الصحي والمسؤولية (HIPAA)، إلخ)
- التحكم المادي في الوصول إلى البيانات
سجل التدقيق: يحتفظ Aptli بسجلات تدقيق لما يلي:
- محاولات المصادقة (النجاح/الفشل)
- استخدام حقوق الإدارة (من قام بتعديل ماذا)
- تغييرات قيود الأدوار
- سجل المعاملات (حركات المخزون)
- سجل الإصدارات (تغييرات الميزات)
- عمليات الحذف المؤقت (من حذف ماذا ومتى)
تصدير البيانات: جميع البيانات قابلة للتصدير من أجل الامتثال:
- تصدير CSV للبيانات غير الجغرافية
- تصدير GeoJSON للميزات (عبر زر نقل البيانات في شريط أدوات الخريطة)
- تقارير المعاملات (تدقيق المخزون)
- سجلات وصول المستخدم
الاحتفاظ بالبيانات: سياسات احتفاظ قابلة للتكوين:
- فترة الاحتفاظ بالحذف المؤقت
- ضغط الإصدارات (بدون فقدان)
- سجل المعاملات (ثابت - لا يُحذف أبدًا)
- سجلات التدقيق (أرشفة قابلة للتكوين)