دليل النشر

استضافة PocketBase على خادم VPS: دليل شامل

انشر على VPS Cloud ←

دليل عملي

استضافة PocketBase على خادم VPS: دليل شامل

قواعد البيانات10 دقائق للقراءةعدد الخطوات: 5

‏يعمل PocketBase كملف تنفيذي واحد مكتوب بـ Go: قاعدة بيانات SQLite مدمجة، مصادقة، تخزين ملفات، واجهة برمجية REST واشتراكات فورية، مع لوحة إدارة مدمجة. إنه الواجهة الخلفية المثالية لاستضافتها ذاتيًا على VPS خفيف لتطبيقاتك. يأخذك هذا الدليل من تثبيت Docker إلى إعداد HTTPS ومصادقة OAuth والنسخ الاحتياطي التلقائي.

المحتويات· ‏لماذا تستضيف PocketBase ذاتيًا على VPS1/11
  1. 01‏لماذا تستضيف PocketBase ذاتيًا على VPS
  2. 02‏الفوائد العملية لاستضافة PocketBase ذاتيًا
  3. 03‏المتطلبات الدقيقة: VPS والنظام والبرمجيات
  4. 04‏نشر PocketBase على VPS خطوة بخطوة
  5. 05‏إعداد مصادقة OAuth (Google وGitHub وGitLab)
  6. 06‏النسخ الاحتياطي التلقائي: SQLite والملفات
  7. 07‏وضع WAL في SQLite والأداء
  8. 08‏استكشاف الأخطاء: الأخطاء الشائعة
  9. 09‏للمضي قُدمًا: CLI الإدارة والمجموعات والخطافات
  10. 10‏PocketBase مقابل البدائل المستضافة ذاتيًا
  11. 11‏التوثيق الرسمي

‏لماذا تستضيف PocketBase ذاتيًا على VPS

‏PocketBase هو نظام backend-as-a-service مفتوح المصدر يُوزَّع كملف تنفيذي واحد: لا Postgres منفصل، لا Redis، لا بنية معقدة. يعتمد كليًا على SQLite مما يجعله مثاليًا لخادم VPS متواضع.

باستضافته ذاتيًا، تحتفظ بالسيطرة الكاملة على بيانات مستخدميك وملفاتهم، دون الاعتماد على Firebase أو Supabase المُدار مع الحصص والتأخير. يمنحك VPS عنوان IP ثابتًا ونطاقًا مخصصًا ونسخًا احتياطية تتحكم فيها.

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

‏الفوائد العملية لاستضافة PocketBase ذاتيًا

  • ‏ملف تنفيذي واحد للنشر: يبدأ في ثوانٍ، بصمة ذاكرة ضئيلة (أقل من 100 ميجابايت عادةً).
  • ‏قاعدة بيانات SQLite مدمجة: لا خدمة قاعدة بيانات لإدارتها، النسخ الاحتياطي بنسخ مجلد pb_data.
  • ‏مصادقة كاملة (بريد إلكتروني/كلمة مرور، OAuth2، OTP، LDAP) وقواعد وصول دقيقة لكل مجموعة.
  • ‏واجهة برمجية فورية عبر Server-Sent Events لمزامنة العملاء تلقائيًا.
  • ‏لوحة إدارة ويب كاملة لإدارة المجموعات والمستخدمين والصلاحيات والملفات.
  • ‏سيادة البيانات: مستخدموك وملفاتهم على بنيتك التحتية، خلف نطاقك.
  • ‏تكلفة يمكن التنبؤ بها: سعر VPS لا يتغير بالحركة، على عكس الفوترة لكل طلب.

‏المتطلبات الدقيقة: VPS والنظام والبرمجيات

‏PocketBase خفيف جدًا. إليك ما تحتاجه حسب الحمل:

‏الحد الأدنى المطلق: 1 vCPU، 512 ميجابايت RAM. كافٍ لمشروع تطوير أو تطبيق صغير بأقل من 1000 مستخدم نشط.

‏موصى به في الإنتاج: 1 vCPU، 1 جيجابايت RAM. يتعامل PocketBase مع مشروع صغير إلى متوسط بهذا الإعداد بسهولة.

‏للأحجام الكبيرة: 2 vCPU، 2 جيجابايت RAM. القيد عادةً الكتابة المتزامنة على SQLite لا المعالج.

‏للتخزين، خطط لـ 20 إلى 40 جيجابايت SSD NVMe حسب حجم الملفات. تجنب أنظمة ملفات الشبكة (NFS) التي قد تتلف القاعدة.

‏البرمجيات المطلوبة: Docker 24+ وDocker Compose v2، نطاق يشير إلى عنوان IP عبر سجل A، بروكسي عكسي (Caddy أو Nginx) لإدارة TLS.

‏نشر PocketBase على VPS خطوة بخطوة

  1. ‏إعداد VPS وDNS

    ‏اتصل عبر SSH، حدّث النظام بـ apt update && apt upgrade -y، ثم ثبّت Docker عبر السكريبت الرسمي: curl -fsSL https://get.docker.com | sh. أضف مستخدمك لمجموعة Docker بـ usermod -aG docker $USER.

    ‏أنشئ سجل DNS من النوع A يوجّه app.your-domain.com إلى عنوان IP العام للخادم. تحقق بـ dig app.your-domain.com.

  2. ‏إنشاء هيكل الملفات

    ‏أنشئ مجلدًا مخصصًا وملف التكوين:

    mkdir -p /opt/pocketbase && cd /opt/pocketbase

    ‏أنشئ ملف docker-compose.yml بالمحتوى التالي:

    services:
      pocketbase:
        image: ghcr.io/muchobien/pocketbase:latest
        restart: unless-stopped
        volumes:
          - ./pb_data:/pb_data
        expose:
          - "8090"

    ‏لا تنشر المنفذ 8090 مباشرة على الإنترنت — دع البروكسي العكسي يتولى الأمر.

  3. ‏إعداد HTTPS مع Caddy

    ‏يحصل Caddy تلقائيًا على شهادات Let's Encrypt ويجددها. أنشئ /opt/pocketbase/Caddyfile:

    app.your-domain.com {
        reverse_proxy pocketbase:8090
    }

    ‏أضف خدمة Caddy في docker-compose.yml:

      caddy:
        image: caddy:2-alpine
        restart: unless-stopped
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./Caddyfile:/etc/caddy/Caddyfile
          - caddy_data:/data
        depends_on:
          - pocketbase
    
    volumes:
      caddy_data:

    ‏يُفعّل Caddy WebSockets تلقائيًا. إذا فضّلت Nginx، أضف رؤوس Upgrade وConnection في location /.

  4. ‏التشغيل والتحقق

    ‏شغّل البنية بـ docker compose up -d ثم تابع السجلات:

    docker compose logs -f pocketbase

    ‏يجب أن ترى سطرًا يشير إلى أن PocketBase يستمع على 0.0.0.0:8090. تحقق من HTTPS بـ curl -I https://app.your-domain.com/_/ — يجب أن يعيد HTTP/2 200.

  5. ‏إنشاء حساب المشرف الأول

    ‏افتح https://app.your-domain.com/_/ في متصفحك. عند أول وصول، يطلب PocketBase إنشاء حساب مشرف أعلى (بريد + كلمة مرور). افعل هذا فورًا بعد التشغيل — قبل إتاحة الرابط للعموم — لأن أي شخص يصل /_/ يمكنه إنشاء هذا الحساب على نسخة جديدة.

‏إعداد مصادقة OAuth (Google وGitHub وGitLab)

‏يدعم PocketBase OAuth2 بشكل أصلي مع عدة موفرين: Google وGitHub وGitLab وDiscord وTwitter/X وMicrosoft وApple وغيرهم. يتم الإعداد كليًا من لوحة الإدارة.

‏لـ Google OAuth:
‏1. افتح Google Cloud Console، أنشئ مشروعًا وفعّل "OAuth consent screen".
‏2. في "Credentials"، أنشئ "OAuth 2.0 Client ID" من نوع "Web application".
‏3. أضف https://app.your-domain.com/api/oauth2-redirect كـ URI إعادة توجيه مصرح به.
‏4. انسخ Client ID وClient secret.
‏5. في PocketBase /_/، اذهب إلى Settings → Auth providers → Google، فعّله والصق بياناتك.

‏لـ GitHub OAuth:
‏1. في GitHub، اذهب إلى Settings → Developer settings → OAuth Apps → New OAuth App.
‏2. عيّن https://app.your-domain.com كـ Homepage URL وhttps://app.your-domain.com/api/oauth2-redirect كـ Authorization callback URL.
‏3. انسخ Client ID وأنشئ Client Secret.
‏4. فعّل GitHub في Settings → Auth providers في PocketBase.

‏يظهر كل موفر مفعّل تلقائيًا في صفحة تسجيل الدخول. يحتاج الفرونت إند فقط إلى استدعاء pb.collection('users').authWithOAuth2({ provider: 'google' }) عبر SDK JavaScript.

‏النسخ الاحتياطي التلقائي: SQLite والملفات

‏يخزن PocketBase كل شيء في مجلد pb_data: قاعدة البيانات (pb_data/data.db)، الملفات المرفوعة (pb_data/storage/) والسجلات. النسخ الاحتياطي الكامل هو مجرد أرشفة هذا المجلد.

‏الطريقة 1 — cron بسيط: أضف هذا السطر إلى crontab (crontab -e) لنسخة احتياطية يومية الساعة 3 صباحًا:

0 3 * * * tar czf /var/backups/pocketbase-$(date +\%F).tar.gz /opt/pocketbase/pb_data && find /var/backups -name 'pocketbase-*.tar.gz' -mtime +7 -delete

‏الطريقة 2 — نسخ PocketBase المدمجة: من /_/، اذهب إلى Settings → Backups. يمكن لـ PocketBase إنشاء أرشيفات pb_data من الإدارة أو عبر API (POST /api/backups).

‏الطريقة 3 — rclone إلى S3: للنسخ خارج الموقع تلقائيًا:

0 4 * * * rclone sync /opt/pocketbase/pb_data your-remote:pocketbase-backup/

‏احتفظ دائمًا بنسخة خارج الخادم — إذا تعطل القرص، لا تُجدي النسخة المحلية.

‏وضع WAL في SQLite والأداء

‏يُفعّل PocketBase وضع WAL (Write-Ahead Logging) في SQLite بشكل افتراضي في الإصدارات الحديثة. يتيح هذا الوضع القراءة المتزامنة أثناء الكتابة. إذا واجهت مهلة انتهاء في ظل الضغط العالي، تحقق بـ PRAGMA journal_mode; في مشرف SQL — يجب أن تكون الإجابة wal.

‏للحركة العالية، ضع pb_data على مجلد NVMe وتجنب أي نظام ملفات شبكي.

‏استكشاف الأخطاء: الأخطاء الشائعة

‏المنفذ مستخدم بالفعل: إذا فشل docker compose up بـ bind: address already in use، تحقق بـ ss -tlnp | grep ':80' أي خدمة تشغل المنفذ. أوقفها (systemctl stop nginx) أو غيّر منافذها.

‏صلاحيات pb_data: يعمل PocketBase بالمستخدم nobody (UID 65534) في الحاوية الرسمية. إذا كان المجلد أُنشئ بـ root، فالعملية لا تستطيع الكتابة. صحّح بـ chown -R 65534:65534 /opt/pocketbase/pb_data.

‏/_/ غير متاحة بعد التشغيل: تحقق من أن البروكسي العكسي يشير إلى اسم الخدمة Docker (pocketbase:8090) وليس localhost:8090. في شبكة Docker Compose، تتواصل الخدمات بأسمائها.

‏تحديث PocketBase: غيّر وسم الصورة في docker-compose.yml ثم docker compose pull && docker compose up -d. يُطبّق PocketBase ترحيلات المخطط تلقائيًا. احتفظ بنسخة من pb_data قبل أي تحديث رئيسي.

‏شهادة Let's Encrypt لم تُحصل: يحتاج Caddy المنفذين 80 و443 متاحَين من الإنترنت. تحقق من جدار الحماية (ufw status).

‏للمضي قُدمًا: CLI الإدارة والمجموعات والخطافات

‏CLI الإدارة: يكشف PocketBase واجهة سطر أوامر للعمليات الشائعة. من الحاوية: docker exec -it pocketbase_pocketbase_1 /pb/pocketbase --help.

‏المجموعات المخصصة: في /_/، أنشئ مجموعاتك (ما يعادل الجداول) بتعريف حقول مكتوبة (نص، رقم، منطقي، تاريخ، ملف، علاقة، JSON). تُعبَّر قواعد API بصياغة PocketBase (@request.auth.id != "" للتقييد بالمستخدمين المسجلين).

‏الخطافات (JavaScript من جانب الخادم): منذ PocketBase v0.17، يمكنك توسيع الواجهة الخلفية بسكريبتات JavaScript تعمل من جانب الخادم (pb_hooks/*.pb.js). أمثلة: إرسال بريد عند إنشاء مستخدم، التحقق من بيانات معقدة، تشغيل webhook.

‏SDK JavaScript: يبسّط SDK الرسمي (npm install pocketbase) الاستدعاءات من React أو Vue أو التطبيقات المحمولة. يتولى المصادقة وتحديث التوكن والاشتراكات الفورية (pb.collection('tasks').subscribe('*', callback)).

‏PocketBase مقابل البدائل المستضافة ذاتيًا

مرّر الجدول أفقيًا

‏المعيار‏PocketBase‏Supabase self-hosted‏Appwrite
‏تعقيد التثبيت‏منخفض جدًا (ملف واحد أو حاوية واحدة)‏مرتفع (10+ خدمات)‏متوسط (6 خدمات)
‏الحد الأدنى من RAM‏512 ميجابايت‏4 جيجابايت+‏2 جيجابايت+
‏قاعدة البيانات‏SQLite مدمج‏PostgreSQL‏MariaDB
‏مصادقة OAuth‏نعم (أصلي)‏نعم (GoTrue)‏نعم (أصلي)
‏الوقت الفعلي‏Server-Sent Events‏WebSocket‏WebSocket
‏تخزين الملفات‏نعم (محلي + S3)‏نعم (S3 متوافق)‏نعم (محلي + S3)
‏التوسع الأفقي‏لا (SQLite ملف واحد)‏نعم (PostgreSQL)‏محدود

‏التوثيق الرسمي

‏للإعداد المتقدم والخيارات الخاصة بالأداة، راجع التوثيق الرسمي لـ PocketBase. يغطي هذا الدليل النشر على VPS؛ توثيق الناشر هو المرجع للضبط الدقيق والتحديثات الرئيسية.

‏إذا أردت اختبار PocketBase دون Docker، نزّل الملف التنفيذي لـ Linux من github.com/pocketbase/pocketbase/releases، شغّل ./pocketbase serve --http=0.0.0.0:8090 وأنشئ خدمة systemd لإعادة التشغيل التلقائي.

أطلق خلفية PocketBase الخاصة بك في دقائق

يمنحك خادم ServOrbit Cloud VPS بيئة Docker جاهزة للاستخدام، وعنوان IP ثابتًا، وأقراص SSD سريعة لاستضافة PocketBase مع SSL تلقائي ونسخ احتياطية مبسّطة.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة