دليل النشر

كيفية استضافة PostHog على خادم VPS

انشر على VPS Cloud ←

دليل عملي

كيفية استضافة PostHog على خادم VPS

الاستضافة الذاتية9 دقائق للقراءةعدد الخطوات: 17

‎PostHog هو البديل مفتوح المصدر لـ‎Mixpanel و‎Amplitude: أحداث، ومسارات تحويل، وتسجيل للجلسات، ورايات ميزات، واختبار ‎A/B في نسخة واحدة مستضافة ذاتيًا. على سحابة المُطوِّر، تتصاعد الفاتورة فور تجاوز حجم الأحداث الطبقات المجانية — بضعة ملايين من الأحداث شهريًا كافية للوصول إلى مئات الدولارات. على خادم ‎VPS الخاص بك، لا تدفع سوى تكلفة الخادم. تحتفظ ببيانات سلوك مستخدميك على بنيتك التحتية، وتلتزم بـ‎RGPD دون عقود إضافية، وتُفعِّل جميع الوحدات — تسجيل الجلسات، ورايات الميزات، وتجارب ‎A/B — دون أي مستوى مدفوع. يغطّي هذا الدليل التثبيت خطوةً بخطوة عبر ‎Docker Compose، وإعداد وكيل عكسي ‎nginx مع ‎HTTPS، وإعداد مخزن الكائنات لتسجيلات الجلسات، وتوصيل حزمة ‎SDK لـ‎JavaScript، وتفعيل رايات الميزات.

المحتويات· ما يتيحه ‎PostHog ولا تتيحه بدائل ‎SaaS1/11
  1. 01ما يتيحه ‎PostHog ولا تتيحه بدائل ‎SaaS
  2. 02مقارنة سريعة: ‎PostHog المستضاف ذاتيًا مقابل ‎Mixpanel Cloud
  3. 03متطلبات الخادم
  4. 04تثبيت ‎PostHog بـ‎Docker Compose
  5. 05إعداد وكيل عكسي ‎nginx لـ‎HTTPS
  6. 06مخزن الكائنات لتسجيلات الجلسات (‎S3 أو ‎MinIO)
  7. 07إرسال أول أحداث من تطبيقك
  8. 08تفعيل رايات الميزات
  9. 09نصيحة أداء: عطّل تسجيلات الجلسات عند الإطلاق
  10. 10تحديث ‎PostHog
  11. 11الوثائق الرسمية

ما يتيحه ‎PostHog ولا تتيحه بدائل ‎SaaS

‎Mixpanel و‎Amplitude و‎Heap أدوات سحابية: بياناتك تنتقل إلى خوادمهم، وسياسة الاستبقاء لديهم تُحدّد ما يمكنك الاحتفاظ به، والتأخير التلقائي يُفعَّل تلقائيًا فور تجاوز حجمك حدودًا معيّنة. ‎PostHog المستضاف ذاتيًا يُزيل هذه القيود الثلاث. تبقى الأحداث في قاعدة بيانات ‎ClickHouse الخاصة بك، على قرصك أو مخزن الكائنات — لا نسخة تغادر بنيتك التحتية. الاستبقاء غير محدود: أنت تقرّر متى تحذف البيانات القديمة. لا يوجد تأخير: كل حدث يُسجَّل حتى خلال ذروات الحركة. أضف إلى ذلك التوافق مع ‎RGPD دون التفاوض على ‎DPA مع طرف ثالث، وإمكانية تعديل الكود المصدري، والوصول المباشر إلى البيانات الخام في ‎ClickHouse لتحليلات ‎SQL الخاصة بك.

مقارنة سريعة: ‎PostHog المستضاف ذاتيًا مقابل ‎Mixpanel Cloud

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

المعيار‎PostHog المستضاف ذاتيًا‎Mixpanel Cloud
التكلفة الشهرية (مليون حدث/شهر)~15–20$ (تكلفة ‎VPS)~25–100$+
البيانات مستضافة لديكنعملا
التوافق مع ‎RGPD المبسَّطنعم (لا ‎DPA لطرف ثالث)جزئي (‎DPA مطلوب)
التأخير التلقائيلا يوجديُفعَّل بعد الطبقات
تسجيلات الجلسات مضمّنةنعمخيار مدفوع
رايات الميزات واختبار ‎A/Bنعم، مضمّنمدفوع (خطة ‎Growth+)
وصول ‎SQL الخام إلى البياناتنعم (‎ClickHouse مباشر)لا

متطلبات الخادم

يُشغِّل ‎PostHog كلًّا من ‎ClickHouse و‎Kafka و‎Redis و‎PostgreSQL ضمن نفس حزمة ‎Docker Compose. إنّه الحلّ الأكثر استهلاكًا للموارد في هذه الفئة، وسوء تحديد حجم ‎VPS يتسبّب في تعطّل ‎ClickHouse أو انتهاء مهلة ‎Kafka منذ أولى الأحداث. خطّط بحدٍّ أدنى لـ4 ‎vCPU و8 غيغابايت ‎RAM للاستخدام الخفيف (أقل من مليون حدث شهريًا). للحمل الأثقل — من 1 إلى 5 ملايين حدث شهريًا — استهدف 8 ‎vCPU و16 غيغابايت ‎RAM. على صعيد التخزين، ‎ClickHouse فعّال جدًا في الضغط، لكنّ تسجيلات الجلسات تتراكم سريعًا: خصّص 50 غيغابايت ‎SSD على الأقل، وأضف مخزن كائنات خارجيًا (‎S3 أو ‎MinIO) فور تفعيل التسجيلات. على صعيد البرمجيات: ‎Docker Engine 24+ و‎Docker Compose v2، واسم نطاق بسجلّ ‎A يشير إلى ‎VPS، والمنفذان 80 و443 مفتوحان في جدار الحماية.

تثبيت ‎PostHog بـ‎Docker Compose

  1. تثبيت ‎Docker على ‎VPS

    اتصل عبر ‎SSH، ثمّ ثبّت ‎Docker بالسكربت الرسمي: curl -fsSL https://get.docker.com | sh. أضف مستخدمك إلى مجموعة ‎docker لتجنّب ‎sudo: usermod -aG docker $USER. تحقّق بـdocker compose version من توفّر ‎Compose v2.

  2. استنساخ مستودع ‎PostHog وتجهيز البيئة

    استنسخ المستودع الرسمي: git clone https://github.com/PostHog/posthog.git && cd posthog. انسخ ملف البيئة النموذجي: cp .env.example .env. افتح .env في محرّر لضبط المتغيّرات الأساسية.

  3. ضبط متغيّرات البيئة

    في .env، حدّد كحدٍّ أدنى: ‎SECRET_KEY (ولّد مفتاحًا عشوائيًا بـ50 حرفًا: python3 -c "import secrets; print(secrets.token_hex(25))"), SITE_URL=https://posthog.your-domain.com، DISABLE_SECURE_SSL=false (أو true للاختبار المحلي عبر ‎HTTP). أبقِ قيم POSTGRES_* وREDIS_* وCLICKHOUSE_* افتراضية لنشر بسيط.

  4. تشغيل الحزمة وانتظار الترحيل

    شغّل جميع الخدمات في الخلفية: docker compose -f docker-compose.yml up -d. في المرّة الأولى، يُشغِّل ‎PostHog تلقائيًا عمليات ترحيل قاعدة البيانات — يستغرق ذلك من 2 إلى 5 دقائق. تابع التقدّم بـdocker compose logs -f web حتى ترى PostHog server is now listening on port 8000.

  5. الوصول إلى الواجهة وإنشاء حسابك

    انتقل إلى http://localhost:8000 (أو عبر نطاقك إذا كان ‎DNS مهيَّأً بالفعل). يرشدك معالج الإطلاق الأول لإنشاء حساب المسؤول، وتسمية مؤسّستك، وإنشاء مشروعك الأول. دوّن ‎Project API Key المعروض — ستحتاجه لتوصيل حزمة ‎SDK.

إعداد وكيل عكسي ‎nginx لـ‎HTTPS

  1. تثبيت ‎nginx و‎Certbot

    على الجهاز المضيف (خارج ‎Docker): apt install -y nginx certbot python3-certbot-nginx. تأكّد من أنّ نطاقك posthog.your-domain.com يشير فعلًا إلى ‎IP الـ‎VPS قبل هذه الخطوة — يحتاج ‎Certbot للتحقّق عبر ‎HTTP.

  2. إنشاء ‎vhost لـ‎nginx

    أنشئ /etc/nginx/sites-available/posthog بالمحتوى: server { listen 80; server_name posthog.your-domain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }. فعّله: ln -s /etc/nginx/sites-available/posthog /etc/nginx/sites-enabled/.

  3. إصدار شهادة ‎TLS

    شغّل certbot --nginx -d posthog.your-domain.com. يعدّل ‎Certbot تلقائيًا ملف ‎vhost لإعادة توجيه ‎HTTP إلى ‎HTTPS ويهيّئ التجديد التلقائي. اختبر التجديد بـcertbot renew --dry-run.

  4. إعادة تحميل ‎nginx والتحقّق

    طبّق الإعداد: nginx -t && systemctl reload nginx. افتح https://posthog.your-domain.com في المتصفّح — يجب أن تظهر واجهة ‎PostHog بشهادة صالحة. حدّث SITE_URL في .env إن لزم، ثمّ أعد تشغيل خدمة الويب: docker compose restart web.

مخزن الكائنات لتسجيلات الجلسات (‎S3 أو ‎MinIO)

  1. لماذا مخزن الكائنات ضروري

    تُولِّد تسجيلات الجلسات ملفّات صغيرة كثيرة (واحد لكلّ مقطع جلسة). تخزينها على قرص ‎VPS المحلّي يملأ ‎SSD بسرعة ويُعقِّد النسخ الاحتياطية. مخزن كائنات متوافق مع ‎S3 — سواء كان ‎AWS S3 أو ‎Cloudflare R2 أو ‎MinIO المستضاف ذاتيًا — يُخرِّج هذا التخزين بمرونة.

  2. نشر ‎MinIO على نفس ‎VPS (خيار الاستضافة الذاتية)

    إذا لم تُرِد الاعتماد على خدمة خارجية، أضف ‎MinIO إلى docker-compose.yml: minio: image: minio/minio environment: MINIO_ROOT_USER: posthog MINIO_ROOT_PASSWORD: كلمة-مرور-قوية command: server /data --console-address ':9001' volumes: - ./minio-data:/data. ثمّ أنشئ حاوية باسم posthog في لوحة ‎MinIO (المنفذ 9001).

  3. ضبط متغيّرات بيئة ‎PostHog

    في .env، أضف: OBJECT_STORAGE_ENABLED=true، OBJECT_STORAGE_ENDPOINT=http://minio:9000 (أو عنوان حاوية ‎S3)، OBJECT_STORAGE_ACCESS_KEY_ID=posthog، OBJECT_STORAGE_SECRET_ACCESS_KEY=كلمة-مرور-قوية، OBJECT_STORAGE_BUCKET=posthog. أعد تشغيل الحزمة: docker compose up -d.

  4. التحقّق بأول تسجيل جلسة

    في إعدادات مشروع ‎PostHog، فعّل «‎Session recording». تصفّح تطبيقك بضع ثوان، ثمّ ارجع إلى ‎PostHog تحت «‎Session Recordings». يجب أن يظهر تسجيل خلال دقائق. تحقّق في ‎MinIO (أو ‎S3) من إنشاء ملفّات في الحاوية.

إرسال أول أحداث من تطبيقك

  1. تثبيت حزمة ‎SDK لـ‎JavaScript

    في مشروعك الأمامي: npm install posthog-js. إذا كنت تستخدم إطار عمل مثل ‎React أو ‎Vue أو ‎Next.js، استورد ‎PostHog وهيّئه مرّة واحدة على مستوى جذر التطبيق.

  2. التهيئة بمفتاح مشروعك وعنوان نسختك

    أضف التهيئة: import posthog from 'posthog-js'; posthog.init('phc_YOUR_PROJECT_API_KEY', { api_host: 'https://posthog.your-domain.com', autocapture: true });. استبدل ‎phc_YOUR_PROJECT_API_KEY بالمفتاح الظاهر في إعدادات مشروع ‎PostHog. مع autocapture: true، يُسجِّل ‎PostHog تلقائيًا النقرات وإرسال النماذج وتغييرات الصفحة.

  3. التقاط أحداث مخصّصة

    لحدث أعمال محدّد، استدعِ: posthog.capture('order_placed', { amount: 49.90, currency: 'USD', product: 'vps-cloud-4vcpu' });. ستكون الخصائص المرتبطة بالحدث متاحة في مسارات التحويل والمجموعات وأسئلة ‎SQL لـ‎ClickHouse.

  4. التحقّق في لوحة التحكّم

    انتقل في ‎PostHog إلى «‎Activity» أو «‎Events». تظهر الأحداث في شبه الوقت الفعلي (بضع ثوانٍ من الكمون). إذا لم يصل شيء بعد دقيقتين، تحقّق من أنّ api_host في التهيئة يطابق تمامًا ‎URL نسختك، وأنّ شهادة ‎TLS صالحة.

تفعيل رايات الميزات

تتيح رايات الميزات طرح ميزة تدريجيًا — أولًا لـ5% من المستخدمين، ثمّ 20%، ثمّ 100% — دون إعادة تجميع التطبيق أو نشره. في ‎PostHog، انتقل إلى «‎Feature Flags» وأنشئ علمًا جديدًا بمفتاح (my-new-module)، وشرط طرح (نسبة أو مجموعة مستخدمين)، وبدائل اختيارية لاختبار ‎A/B حقيقي. على صعيد ‎JavaScript، قيّم العلم: if (posthog.isFeatureEnabled('my-new-module')) { /* عرض الميزة الجديدة */ }. للتقييم من جانب الخادم (‎Python أو ‎Node.js)، استخدم حزمة ‎SDK الخلفية المقابلة بنفس PROJECT_API_KEY — يجري التقييم حينئذٍ دون ذهاب-إياب للعميل، تجنّبًا للوميض. يُسجِّل ‎PostHog تلقائيًا حدثًا $feature_flag_called عند كلّ تقييم، ممّا يُتيح ربط تفعيل علم بأيّ مقياس في لوحتك.

نصيحة أداء: عطّل تسجيلات الجلسات عند الإطلاق

إذا كان ‎VPS الخاص بك مهيَّأً بالحدّ الأدنى من 4 ‎vCPU و8 غيغابايت ‎RAM، تستهلك تسجيلات الجلسات موارد ‎ClickHouse كبيرة منذ أولى ساعات الحركة. التوصية: أبقِ التسجيلات معطّلة لأوّل 30 يومًا. هذا يمنحك الوقت للتحقّق من استقرار الحزمة، وضبط إعدادات مخزن الكائنات، وزيادة ‎RAM إن لزم. فعّلها بعد ذلك في إعدادات المشروع — ستُلتقَط جميع التسجيلات المستقبلية، ويمكنك تحديد معدّل عيّنة لتسجيل نسبة فقط من الجلسات للتحكّم في التخزين.

تحديث ‎PostHog

يُصدر فريق ‎PostHog تحديثات منتظمة. للتحديث: git pull origin master في دليل المستودع، ثمّ docker compose pull لجلب الصور الجديدة، ثمّ docker compose up -d. تُشغَّل ترحيلات قاعدة البيانات تلقائيًا عند إعادة تشغيل خدمة الويب — انقطاع قصير لبضع عشرات من الثواني أمر طبيعي. راجع ملاحظات الإصدار قبل كلّ تحديث رئيسي: تشترط بعض الإصدارات تحديثًا وسيطًا (لا تخطّ الإصدارات).

الوثائق الرسمية

يغطّي هذا الدليل التثبيت الأساسي على ‎VPS. للمواضيع المتقدّمة — تكرار ‎ClickHouse، و‎SSO SAML، والـ‎webhooks، وتكاملات ‎data warehouse، وخيارات إعداد ‎Kafka — ارجع إلى الوثائق الرسمية لـ‎PostHog. تبقى المرجع للتحديثات الكبرى وحالات الاستخدام الخاصة.

انشر نسختك على خادم VPS Cloud من ServOrbit

يتيح لك خادم VPS Cloud من ServOrbit مع Docker مُهيَّأ مسبقًا وموارد قابلة للتوسّع تثبيت هذه الأداة دون عناء، وضبط ذاكرة RAM وعدد vCPU مع تزايد الاستخدام.

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

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

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