> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# القوالب

> شغّل معرض القوالب في نشر قائم على Kubernetes.

يعمل معرض القوالب داخل خدمة **web** (الوحدة `template-gallery`) في كل pod من Ayakaleaf Pro؛ أما خدمة **filestore** في الـ pod نفسه فتخزّن ملفات القوالب وتعرض معايناتها. الفئات والصلاحيات والنشر موضّحة في [القوالب](https://ayakaleaf-pro.mintlify.site/ar/on-premises/configuration/overleaf-toolkit/templates.md).

| | |
| - | - |
| الخدمات | web (الوحدة `template-gallery`)، وfilestore (الملفات وصور المعاينة) |
| البيانات المخزّنة | البيانات الوصفية للقوالب في MongoDB؛ وملفات ZIP وPDF وصور المعاينة في مخزن القوالب الخاص بـ filestore: ‏`/var/lib/overleaf/data/template_files` على وحدة تخزين البيانات، أو حاوية S3 ‏`OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME` |
| Pod ← الخارج | لا شيء (S3، إن استُخدم) |
| المهام الدورية | لا شيء: تُعرض المعاينات في المرة الأولى التي تُشاهد فيها |

### الإعداد

**1. ConfigMap**

```yaml title="30-config.yaml (additions)" wrap theme={null}
  OVERLEAF_TEMPLATE_GALLERY: "true"
  ENABLE_CONVERSIONS: "true"
  OVERLEAF_TEMPLATE_CATEGORIES: academic-journal book presentation poster cv report thesis
  TEMPLATE_ACADEMIC_JOURNAL_NAME: Journal articles
  TEMPLATE_ACADEMIC_JOURNAL_DESCRIPTION: Templates for academic journal submissions.
  # ... one _NAME and _DESCRIPTION per category, see the Toolkit page
```

**2. مستخدم للقوالب (اختياري)**

يستطيع المسؤولون النشر دائمًا. للسماح لمستخدم غير مسؤول بإدارة المعرض، أنشئ المستخدم، واقرأ معرّفه من MongoDB وضعه في الـ ConfigMap:

```bash wrap theme={null}
kubectl -n overleaf exec mongo-0 -- mongosh --quiet \
  'mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017,mongo-2.mongo:27017/sharelatex?replicaSet=overleaf' \
  --eval 'db.users.findOne({ email: "templates@example.com" })._id.toString()'
```

```yaml theme={null}
  OVERLEAF_TEMPLATES_USER_ID: "<the ID printed above>"
```

**3. التطبيق وإعادة التشغيل**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
```

### عدة نسخ متماثلة

* يجب أن تكون ملفات القوالب في S3: فإذا كانت الملفات على القرص الخاص بكل نسخة متماثلة (replica)، فستعرض كل عقدة معرضًا مختلفًا. ويستخدم إعداد [التوسّع الأفقي](https://ayakaleaf-pro.mintlify.site/ar/on-premises/configuration/kubernetes/horizontal-scaling.md) بالفعل حاوية التخزين `overleaf-template-files`.
* يأخذ النشر ملف PDF الناتج عن آخر عملية ترجمة للمشروع، والذي لا يوجد إلا على النسخة المتماثلة التي أجرت الترجمة. يُبقي ملف تعريف الارتباط الثابت (sticky cookie) الخاص بموازن الأحمال المستخدمَ على تلك النسخة المتماثلة، لذا انشر من جلسة المتصفح نفسها التي أجريت منها الترجمة.

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

على Kubernetes 1.37 مع ثلاث نسخ متماثلة خلف HAProxy، ومع ملفات القوالب في حاوية S3 ‏`overleaf-template-files` ‏(Garage)، تنجح اختباراتنا الشاملة (end-to-end) لمعرض القوالب (41 حالة): نشر مشروع مُترجَم من قائمة File، وتقديم ملف PDF وصور المعاينة وملف ZIP للمصدر من حاوية التخزين؛ وإنشاء مشاريع من قالب؛ والفئات والبحث والفرز وصفحات المعرض؛ وتحرير القوالب واستبدالها وحذفها؛ وصلاحيات المسؤولين والمستخدمين العاديين ومستخدم القوالب المحدّد في `OVERLEAF_TEMPLATES_USER_ID` (مع قراءة معرّفه من MongoDB كما هو موضّح أعلاه)؛ والطلبات المشوّهة.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.