أنشئ باكند خفيف مع PocketBase
٢٢ نوفمبر ٢٠٢٥
TL;DR
- PocketBase هو backend متكامل يشمل قاعدة بيانات ومصادقة وواجهة إدارة جاهزة.
- إنها محلية-أول، مما يعني أنه يمكنك تشغيلها بالكامل على جهازك للبروتotyping السريع والتطوير دون اتصال.
- باعتماديات قليلة، إنه مثالي للتطبيقات الصغيرة والمشاريع الجانبية والنشر المدمج.
- يمكنك استضافتها بسهولة على خوادم صغيرة أو دمجها مع مشاريع الواجهة الأمامية لإنشاء تطبيقات مدمجة ومستقلة.
- إنه بديل ممتاز عندما لا تريد إدارة خدمات خلفية متعددة أو بنية تحتية معقدة.
ما ستتعلمه
- ما هو PocketBase ولماذا تم تصميمه للبساطة.
- كيفية إعداد backend خفيف في دقائق.
- كيفية استخدام قاعدة البيانات المدمجة والمصادقة وواجهة الإدارة.
- متى يكون PocketBase الخيار الصحيح—ومتى لا يكون.
- كيفية نشره وتوسيعه للإنتاج.
- الأخطاء الشائعة ونصائح استكشاف الأخطاء وإصلاحها.
المتطلبات الأساسية
- فهم أساسي لـ HTTP APIs وبنية الواجهة الأمامية-الخلفية.
- الاطلاع على JavaScript أو Python لاستخدام API.
- الوصول إلى الطرفية وقدرة على تشغيل الملفات الثنائية.
مقدمة: صعود Backend المحلي-أول
في عالم يهيمن عليه منصات سحابية ضخمة وخدمات ميكروسكوبية متشعبة، هناك شيء مريح حول backend يمكنك تشغيله محليًا دون Docker أو Kubernetes أو عشرات الخدمات المدارة. هذا بالضبط ما يقدمه PocketBase—برنامج تنفيذي واحد يمنحك قاعدة بيانات، طبقة API، مصادقة، ولوحة تحكم إدارية في حزمة خفيفة.
PocketBase مكتوب بلغة Go ويستخدم SQLite كقاعدة بيانات مضمنة. هذا المزيج يجعله سريعًا وقابلًا للنقل وقليل الصيانة. لا حاجة لتشغيل PostgreSQL أو Redis أو تكوين ORM. ما عليك سوى تنزيل الملف الثنائي وتشغيله، وسيتم تشغيل backend كامل على http://127.0.0.1:8090.
هذا النهج المحلي-أول مثالي للمطورين الذين يريدون نمذجة سريعة، وبناء تطبيقات تعمل دون اتصال، أو إنتاج منتجات صغيرة ومستقلة دون ثقل طبقات backend التقليدية.
لماذا PocketBase؟
PocketBase يهدف إلى حل مشكلة شائعة: إعداد مفرط مقابل كود قليل. معظم طبقات backend تتطلب قاعدة بيانات، ORM، طبقة REST أو GraphQL API، وسط مصادقة، وواجهة إدارية. لكل جزء اعتمادياته وتكوينه ومتطلبات النشر الخاصة به.
PocketBase يدمج كل هذا في ملف تنفيذي واحد.
| الميزة | Backend تقليدي (مثل Node.js + Express + PostgreSQL) | PocketBase |
|---|---|---|
| قاعدة البيانات | يتطلب إعداد (PostgreSQL، MongoDB، إلخ.) | SQLite مدمج |
| API طبقة | يتطلب Express/FastAPI/Django | REST API مدمج |
| المصادقة | يتطلب وسط أو خدمة (Auth0، Firebase) | نظام مصادقة مدمج |
| واجهة الإدارة | يتطلب بناء مخصص | لوحة تحكم ويب مدمجة |
| النشر | يتطلب وقت تشغيل + مضيف قاعدة البيانات | ملف ثنائي واحد، قابل للنشر في أي مكان |
هذه البساطة لا تعني أنها محدودة—فهي تدعم المنطق التجاري المخصص، والـ hooks، وامتدادات API، مما يجعلها مرنة بما يكفي للاستخدام في العالم الحقيقي.
البدء: backend في 5 دقائق
لنقم بإنشاء backend محدود مع PocketBase.
الخطوة 1: تنزيل وتشغيل PocketBase
ثم قم بتشغيله:
./pocketbase serve
سترى مخرجات مثل:
Server started at: http://127.0.0.1:8090
Admin UI: http://127.0.0.1:8090/_/
افتح لوحة التحكم الإدارية في متصفحك. سيتم طلب منك إنشاء حساب إداري.
الخطوة 2: إنشاء مجموعة
في واجهة الإدارة، أنشئ مجموعة جديدة تسمى posts بالحقول التالية:
title(نص)content(نص)published(منطقي)
PocketBase يعرض تلقائيًا REST API لهذه المجموعة.
الخطوة 3: اختبار API
يمكنك الآن التفاعل مع مجموعتك الجديدة عبر HTTP:
curl -X POST http://127.0.0.1:8090/API/collections/posts/records \
-H 'Content-Type: application/json' \
-d '{"title": "First Post", "content": "Hello World!", "published": true}'
الاستجابة:
{
"id": "abc123",
"collectionId": "posts",
"title": "First Post",
"content": "Hello World!",
"published": true,
"created": "2025-02-01T10:15:00Z"
}
لقد أنشأت مشاركة جديدة في backend الخاص بك—بدون ORM، بدون هجرات، ولا قاعدة بيانات خارجية.
التطوير المحلي-أول: لماذا يهم
تصميم PocketBase المحلي-أول يعني أن كل شيء يعمل على جهازك. هذا يجلب عدة فوائد:
- حلقة ملاحظات فورية – يمكنك تكرار منطق backend دون إعادة النشر.
- تطوير جاهز للعمل دون اتصال – مثالي للسفر، الفصول الدراسية، أو البيئات البعيدة.
- بيانات محمولة – قاعدة البيانات هي مجرد ملف SQLite، يمكن نسخها احتياطيًا أو إصدارها بسهولة.
- نمذجة أولية سريعة – مثالي للهاكاثونات أو MVPs.
هذا المفهوم يعكس الاتجاه المتزايد نحو أدوات تركز على المطور، حيث تعكس البيئات المحلية الإنتاج بدقة دون عبء اعتماديات السحابة.
الميزات المتكاملة التي تبسط كل شيء
1. قاعدة البيانات المدمجة
PocketBase تستخدم SQLite تحت الغطاء، لتمنحك الامتثال لمعايير ACID والمعاملات والفهارس—كل ذلك في ملف واحد. PocketBase مُختبرة في الميدان وتُستخدم في منتجات رئيسية مثل Chrome و Android1.
يمكنك الاستعلام عن مجموعاتك عبر REST API أو واجهة الإدارة. لمنطق أكثر تعقيدًا، يمكنك تعريف قواعد API أو Hooks باستخدام Go أو JavaScript.
2. المصادقة & التفويض
PocketBase تدعم تسجيل المستخدمين، وتسجيل الدخول، والمصادقة القائمة على الرموز بشكل افتراضي. يمكنك تحديد أدوار المستخدمين وقواعد الوصول لكل مجموعة.
مثال: قيّد posts للمستخدمين المصادق عليهم فقط.
{
"listRule": "@request.auth.id != ''",
"createRule": "@request.auth.id != ''"
}
هذا يضمن أن المستخدمين المسجلين فقط يمكنهم قراءة أو إنشاء المنشورات.
3. واجهة الإدارة
لوحة التحكم المدمجة هي واحدة من أكبر وفورات الوقت في PocketBase. يمكنك إدارة المجموعات والمستخدمين والملفات بصريًا، دون الحاجة لكتابة واجهات إدارية من الصفر.
4. تخزين الملفات
PocketBase تشمل تخزين الملفات للصور والمستندات. يتم تخزين الملفات محليًا افتراضيًا، لكن يمكنك تكوين تخزين خارجي (مثل S3) عند الحاجة.
نظرة عامة على البنية
هنا رسم تخطيطي مبسط للبنية:
graph TD
A[Frontend App] -->|REST/Realtime API| B[PocketBase Server]
B --> C[SQLite Database]
B --> D[File Storage]
B --> E[Admin UI]
هذه البنية الموحدة تلغي الحاجة إلى خدمات خلفية منفصلة، مما يجعلها مثالية للنشر المدمج.
متى تستخدم مقابل متى لا تستخدم PocketBase
| حالة الاستخدام | مُوصى به؟ | السبب |
|---|---|---|
| البروتايب السريع | ✅ | إعداد فوري، لا بنية تحتية |
| تطبيقات غير متصلة بالإنترنت | ✅ | قاعدة بيانات محلية وقدرة على المزامنة |
| تطبيقات صغيرة إلى متوسطة | ✅ | قابلة للتوسع بما يكفي للحركة المرورية المعتدلة |
| تطبيقات مضمنة (مثل Electron, Tauri) | ✅ | يمكن تضمين الخلفية محليًا |
| أنظمة إنتاجية ذات حركة مرور عالية | ⚠️ | SQLite قد تصبح عقبة |
| أنظمة موزعة معقدة | ❌ | ليست مصممة لمجموعات متعددة العقد |
PocketBase تبرز عندما تكون البساطة والسرعة أهم من القابلية للتوسع الموزع.
مثال من الواقع: تطبيق مدونة محلي أول
تخيل بناء تطبيق مدونة يعمل دون اتصال ويتمزامن عند الاتصال. PocketBase مناسب تمامًا:
- يحتوي التطبيق على PocketBase كخلفية محلية.
- واجهة العميل (React, Svelte, أو Flutter) تتفاعل عبر REST API.
- يمكن للمستخدمين كتابة الملاحظات دون اتصال، مخزنة في SQLite.
- عند الاتصال، يتم مزامنة البيانات مع نسخة PocketBase البعيدة.
هذا النمط يعكس ما تهدف إليه العديد من التطبيقات الحديثة (مثل Notion أو Obsidian)—تجارب محلية سريعة مع مزامنة سحابية اختيارية.
اعتبارات الأمان
بينما تُبسط PocketBase إعداد الخلفية، لا يزال الأمان مهمًا:
- استخدم HTTPS في الإنتاج (عبر بروكسي عكسي مثل Nginx أو Caddy).
- حماية واجهة الإدارة خلف المصادقة.
- التحقق من بيانات العميل باستخدام قواعد المجموعات.
- قم بعمل نسخ احتياطية دورية لملف SQLite.
- حافظ على تحديث الملفات الثنائية لإصلاح الثغرات.
PocketBase تتبع ممارسات أمان الويب القياسية، لكن مسؤولية تكوين بيئات الإنتاج بأمان تقع عليك23.
الأداء والقابلية للتوسع
SQLite مذهلة في قدرتها—يمكنها التعامل مع آلاف الطلبات في الثانية للعملات الثقيلة في القراءة4. لكن بالنسبة للأنظمة المكثفة في الكتابة أو الموزعة، فهي ليست مثالية.
يمكنك توسيع PocketBase عن طريق:
- استخدام النسخ المكررة للقراءة للتحليلات.
- نشر عدة نسخ خلف موزع أحمال (وضع القراءة فقط).
- الانتقال إلى خدمة مدعومة بـ PostgreSQL إذا تجاوزت SQLite.
لكن بالنسبة للمشاريع الصغيرة والمتوسطة، PocketBase تقدم أداءً ممتازًا مع أقل قدر من التكلفة.
اختبار وسير العمل التطويري
يمكنك اختبار خلفية PocketBase محليًا باستخدام أدوات مثل pytest أو Jest.
مثال اختبار Python باستخدام requests:
import requests
def test_create_post():
data = {"title": "Test", "content": "Works!", "published": True}
r = requests.post("http://127.0.0.1:8090/API/collections/posts/records", json=data)
assert r.status_code == 200
assert r.json()["title"] == "Test"
يمكن دمج هذا الاختبار في خطوط أنابيب CI/CD للتحقق التلقائي.
الأخطاء الشائعة & الحلول
| المشكلة | السبب | الحل |
|---|---|---|
| API returns 401 | رمز المصادقة مفقود | أضف رأس Authorization: Bearer <token> |
| عدم حفظ البيانات | قواعد غير صالحة | تحقق من قواعد المجموعة في واجهة الإدارة |
| فشل رفع الملف | مسار أو صلاحيات خاطئة | تحقق من صلاحيات الدليل pb_data |
| واجهة الإدارة لا تحمّل | تعارض المنفذ | غير المنفذ باستخدام علامة --http=8080 |
أنماط معالجة الأخطاء
PocketBase يُعيد رموز HTTP واضحة:
200للنجاح400للطلبات غير الصحيحة401غير المصرح له404غير موجود
في واجهة العميل، تعامل مع الأخطاء بسلاسة:
try {
const res = await fetch('/API/collections/posts/records', { method: 'GET' });
if (!res.ok) throw new Error(`Error ${res.status}`);
const data = await res.json();
} catch (err) {
console.error('API Error:', err.message);
}
المراقبة والرصد
PocketBase يسجل الطلبات والأخطاء إلى stdout. للإنتاج:
- إعادة توجيه السجلات إلى ملف أو خدمة مراقبة.
- استخدم أدوات مثل Promtail + Loki أو Datadog لتجميع السجلات.
- راقب استخدام القرص لملف SQLite.
الأخطاء الشائعة التي يرتكبها الجميع
- معاملة PocketBase مثل Firebase – إنها محلية أولًا، وليست مدارة سحابيًا.
- تجاهل النسخ الاحتياطية – SQLite هو ملف؛ قم بنسخه احتياطيًا بانتظام.
- تخطي HTTPS – دائمًا أمن نقاط النهاية الخاصة بك.
- تعقيد النشر – أنت لا تحتاج إلى Docker ما لم ترغب في ذلك.
دليل استكشاف الأخطاء وإصلاحها
| الأعراض | السبب المحتمل | الحل |
|---|---|---|
| الخادم لا يبدأ | المنفذ مستخدم | استخدم --http=8081 |
| فقدان كلمة مرور الإدارة | احذف pb_data وأعد التهيئة |
أعد إنشاء مستخدم الإدارة |
| API أخطاء 500 | قاعدة بيانات تالفة | استعادة من النسخة الاحتياطية |
| استعلامات بطيئة | فهرس مفقود | أضف الفهارس في واجهة الإدارة |
جربها بنفسك
التحدي: إنشاء مهام API باستخدام PocketBase.
- إنشاء مجموعة
tasksتحتوي على حقولtitle،done، وuser. - أضف قاعدة بحيث يرى المستخدمون مهامهم فقط.
- بناء واجهة أمامية صغيرة (React/Vue/Svelte) تتفاعل معها.
- تشغيل كل شيء محليًا.
ستحصل على تطبيق full-stack كامل الوظائف في أقل من ساعة.
النظرة المستقبلية
PocketBase يمثل تحولًا أوسع نحو خلفيات خفيفة الوزن ومبنية محليًا أولًا. مع بحث المطورين عن تكرار أسرع والاستقلال عن البنية السحابية الثقيلة، تُظهر أدوات مثل PocketBase و Supabase و Appwrite كم يمكن تحقيقه مع إعدادات بسيطة.
توقع المزيد من الإطارات لتبني هذه الفلسفة — يشمل كل ما تحتاجه، بدون احتكاك.
النقاط الرئيسية
PocketBase هو المسار الأبسط للحصول على backend كامل دون تعقيدات السحابة.
- binary واحد = قاعدة بيانات + API + auth + واجهة إدارية.
- مثالية للنماذج الأولية، المشاريع الجانبية، والتطبيقات المحلية أولاً.
- تتوسع بشكل مدهش للنشرات الصغيرة إلى المتوسطة الحجم.
- تشجع على عادات تطوير جيدة: التكرار المحلي، النسخ الاحتياطي، والبساطة.
أسئلة شائعة
س1: هل PocketBase جاهز للإنتاج؟
نعم — للمشاريع الصغيرة إلى المتوسطة. بالنسبة للأحمال الضخمة، فكر في الانتقال إلى قاعدة بيانات موزعة.
س2: هل يمكنني استخدامه مع React أو Vue؟
بالتأكيد. يعرض REST API يمكن لأي واجهة أمامية استهلاكه.
س3: هل يدعم التحديثات في الوقت الحقيقي؟
نعم، PocketBase يدعم الاشتراكات في الوقت الحقيقي عبر WebSockets.
س4: هل يمكنني استضافته على Raspberry Pi؟
نعم — خفيف بما يكفي للتشغيل على أجهزة منخفضة الطاقة.
س5: كيف أقوم بنسخ البيانات احتياطيًا؟
انسخ ملف SQLite (pb_data/data.db) بشكل منتظم أو قم بأتمتة النسخ الاحتياطي باستخدام cron jobs.
الخطوات التالية
- جرب تضمينه في تطبيق Tauri أو Electron.
- جرّب قواعد API المخصصة وتدفقات المصادقة.
- اشترك في نشرتنا الإخبارية لمزيد من التحليلات المتعمقة في هندسة الـbackend.
الهوامش
-
وثائق SQLite الرسمية – https://www.sqlite.org/about.html ↩
-
OWASP أعلى 10 مخاطر أمنية – https://owasp.org/www-project-top-ten/ ↩
-
Mozilla Developer Network: أساسيات أمان الويب – https://developer.mozilla.org/en-US/docs/Web/Security ↩
-
اعتبارات أداء SQLite – https://sqlite.org/whentouse.html ↩