النشر على Kubernetes

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

النشر على Kubernetes

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

المتطلبات المسبقة

Section titled المتطلبات المسبقة

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

  • Kubernetes v1.18+
  • helm 3.10+
  • RWX PVC مع صلاحية القراءة والكتابة لمعرّف المستخدم 1001 (للمكوّنات المشتركة، إذا كان العنقود يحتوي على أكثر من عقدة واحدة). تأكّد من إزالة التعليق عن الكتلة أدناه في /var/lib/openreplay/vars.yaml وتحديث اسم PVC لمكوّنات sink وstorage وchalice:
# 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 للعمل بشكل صحيح، وإلا فإن خدمات الواجهة الخلفية لـ 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 (مثل efs، في حالة AWS) PVC لكي تتشارك الحاويات البيانات. أمّا إذا كانت عقدة واحدة، فسنستخدم 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 للعمل. هذا إلزامي، وإلا فإن المتعقّب (tracker) لن يبدأ التسجيل ببساطة. وينطبق الأمر نفسه على لوحة المعلومات؛ فبدون 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 إذا كنت تواجه مشكلة على منصّتك. سيسعدنا مساعدتك على تشغيله.