Skip to main content
يشغّل التكامل مع Git خدمة git-bridge المنفصلة. يستنسخ المستخدمون ويدفعون عبر ${OVERLEAF_SITE_URL}/git/<project id>؛ ويمرّر Pod ‏Ayakaleaf Pro هذه الطلبات إلى git-bridge، ويستدعي git-bridge بدوره الـ Pod للحصول على محتوى المشروع وسجلّه. يؤدي تفعيله أيضًا إلى تفعيل خادم MCP، وهو مطلوب للمزامنة مع GitHub وGitLab وGitea وDropbox. توسّع هذه الصفحة التثبيت ذا النسخة المتماثلة الواحدة من استخدام Kubernetes. بالنسبة إلى عدة نسخ متماثلة، راجع التوسع الأفقي.
1

انشر git-bridge

45-git-bridge.yaml
يجب أن يكون 10.96.100.80 عنوانًا حرًا داخل نطاق CIDR الخاص بخدمات الكتلة (القيمة الافتراضية في kubeadm هي 10.96.0.0/12).
2

وجّه Ayakaleaf Pro إليه

أضف ما يلي إلى 30-config.yaml:
30-config.yaml (additions)
3

استنسخ مشروعًا

أنشئ رمز مصادقة Git في Account Settings، ثم:
استخدم git اسمًا للمستخدم والرمز كلمةً للمرور.

لماذا يبدو ملف التعريف (manifest) بهذا الشكل

  • عنوان ClusterIP ثابت بوصفه GIT_BRIDGE_HOST. يمرّر nginx داخل صورة Ayakaleaf Pro المسار /git/ باستخدام محلّل (resolver) مضبوط على 127.0.0.11، وهو خادم DNS المدمج في Docker. لا يوجد خادم DNS هناك في Kubernetes، لذا يفشل اسم مضيف مثل git-bridge مع الخطأ 502 والرسالة “git-bridge could not be resolved” في /var/log/nginx/error.log. أما عنوان IP فلا يحتاج إلى بحث.
  • overleaf-internal. يحتاج git-bridge إلى المنفذين 3000 (الواجهة البرمجية لـ web) و3100 (السجل) في Pod ‏Ayakaleaf Pro. يُبقي Service منفصل من نوع ClusterIP هذين المنفذين داخل الكتلة؛ أما إضافتهما إلى الـ Service من نوع NodePort فستنشرهما على كل عقدة.
  • enableServiceLinks: false. سيجعل الـ Service ‏git-bridge نظام Kubernetes يضيف GIT_BRIDGE_PORT=tcp://10.96.100.80:8000 إلى الـ Pod؛ ويقرأ git-bridge المتغير GIT_BRIDGE_PORT على أنه منفذ الاستماع الخاص به فيتوقف مع MalformedJsonException ... path $.port.
  • نسخة متماثلة واحدة مع وحدة تخزين خاصة بها. يحتفظ git-bridge بمستودع git لكل مشروع مُستنسخ على القرص، ويجب ألا يعمل مرتين. احتفظ بنسخة احتياطية من وحدة التخزين الخاصة به.

الاختبار على Kubernetes

على Kubernetes 1.37 مع ثلاث نسخ متماثلة خلف HAProxy وgit-bridge بوصفه شقيقًا (sibling) لـ overleaf-0، نجحت اختباراتنا الشاملة للتكامل مع Git ‏(19 حالة)، وكذلك بعد نقل git-bridge إلى المنفذ 8001 بحيث يتعيّن على nginx استخدام GIT_BRIDGE_HOST وGIT_BRIDGE_PORT: رموز Git في إعدادات الحساب، وأمر الاستنساخ في المحرر، والاستنساخ والدفع والسحب، والملفات الثنائية والمجلدات، وإعادة التسمية والحذف، ورفض عمليات الدفع غير المحدّثة، والوصول حسب الدور (يمكن للمحررين المدعوين والمحررين عبر الرابط الدفع، ولا يمكن للمشاهدين والمراجعين إلا الاستنساخ، ويُرفض المستخدمون الذين ليس لديهم وصول)، ورفض الرموز الخاطئة والمحذوفة، وإبقاء المسارات الداخلية لـ git-bridge خلف nginx، والحسابات المعلّقة. أما رموز مصادقة Git نفسها (التوليد، والإدراج، والحد الأقصى لكل مستخدم، والحذف، وانتهاء الصلاحية، والتحقق الذي يطلبه git-bridge من web، ورموز الحسابات المعلّقة والمحذوفة) فقد نجحت على نسخة متماثلة واحدة (16 حالة).

أسئلة وأجوبة

الإجابة: تحقّق من GIT_BRIDGE_HOST: يجب أن يكون عنوان IP الخاص بالـ Service ‏git-bridge، وليس اسمه، راجع ما سبق. يُظهر الأمر kubectl -n overleaf exec deploy/overleaf -- tail /var/log/nginx/error.log السبب.
آخر تعديل في ٢ نوفمبر ٢٠٢٦