بديل Firebase المجاني هذا هو مجرد ملف واحد

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00بوكيت بيس (PocketBase) هو بديل مفتوح المصدر لـ سوبربيس (Supabase) أو فايربيس (Firebase) وربما يكون أبسط
00:00:04خلفية يمكنك تشغيلها على الإطلاق، ملف واحد فقط يمنحك قاعدة بيانات في الوقت الفعلي، ومصادقة، و
00:00:11تخزين ملفات. هذا يتناقض تماماً مع مدى التعقيد الجنوني الذي أصبحت عليه تطوير الويب الحديث
00:00:16لذا في فيديو اليوم، سنختبر بوكيت بيس ونرى ما إذا كانت بنيته البسيطة
00:00:21تصمد حقاً عند بناء أي شيء يتجاوز مجرد تطبيق بسيط
00:00:29بوكيت بيس هو ملف تنفيذي (binary) واحد بلغة جو (Go) مع قاعدة بيانات إس كيو لايت (SQLite) مدمجة، لكن البرمجة بلغة جو نفسها هي في الواقع
00:00:35اختيارية لأن الخلفية يمكن توسيعها باستخدام كل من جافا سكريبت وتايب سكريبت، وستحصل أيضاً على
00:00:40وصول إلى واجهة مستخدم إدارية أساسية حيث يمكنك تكوين جميع مجموعاتك تماماً كما يعمل سوبربيس
00:00:46الآن بالانتقال إلى البنية وكيفية استخدامها فعلياً بمجرد تشغيل بوكيت بيس، يمكنك
00:00:51الاتصال به من الواجهة الأمامية عبر حزمة تطوير البرامج (SDK) الخاصة بجافا سكريبت. هذا مرة أخرى يشبه إلى حد كبير كيفية تصميم
00:00:57فايربيس وسوبربيس، حيث يمكنك الوصول إلى قاعدة بياناتك مباشرة من الواجهة الأمامية ولا
00:01:02تقلق، فبوكيت بيس لديه قواعد واجهة برمجة تطبيقات (API) ومصادقة للحفاظ على أمان كل هذه القواعد. ولكن دعنا ننتقل مباشرة إلى
00:01:08عرض توضيحي لإظهار تطبيق حقيقي مع مصادقة، وقاعدة بيانات، وتخزين ملفات. وإذا كنت تستمتع بهذا
00:01:13الفيديو، اشترك في بيتر ستاك (Better Stack) حيث نغطي قدراً هائلاً من محتوى المطورين على هذه القناة
00:01:18إذاً لدينا تطبيقنا هنا، لدينا بوكيت بيس في الخلفية، ولدينا واجهة ويب
00:01:22مكتوبة بلغة رياكت (React). أهم ملف داخل واجهة الويب هو ملف pb.ts هذا هنا لأنه
00:01:30بداخل هذا الملف نقوم بالاستيراد من بوكيت بيس، لذا لدينا فئة بوكيت بيس ونقوم بإنشاء مثيل جديد من
00:01:36ذلك، ثم يمكننا الاتصال بخدمة الخلفية الخاصة بنا، والآن يمكننا استخدام pb في بقية
00:01:42التطبيق. التطبيق نفسه عبارة عن متتبع أخطاء بسيط، يمكننا سحب العناصر بين الأعمدة، ويمكننا
00:01:48إنشاء مشكلات جديدة تماماً. لذا إذا نظرنا داخل الخطاف (hook) الذي يتحكم في المستخدم المسجل دخوله، يمكنك رؤية
00:01:53أننا نضبط الحالة في البداية باستخدام pb.authStore.record، وهذا سيجلب المستخدم المصادق عليه حالياً
00:01:59من بوكيت بيس، ثم نضبط مستمعاً أيضاً فنقول إذا تغير مخزن المصادقة عبر
00:02:05حدث التغيير (onChange)، فسنقوم ببساطة بتعيين المستخدم الجديد في الحالة. إذاً الأمر بسيط حقاً بذلك
00:02:11يمكننا الوصول إلى الحالة، ويمكننا الاشتراك فيها، وينطبق الشيء نفسه على مشكلاتنا أيضاً
00:02:16لذا داخل خطاف استخدام المشكلات، نقوم مرة أخرى بتهيئة بعض الحالة، ولكن في هذه الحالة سنتركها فارغة
00:02:21ثم لدينا useEffect ونقول إننا سنجلب جميع المشكلات، ونحصل على القائمة الكاملة، ثم
00:02:27سنضبط المشكلات بتلك القائمة، مما سيؤدي في البداية إلى ملء البيانات مسبقاً، ثم يمكننا
00:02:32أيضاً مرة أخرى الاشتراك في المشكلات، لذا إذا قمت بسحب المشكلات بين الأعمدة أو إنشاء أو حذف مشكلة
00:02:38يمكننا حينئذٍ القول pb.collection(“issues”).subscribe، وفي أي وقت يأتي سجل جديد يمكننا حينئذٍ
00:02:44إضافته إلى حالتنا. هذا يعني أنه عندما نتفاعل مع قاعدة بيانات بوكيت بيس مباشرة
00:02:49مثل عندما نقوم بسحب بطاقة هنا، سيتم تحديث الحالة تلقائياً. في حالة إنشاء
00:02:54مشكلة جديدة تماماً، يمكننا أيضاً إرفاق لقطة شاشة بها. دعنا نلتقط لقطة شاشة للتطبيق
00:02:59نفسه، ثم ننقر على “تقديم مشكلة” وبعد ذلك تظهر المشكلة الجديدة هنا. في كود الواجهة الأمامية، يتم التعامل مع هذا
00:03:05من خلال وظيفة إرسال (submit)، ونقوم بإلحاق جميع بيانات النموذج، وأخيراً نستدعي pb
00:03:11collection(“issues”).create ونمرر البيانات. ما لدينا في الخلفية هو قواعد
00:03:17واجهة برمجة تطبيقات المجموعة لمنع إساءة استخدام هذه الواجهات، لذا سيعطيك بوكيت بيس واجهة الإدارة هذه افتراضياً
00:03:24وهنا يمكنك أن ترى أن لدينا مجموعة المستخدمين ولدينا أيضاً مجموعة المشكلات
00:03:27حيث تعيش جميع مشكلاتنا. إذا نظرنا داخل مجموعة المستخدمين وضغطنا على الإعدادات هنا في الأعلى
00:03:32فإن لدينا علامة تبويب “قواعد واجهة برمجة التطبيقات” (API rules)، وهذه هي جميع القواعد التي تقيد الوصول إلى هذه المجموعة
00:03:37المحددة. لذا نقول في حالة المستخدمين، لا يمكن أن يكون معرف المصادقة للطلب سلسلة فارغة، وعند
00:03:43تحديث أو حذف المستخدمين، يجب أن يطابق المعرف معرف المستخدم المصادق عليه، ويمكننا الوصول إلى ذلك
00:03:50باستخدام هذه السلسلة الخاصة هنا، حرف @ ثم request.auth.id. إذا كنت قد استخدمت سوبربيس
00:03:56في الماضي، ستجد هذا النوع من النمط مألوفاً جداً. الآن ماذا يحدث إذا كانت الخلفية لا
00:04:02تقوم بكل ما تحتاجه؟ حسناً، لحسن الحظ يمكنك توسيعها عبر الخطافات باستخدام لغة جو بالطبع، ولكن أيضاً جافا سكريبت
00:04:08وتايب سكريبت. لذا يمكننا الربط بأحداث مثل onBootstrap عند بدء التطبيق أو onRecord
00:04:15Create عند إنشاء سجل في قاعدة البيانات. هناك 82 خطافاً فريداً في وقت التصوير، لذا تقريباً
00:04:21كل ما تحتاجه سيكون مغطى. الآن دعنا نوسع خدمة بوكيت بيس الخاصة بنا لنرى كيف يعمل كل ذلك
00:04:27إذا نظرنا داخل مجلد pb يمكنك رؤية أن لدينا ملف بوكيت بيس التنفيذي، وهذا الملف هو حرفياً
00:04:32كل ما تحتاجه لتشغيل الإصدار الافتراضي من بوكيت بيس. في حالتي، كتبت جميع الخطافات
00:04:38بلغة تايب سكريبت، لذا لدي بعض الإعدادات لتجميع تلك الخطافات في مجلد pb_hooks كجافا سكريبت لأن
00:04:44بوكيت بيس يدعم في الواقع جافا سكريبت فقط أصلياً، لذا إذا كنت تستخدم تايب سكريبت فأنت بحاجة إلى تجميعه
00:04:50إذا نظرنا داخل ملف الخطاف الرئيسي يمكننا أن نرى أن لدينا خطافاً هنا يقول onRecordCreate
00:04:55وهذا يستهدف تحديداً متى ننشئ مشكلات، وما نقوم به هنا هو أننا نقول
00:05:00في كل مرة يتم فيها إنشاء سجل، سنرسل بريداً إلكترونياً إلى المستخدم، ويمكننا القيام بذلك عن طريق استدعاء
00:05:05e.app.newMailClient().send وتمرير كائن الرسالة الذي قمنا بإنشائه هنا
00:05:10يمكنك بالطبع الربط بطن من الميزات المختلفة داخل بوكيت بيس، لذا أي وظيفة مخصصة
00:05:15قد تحتاجها ستكون مدعومة دائماً بـ 82 خطافاً إضافياً متاحة بالفعل في بوكيت
00:05:21بيس. نظراً لأن هذا يشغل إس كيو لايت، فهذا يعني أننا بحاجة إلى تخزين دائم، لذا المنصات السابقة مثل هيروكو (Heroku) أو رندر (Render)
00:05:28أو ريلواي (Railway) ستكون في الواقع خياراً سيئاً بسبب أنظمة ملفاتها المؤقتة، وبشكل أساسي ستفقد بياناتك
00:05:33في كل مرة تعيد فيها نشر تطبيقك. لتجنب ذلك، يمكنك إرفاق نظام ملفات دائم، ولكن الخيار الأفضل و
00:05:39الأرخص سيكون مجرد الاستضافة على خادم افتراضي خاص (VPS)، وتلك البيانات تعيش داخل مجلد pb_data، لذا إذا
00:05:45ألقينا نظرة هنا يمكنك رؤية أن لدينا مجلد تخزين، وهذا سيحتوي على جميع
00:05:50الصور التي قمنا بتحميلها مقابل مشكلاتنا، فهي ببساطة مخزنة في مجلد التخزين، لذا
00:05:55داخل هذا المعرف العشوائي هنا على سبيل المثال، يمكنك رؤية الصورة التي حملتها مقابل المشكلة
00:05:59سابقاً. ملفات قاعدة البيانات نفسها سيتم أيضاً الاحتفاظ بها داخل هذا المجلد، لذا data.db هنا، هذا
00:06:05سيحتوي على جميع كود إس كيو لايت الخاص بنا، لذا إذا قمت بحذف هذا الملف، فسأفقد كل البيانات في
00:06:11التطبيق. لذا من الواضح أنك تحتاج إلى استراتيجية نسخ احتياطي جيدة بدلاً من مجرد تركها كملف واحد
00:06:16على القرص. مقارنة بأدوات مثل سوبربيس التي يمكن أن تبدأ بسعر 25 دولاراً للمستوى الأساسي، بوكيت بيس هو
00:06:22مجاني أساساً، عليك فقط دفع تكاليف الخادم الافتراضي الخاص بك (VPS) والتي يمكن أن تصل إلى أربعة دولارات، وتسمح
00:06:28لك بتشغيل العديد من المشاريع كما تريد، ولكن بالطبع سترغب في توسيع نطاق ذلك مع الاستخدام
00:06:33يأتي بوكيت بيس أيضاً مع كل ما تحتاجه لتطبيقات الإنتاج مثل عمليات الترحيل (migrations)، وجدولة المهام، و
00:06:38السجلات (logging). يمكنك أيضاً تقديم ملفات ثابتة مباشرة باستخدام بوكيت بيس عن طريق وضعها في مجلد pb_public
00:06:44وهذا سيكون مفيداً لشيء مثل واجهة رياكت الأمامية. بدلاً من ذلك، يمكنك أيضاً استضافة
00:06:49مسارات ديناميكية مع عرض القوالب، وهذا سيكون مثالياً لأشياء مثل قوالب البريد الإلكتروني. لذا إذا كنت
00:06:54تريد حقاً إعداد صندوق واحد فقط، فهذه هي الطريقة التي تقوم بها بذلك. الآن السؤال الكبير، هل هذا جاهز للإنتاج؟
00:06:59حسناً، إنه يتضمن جميع الميزات التي ستحتاجها لبناء تطبيق برمجيات كخدمة (SaaS) حديث، ولا سيما
00:07:04ميزات مستوى الإنتاج مثل عمليات الترحيل والسجلات، كما أنه قابل للتوسيع بالكامل، لذا فأنت لست عالقاً
00:07:09فقط بالاعدادات الافتراضية. ولكن العقبة الكبيرة هي أن هذا قبل الإصدار الأول (pre-v1)، لذا فهم يقولون صراحةً أن تستخدمه فقط
00:07:15إذا كنت لا تمانع في قراءة سجلات التغيير وإجراء عمليات الترحيل يدوياً من وقت لآخر. ولكن إذا كان هذا
00:07:20أنت، فامض قدماً، يمكنك فقط بناء تطبيقك الأول بملف واحد. يمكنك معرفة المزيد عن بوكيت
00:07:25بيس عن طريق التحقق من الروابط ذات الصلة في الوصف، وإذا كنت تحب البدائل مفتوحة المصدر
00:07:29فراجع الفيديو الخاص بنا حول أوبن كود (OpenCode)، البديل مفتوح المصدر لـ كلود كود (Claude Code). لقد كنت معكم وارن من
00:07:35بيتر ستاك، شكراً للمشاهدة، وبالطبع سأراكم في المرة القادمة

Key Takeaway

يوفر بوكيت بيس بديلاً مفتوح المصدر ومبسطاً لبناء تطبيقات الويب من خلال دمج قاعدة البيانات والمصادقة وتخزين الملفات في ملف تنفيذي واحد قابل للتوسيع عبر لغتي جافا سكريبت وتايب سكريبت.

Highlights

  • بوكيت بيس (PocketBase) يعمل كملف تنفيذي واحد مبني بلغة جو (Go) يحتوي على قاعدة بيانات إس كيو لايت (SQLite) مدمجة.

  • يغطي بوكيت بيس ثلاثة متطلبات أساسية لتطبيقات الويب هي قاعدة البيانات في الوقت الفعلي، ومصادقة المستخدمين، وتخزين الملفات.

  • يوفر بوكيت بيس 82 خطافاً (hook) برمجياً لتوسيع الوظائف باستخدام لغتي جافا سكريبت أو تايب سكريبت.

  • يمكن استضافة بوكيت بيس على خادم افتراضي خاص (VPS) بتكلفة تبدأ من 4 دولارات شهرياً، مما يوفر بديلاً منخفض التكلفة لمنصات مثل سوبربيس.

  • يتم تخزين بيانات التطبيق، بما في ذلك ملفات قاعدة البيانات والصور، داخل مجلد محلي واحد يسمى pb_data.

  • تتطلب إدارة الوصول إلى مجموعات البيانات استخدام قواعد واجهة برمجة تطبيقات (API rules) تعتمد على معرف المستخدم المصادق عليه.

Timeline

مقدمة حول بوكيت بيس وبنيته الأساسية

  • يعد بوكيت بيس بديلاً مفتوح المصدر لخدمات مثل فايربيس وسوبربيس.
  • يعتمد النظام على ملف تنفيذي واحد بلغة جو (Go) مدمج معه قاعدة بيانات إس كيو لايت (SQLite).
  • يمكن التعامل مع النظام مباشرة من الواجهة الأمامية عبر حزمة تطوير برمجيات (SDK) خاصة بجافا سكريبت.

يعرض النظام بساطة فائقة في التشغيل مقارنة بتعقيدات تطوير الويب الحديث. يوفر واجهة مستخدم إدارية مدمجة لتكوين مجموعات البيانات والتحكم في الوصول إليها بشكل مشابه لما توفره المنصات الكبرى.

تطبيق عملي: إدارة حالة التطبيق والبيانات

  • يستخدم التطبيق مكتبة رياكت (React) مع بوكيت بيس للتحكم في الحالة.
  • تتم عملية المصادقة وتتبع المستخدمين عبر pb.authStore.record.
  • يتيح النظام الاشتراك في تحديثات قاعدة البيانات لحظياً لضمان تحديث حالة الواجهة الأمامية تلقائياً.

يوضح التطبيق العملي كيفية ربط واجهة رياكت بقاعدة البيانات الخلفية. عند سحب عنصر بين الأعمدة أو إنشاء مشكلة جديدة، يقوم النظام بتحديث الحالة محلياً عبر خطافات الاستماع، مما يغني عن تحديث الصفحة يدوياً.

إدارة القواعد والتوسيع عبر الخطافات

  • تُستخدم علامة تبويب قواعد واجهة برمجة التطبيقات لتقييد الوصول إلى مجموعات البيانات.
  • يمكن للمطورين توسيع وظائف النظام باستخدام 82 خطافاً فريداً متاحاً.
  • يجب تجميع أكواد تايب سكريبت إلى جافا سكريبت داخل مجلد pb_hooks ليعمل النظام معها.

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

الاستضافة، التخزين، والجاهزية للإنتاج

  • تتطلب طبيعة إس كيو لايت استخدام استضافة توفر نظام ملفات دائم مثل الخوادم الافتراضية الخاصة (VPS).
  • يتم تخزين جميع الملفات والقواعد داخل مجلد pb_data الذي يحتاج إلى استراتيجية نسخ احتياطي.
  • بما أن النظام لا يزال في مرحلة ما قبل الإصدار الأول (pre-v1)، يُنصح باستخدامه مع إدراك ضرورة إجراء عمليات الترحيل يدوياً.

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

Community Posts

View all posts