لماذا تستضيف PocketBase ذاتيًا على خادم VPS
PocketBase هو خلفية كخدمة (backend-as-a-service) مفتوحة المصدر موزّعة على شكل ملف تنفيذي واحد: لا Postgres منفصل، ولا Redis، ولا حزمة معقّدة لتنسيقها. يعتمد كل شيء على SQLite، ما يجعله مناسبًا تمامًا لخادم VPS من الفئة المبتدئة. باستضافته ذاتيًا، تحتفظ بالتحكم الكامل في بيانات مستخدميك وملفاتك، دون الاعتماد على Firebase أو Supabase مُدار قد تشكّل حصصه وزمن استجابته من المغرب مشكلة. يمنحك خادم VPS عنوان IP ثابتًا، ونطاقًا مخصصًا، ونسخًا احتياطية تتحكم فيها. وبما أن PocketBase يكتب في مجلد pb_data واحد، تتلخّص استراتيجية النسخ الاحتياطي في نسخ هذا المجلد، ما يبسّط التشغيل كثيرًا مقارنةً بعنقود قاعدة بيانات تقليدي.
الفوائد الملموسة للاستضافة الذاتية لـ PocketBase
- ملف تنفيذي واحد للنشر: بدء التشغيل في ثوانٍ، وبصمة ذاكرة ضئيلة (غالبًا أقل من 100 ميغابايت من RAM).
- قاعدة SQLite مدمجة: صفر خدمة قاعدة بيانات للإدارة، ونسخ احتياطي بمجرد نسخ مجلد
pb_data. - مصادقة، وقواعد وصول، وإدارة ملفات، وواجهة برمجية في الوقت الفعلي عبر WebSocket مضمّنة أصلاً.
- واجهة إدارة ويب كاملة لإدارة المجموعات والمستخدمين والصلاحيات دون كتابة SQL.
- سيادة البيانات: يبقى مستخدموك وملفاتهم على بنيتك التحتية، خلف نطاقك.
- تكلفة يمكن التنبؤ بها: يكفي خادم VPS متواضع لعشرات الآلاف من الطلبات يوميًا.
المتطلبات المادية والبرمجية
PocketBase مقتصد للغاية. يدير خادم VPS بمعالج افتراضي واحد (1 vCPU) و1 غيغابايت من RAM مشروع إنتاج من حجم متواضع إلى متوسط دون صعوبة؛ ويوفّر 2 غيغابايت هامشًا مريحًا لذاكرة SQLite المؤقتة وذُرَى الحركة في الوقت الفعلي. على صعيد التخزين، خصّص 20 إلى 40 غيغابايت من SSD حسب حجم الملفات التي يرفعها مستخدموك. ستحتاج إلى Docker وDocker Compose (أو ببساطة الملف التنفيذي وsystemd)، ونطاق أو نطاق فرعي يشير إلى عنوان IP الخاص بخادم VPS عبر سجل A، ووكيل عكسي (Caddy أو Nginx أو Traefik) لإدارة TLS. وبما أن SQLite أحادي الملف، فضّل قرص SSD NVMe لأداء جيد في الكتابة المتزامنة.
نشر PocketBase خطوة بخطوة
تهيئة خادم VPS وDNS
اتصل عبر SSH، وحدّث النظام بـ apt update && apt upgrade -y، ثم ثبّت Docker عبر curl -fsSL https://get.docker.com | sh. أنشئ سجل DNS من النوع A يشير app.mydomain.com إلى عنوان IP العام لخادم VPS وانتظر انتشاره.
كتابة ملف docker-compose.yml
استخدم صورة PocketBase (مثل: ghcr.io/muchobien/pocketbase)، واكشف المنفذ 8090 داخليًا، وركّب وحدة تخزين مسمّاة على /pb_data للحفاظ على قاعدة البيانات والملفات: volumes: - ./pb_data:/pb_data. لا تنشر المنفذ مباشرة على الإنترنت، ودع الوكيل العكسي يتولى ذلك.
إطلاق الحاوية
نفّذ docker compose up -d ثم docker compose logs -f للتحقق من أن PocketBase يبدأ ويعرض عنوان URL الخاص بالإدارة. تستمع الخدمة داخليًا على 0.0.0.0:8090.
تهيئة الوكيل العكسي وSSL
مع Caddy، يكفي ملف Caddyfile من ثلاثة أسطر: app.mydomain.com { reverse_proxy localhost:8090 }. يحصل Caddy على شهادة Let's Encrypt ويجدّدها تلقائيًا. تذكّر السماح بمرور WebSockets للاشتراكات في الوقت الفعلي (يفعل Caddy ذلك افتراضيًا؛ وفي Nginx أضف ترويستي Upgrade وConnection).
إنشاء حساب الإدارة والمجموعات
افتح https://app.mydomain.com/_/، وأنشئ أول حساب super-admin، ثم حدّد مجموعاتك، وقواعد واجهتك البرمجية (@request.auth.id != "")، ومزوّدي مصادقة OAuth عند الحاجة.
أتمتة النسخ الاحتياطية
جدوِل مهمة cron تؤرشف مجلد pb_data (tar czf backup-$(date +%F).tar.gz pb_data) إلى تخزين خارجي. يوفّر PocketBase أيضًا نسخًا احتياطية مدمجة يمكن تشغيلها من الإدارة أو الواجهة البرمجية.
فعّل وضع WAL في SQLite (يفعله PocketBase افتراضيًا منذ الإصدارات الحديثة) للسماح بالقراءات المتزامنة أثناء الكتابة: فهذا هو أهم عامل للأداء. للحركة العالية، ضع مجلد pb_data على وحدة تخزين NVMe وتجنّب NFS أو أي نظام ملفات شبكي، فهو يُضعف أداء SQLite بشدة وقد يُتلف قاعدة البيانات في حال سوء إدارة الأقفال.
الوثائق الرسمية
للتهيئة المتقدمة والخيارات الخاصة بالأداة، راجع الوثائق الرسمية لـ PocketBase. يغطّي هذا الدليل الإطلاق على خادم VPS؛ وتبقى وثائق المطوّر المرجع للضبط الدقيق والتحديثات الكبرى وحالات الاستخدام الخاصة.