لماذا تستضيف PocketBase على خادم VPS بدلًا من BaaS سحابي
تفرض Firebase وSupabase ومنصّات BaaS السحابية المماثلة رسومًا على كل قراءة، وكل كتابة، وكل غيغابايت من التخزين، وكل مستخدم نشط. يمكن لتطبيق صغير ببضعة آلاف من المستخدمين أن يراكم بسهولة فاتورة تتراوح بين $50 و$200 شهريًا — قبل أي ذروة في الزيارات. يستبدل PocketBase على خادم VPS هذه الحزمة بأكملها برسم شهري ثابت واحد. تبقى بياناتك على خادمك تحت سيطرتك، وأنت من يقرّر متى يرقّي، ولا توجد فوترة لكل طلب لتقلق بشأنها. ولأن الملف التنفيذي يضمّن SQLite، فإنك تتخطّى خطوة تهيئة قاعدة البيانات بالكامل: لا سلسلة اتصال Postgres، ولا مستخدم قاعدة بيانات، ولا مجموعة أمان (security group) لإعدادها.
ما الذي تحصل عليه مع PocketBase مُستضاف ذاتيًا
- قاعدة بيانات SQLite مدمجة — لا خادم قاعدة بيانات منفصل، مجرّد ملف واحد لنسخه احتياطيًا.
- اشتراكات WebSocket فورية — حدّث واجهة تطبيقك الأمامية لحظة تغيّر أي سجلّ.
- مصادقة مدمجة: البريد الإلكتروني/كلمة المرور، وOAuth2 (Google وGitHub وApple وGitLab…)، وOTP والرابط السحري (magic link).
- تخزين للملفات مع تغيير حجم الصور آنيًا والتحكّم في الوصول لكل مجموعة.
- واجهة REST مُولَّدة تلقائيًا مع التصفية والفرز والتقسيم إلى صفحات وإظهار على مستوى الحقول.
- لوحة تحكّم إدارية عبر الويب — أنشئ المجموعات، وأدر السجلات، وادعُ المسؤولين من متصفّحك.
- حِزم تطوير SDK لـ JavaScript وDart للتكامل الفوري مع React وVue وFlutter وReact Native.
المتطلّبات المسبقة
PocketBase خفيف للغاية. يتعامل خادم VPS بمعالج افتراضي واحد (1-vCPU) وذاكرة 1–2 غيغابايت من RAM مع آلاف المستخدمين النشطين يوميًا بأريحية. خطّط لما لا يقل عن 10 غيغابايت من القرص إذا كنت تخزّن ملفات يرفعها المستخدمون؛ وأضف المزيد مع نمو تخزين ملفاتك. تحتاج إلى تثبيت Docker، واسم نطاق موجَّه إلى عنوان IP الخاص بخادم VPS، والمنفذين 80 و443 مفتوحين. إذا كنت تعالج مدفوعات أو بيانات حسّاسة، فعّل النسخ الاحتياطي التلقائي لوحدة تخزين Docker.
نشر PocketBase باستخدام Docker وHTTPS
تثبيت Docker
اتصل عبر SSH، وحدّث النظام وثبّت Docker: curl -fsSL https://get.docker.com | sh. تحقّق باستخدام docker --version.
تشغيل PocketBase
شغّل الحاوية: docker run -d -p 127.0.0.1:8090:8090 -v pocketbase:/pb/pb_data --name pocketbase --restart always ghcr.io/muchobien/pocketbase:latest. يُبقي الربط بـ 127.0.0.1 واجهة API بعيدة عن الإنترنت العام إلى أن تضيف وكيلًا عكسيًا.
إنشاء حساب المسؤول الخاص بك
يكون PocketBase متاحًا مؤقتًا على المنفذ 8090 للإعداد الأولي: curl http://localhost:8090/_/. افتح http:// في متصفّحك، وأدخل بريدًا إلكترونيًا وكلمة مرور، لتصل إلى لوحة التحكّم الإدارية.
إضافة وكيل عكسي مع HTTPS
ثبّت Caddy: apt install -y caddy. أضف مدخلًا في Caddyfile: pb.yourdomain.com { reverse_proxy localhost:8090 }. شغّل systemctl reload caddy. أصبحت نسخة PocketBase الخاصة بك الآن على https://pb.yourdomain.com بشهادة Let's Encrypt صالحة — وتعمل اتصالات WebSocket الفورية بشفافية.
إنشاء مجموعتك الأولى
في لوحة التحكّم الإدارية، انقر على New Collection، وسمّها (مثلًا posts)، وأضف الحقول (title: نص، body: نص، author: علاقة ← users)، وحدّد قواعد الوصول. يولّد PocketBase فورًا نقاط نهاية REST: GET /api/collections/posts/records وPOST /api/collections/posts/records وغيرها.
ربط واجهتك الأمامية
ثبّت حزمة SDK الخاصة بـ JS: npm install pocketbase. في واجهتك الأمامية: import PocketBase from 'pocketbase'; const pb = new PocketBase('https://pb.yourdomain.com');. اشترك في التحديثات الفورية: pb.collection('posts').subscribe('*', ({ action, record }) => { console.log(action, record) }).
جدول نسخًا احتياطية تلقائية لوحدة تخزين Docker المسمّاة pocketbase إلى حاوية تخزين بعيدة متوافقة مع S3 باستخدام rclone. يحافظ أمر يومي docker run --rm -v pocketbase:/data -v ~/.config/rclone:/config/rclone rclone/rclone copy /data your-remote:pocketbase-backup/ على نسخة متجدّدة خارج الموقع — وهو أمر بالغ الأهمية لأن SQLite يخزّن كل شيء في ملف واحد.