تخزين SQLite
يخزّن Libre WebUI بيانات التطبيق افتراضيًا في SQLite. تحتفظ طبقة التخزين بالمحادثات والرسائل والمستخدمين والتفضيلات والمستندات وأجزائها والشخصيات وبيانات اعتماد الإضافات والذكريات والبيانات الوصفية ذات الصلة في قاعدة بيانات محلية واحدة.
موقع قاعدة البيانات
تستخدم عمليات التشغيل من المصدر ترتيب المواقع الآتي:
DATA_DIRعند تعيينه؛ وتُحل القيم النسبية بدءًا من دليل الواجهة الخلفية.backend/dataعندما لا يكون معينًا.
للتوافق مع الإصدارات السابقة، يواصل ملف المصدر الذي لم يُعيّن فيه المتغير استخدام
backend/backend/data عندما يكون ذلك هو مخزن الحالة الدائم الوحيد الموجود. وإذا
احتوى الموقعان على حالة، يتطلب بدء التشغيل اختيارًا صريحًا ولا ينسخ بينهما أو
يدمجهما أبدًا.
أما مشغّل npm/Homebrew المجمّع فيستخدم ~/.libre-webui افتراضيًا، ويحل DATA_DIR
النسبي الصريح بدءًا من دليل عمل المستدعي. وتوفر عمليات نشر Docker وKubernetes
مسارات مطلقة داخل الحاويات.
اسم ملف SQLite هو data.sqlite.
مثال:
DATA_DIR=/var/lib/libre-webui
ما يخزّنه SQLite
- المستخدمون والأدوار
- الجلسات والرسائل
- التفضيلات وإعدادات الواجهة
- المستندات والأجزاء
- الشخصيات وإعداداتها
- ذكريات الشخصيات وحالة الطفرة
- بيانات اعتماد الإضافات وروابط التوجيه والمصادقة الخاصة بها، والمتغيرات، والتفعيلات لكل مستخدم، والموافقات على التعريفات القابلة للكتابة، وكتالوجات النماذج المكتشفة
- إعدادات النظام
- ملكية مهام Work وتوجيه النماذج والموفّرين وعمليات التشغيل والرسائل ونشاط الأدوات والحالة ومعرّفات موارد Docker
تُشفّر القيم الحساسة في طبقة التطبيق عند مرورها عبر أدوات التخزين المشفّر.
تخزين Work موزّع
توجد بيانات محادثات Work ومهامها الوصفية في SQLite، لكن ملفات Work لا توجد فيه.
تحصل كل مهمة على وحدة تخزين Docker مسماة ومخصصة، تُركّب في /workspace. الحاوية
حالة تنفيذ قابلة للاستبدال؛ أما وحدة التخزين المسماة فهي نظام الملفات الدائم
للمهمة.
يعني ذلك أن نسخة قاعدة البيانات وحدها ليست نسخة احتياطية كاملة لـWork. انسخ وحدات
تخزين Docker المقابلة وفق عملية نسخ وحدات التخزين على مضيف Docker لديك. يضع
Libre WebUI على وحدات Work التي يديرها الوسم ai.libre-webui.managed=true ومعرّف
المهمة المالكة.
يؤدي حذف مهمة Work إلى إزالة سجلاتها من SQLite ووحدة التخزين المسماة التي تديرها نهائيًا. ولا يؤدي إلغاء تشغيل أو إيقاف معاينة أو إعادة تشغيل الواجهة الخلفية إلى حذف ملفاتها.
توافق JSON
استخدمت إصدارات Libre WebUI القديمة ملفات JSON لبعض البيانات. تستخدم الإصدارات الحالية SQLite كمسار التخزين الأساسي، وتضع الوصول إلى التخزين خلف طبقات الخدمات والنماذج، فلا يحتاج باقي التطبيق إلى معرفة صيغة الاستمرارية.
إذا كنت ترقي تثبيتًا قديمًا، فانسخ دليل البيانات كله احتياطيًا قبل تشغيل الواجهة الخلفية الأحدث.
يُرحّل تفعيل الإضافات القديم في .status.json مرة واحدة إلى صفوف SQLite لكل
مستخدم للحسابات الموجودة عند الترقية، ولكن للتعريفات المضمّنة المطابقة بدقة
للتجزئة المثبتة فقط. وتبقى التعريفات المخصصة والظلّية القديمة في الحجر إلى أن يعيد
مسؤول استيرادها، ولا تعيد الموافقة صفوف التفعيل القديمة. تبدأ الحسابات اللاحقة من
دون إضافات نشطة، وتتغير تفعيلات كل حساب بصورة مستقلة.
النسخ الاحتياطي
أوقف الواجهة الخلفية قبل نسخ قاعدة البيانات:
cp -R backend/data backend/data.backup
لعمليات النشر التي تستخدم DATA_DIR:
cp -R "$DATA_DIR" "$DATA_DIR.backup"
إذا كان المثيل يستخدم Work، فانسخ أيضًا كل وحدات Work المسماة والمدارة أثناء توقف الواجهة الخلفية. احتفظ بنسخ قاعدة البيانات ومفتاح التشفير ووحدات Work من النقطة الزمنية نفسها.
الاستعادة
أوقف الواجهة الخلفية، واستبدل دليل البيانات بنسختك الاحتياطية، ثم أعد التشغيل.
احتفظ بالقيمة نفسها لـENCRYPTION_KEY؛ فلا يمكن فك القيم المشفّرة بمفتاح مختلف.
بالنسبة إلى Work، أعد وحدات التخزين المسماة بالأسماء الدقيقة المسجلة في قاعدة البيانات المستعادة قبل تشغيل الواجهة الخلفية. يستطيع Libre WebUI إعادة إنشاء حاوية المهمة، لكنه لا يستطيع إعادة بناء ملفات مساحة العمل المفقودة من سجل المحادثة.
ملاحظات تشغيلية
- يعمل SQLite مع تفعيل WAL لتحسين القراءات المتزامنة.
- يجب أن يكون دليل البيانات قابلًا للكتابة من عملية الواجهة الخلفية.
- ضع
DATA_DIRعلى تخزين دائم في Docker وKubernetes. - انسخ
ENCRYPTION_KEYاحتياطيًا مع قاعدة البيانات. - احسب وحدات Work المسماة بصورة مستقلة عند قياس التخزين أو ترحيله أو استعادته.