النشر على Kubernetes

دليل تفصيلي خطوة بخطوة لنشر OpenReplay على Kubernetes.

النشر على Kubernetes

يعتمد نشر OpenReplay على Helm Charts مما يجعله متوافقًا تمامًا مع Kubernetes. نقوم بتجميع PostgreSQL و Redis، وهما مطلوبان لـ OpenReplay. إليك كيفية القيام بذلك.

المتطلبات الأساسية

Section titled المتطلبات الأساسية

يحتاج نشر OpenReplay على Kubernetes إلى:

  • Kubernetes v1.18+
  • helm 3.10+
  • RWX PVC مع صلاحية القراءة والكتابة للمستخدم ذي المعرّف 1001 (للمكوّنات المشتركة، إذا كان العنقود يحتوي على أكثر من عقدة واحدة). تأكد من استبدال hostPath باسم الـ pvc الذي تم إنشاؤه في /var/lib/openreplay/vars.yaml.
# In case of multiple nodes in the kubernetes cluster,
# You'll have to create an RWX PVC for shared components.
# If it's a single node, we'll use hostVolume, which is the default for the community/oss edition.
pvcRWXName: "hostPath"

كما يتطلب OpenReplay 2 vCPUs, 8 GB of RAM, 50 GB of storage (معمارية x86) لكي يعمل بشكل صحيح، وإلا فإن خدمات الواجهة الخلفية لـ OpenReplay لن تبدأ ببساطة. هذه المواصفات كافية لحجم معتدل، ولكن إذا كنت تتوقع حركة مرور عالية، فعليك التوسّع انطلاقًا من هنا.

تم اختبار النشر على المنصات التالية:

  • عنقود Kube محلي بعقدة واحدة
  • Google Kubernetes Engine (GKE)
  • Amazon Elastic Kubernetes Service (EKS)
  • Microsoft Azure Kubernetes Service (AKS)
  • Scaleway Elements Kubernetes (Kapsule)

اتصل بعنقودك واستنسخ مستودع OpenReplay:

git clone https://github.com/openreplay/openreplay.git
cd openreplay/scripts/helmcharts

إذا كان هناك عدة عُقد في عنقود Kubernetes، فسيتعين عليك إنشاء RWX PVC (على سبيل المثال efs، في حالة AWS) لكي تتشارك الحاويات البيانات. إذا كانت عقدة واحدة، فسنستخدم hostVolume، وهو الإعداد الافتراضي لتثبيت إصدار المجتمع.

ثم افتح ملف vars.yaml باستخدام الأمر vim vars.yaml ثم استبدل ما يلي:

  • domainName: هذا هو المكان الذي سيكون OpenReplay متاحًا فيه (أي openreplay.mycompany.com)
  • postgresqlPassword: كلمة مرور Postgres (قم بتعيينها أو أنشئ كلمة عشوائية)
  • accessKey: مطلوبة لخدمة تخزين الكائنات (استخدم سلسلة نصية مُولّدة عشوائيًا)
  • secretKey: مطلوبة لخدمة تخزين الكائنات (استخدم سلسلة نصية مُولّدة عشوائيًا)
  • jwt_secret: مطلوبة لواجهة برمجة التطبيقات API (استخدم سلسلة نصية مُولّدة عشوائيًا)

تأكد من أنك قمت بتثبيت helm ثم قم بإعداد OpenReplay:

cd openreplay/scripts/helmcharts
helm upgrade --install databases ./databases -n db --create-namespace --wait -f ./vars.yaml --atomic
helm upgrade --install openreplay ./openreplay -n app --create-namespace --wait -f ./vars.yaml --atomic

يتعامل OpenReplay مع بيانات مستخدم حساسة، ولذلك فهو يتطلب HTTPS لكي يعمل. هذا أمر إلزامي، وإلا فإن أداة التتبع لن تبدأ التسجيل ببساطة. وينطبق الأمر نفسه على لوحة التحكم، فبدون HTTPS لن تتمكن من إعادة تشغيل جلسات المستخدمين.

إذا كان عنقود Kubernetes الخاص بك في السحابة (مثل EKS أو AKS أو GKE)، فإن أسهل طريقة للتعامل مع SSL هي إعداد موازِن تحميل سحابي وتشغيل عنقودك خلفه. وهناك خيار آخر يتمثل في إنشاء شهادة SSL خاصة بك أو استخدامها وتوجيه نطاقك الفرعي (أي openreplay.mycompany.com) إلى عنقودك. المزيد عن كلا الخيارين أدناه.

إعداد موازِن تحميل سحابي (الخيار 1)

Section titled إعداد موازِن تحميل سحابي (الخيار 1)

من أهم فوائد تشغيل OpenReplay خلف موازِن تحميل سحابي هو أن مزوّد السحابة هو من يدير الشهادة. فيما يلي أدلة تفصيلية خطوة بخطوة حول كيفية الإنشاء:

ثم تأكد من أن عنقودك يوفّر نوع خدمة من نوع LoadBalancer حتى يمكن توجيه حركة المرور من موازِن التحميل السحابي إلى الواجهة الخلفية لـ OpenReplay. الآن، انتقل إلى مزوّد خدمة DNS الخاص بك وأنشئ A Record يشير إلى العنقود باستخدام عنوان IP العام الخاص به.

أخيرًا، قم بتمكين use-forwarded-headers عن طريق إلغاء تعليق السطر أدناه ضمن قسم ingress-nginx في /var/lib/openreplay/vars.yaml:

ingress-nginx: &ingress-nginx
  controller:
    config:
      use-forwarded-headers: true

أنت الآن جاهز تمامًا، وينبغي أن يكون OpenReplay متاحًا على نطاقك الفرعي. يمكنك إنشاء حساب بزيارة صفحة /signup (أي openreplay.mycompany.com/signup).

أحضر/أنشئ شهادة SSL الخاصة بك (الخيار 2)

Section titled أحضر/أنشئ شهادة SSL الخاصة بك (الخيار 2)

كبديل لإنشاء موازِن تحميل، يمكنك إحضار (أو إنشاء) شهادة SSL الخاصة بك.

  1. أولاً، انتقل إلى مزوّد خدمة DNS الخاص بك وأضف A Record. استخدم النطاق الذي قدّمته سابقًا أثناء خطوة التثبيت ووجّهه إلى العنقود باستخدام عنوان IP العام الخاص به.

  2. إذا كنت تُحضِر شهادتك الخاصة، فأنشئ سرّ SSL باستخدام الأمر التالي: kubectl create secret tls openreplay-ssl -n app --key="private_key_file.pem" --cert="certificate.crt".

ملاحظة: إذا لم تكن لديك شهادة، فأنشئ واحدة تتجدّد تلقائيًا لنطاقك الفرعي (النطاق الذي قُدّم أثناء التثبيت) باستخدام Let’s Encrypt. ما عليك سوى الاتصال بمثيل OpenReplay، وتشغيل cd /var/lib/openreplay/openreplay/scripts/helmcharts && bash certmanager.sh واتباع الخطوات.

  1. إذا كنت ترغب في تمكين إعادة التوجيه من http إلى https (مُوصى به)، فقم بإلغاء تعليق الكتلة أدناه ضمن قسم ingress-nginx في /var/lib/openreplay/vars.yaml:
ingress-nginx: &ingress-nginx
  controller:
    config:
      ssl-redirect: true
      force-ssl-redirect: true

تجدر الإشارة إلى أن ingress-nginx لدينا يعمل افتراضيًا على المنفذين 80|443، ولكن يمكن تغيير ذلك بسهولة عند الحاجة في vars.yaml:

ingress-nginx: &ingress-nginx
  controller:
    service:
      ports:
        http: 80
        https: 443
  1. أخيرًا، أعد تثبيت NGINX الخاص بـ OpenReplay:
openreplay -R

أنت الآن جاهز تمامًا، وينبغي أن يكون OpenReplay متاحًا على نطاقك الفرعي. يمكنك إنشاء حساب بزيارة صفحة /signup (أي openreplay.mycompany.com/signup).

يُرجى إعلامنا عبر Slack أو من خلال Github Issue إذا كنت تواجه مشكلة على منصتك. سيسعدنا مساعدتك على تشغيله.