> ## 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.

# 0. تجهيز العقد

> ثبّت Docker Engine وcontainerd وkubeadm على العقد، واسحب صور TeX Live.

يترجم Ayakaleaf Pro مستندات LaTeX داخل حاويات TeX Live [معزولة](https://ayakaleaf-pro.mintlify.site/ar/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md). وهو يشغّلها بنفسه، عبر مقبس Docker ‏(Docker socket) الخاص بالجهاز الذي يعمل عليه. وعلى Kubernetes يعني ذلك ما يلي:

* كل عقدة يمكنها تشغيل pod الخاص بـ Ayakaleaf Pro يكون **Docker Engine** مثبّتًا عليها وقيد التشغيل؛
* كل صورة TeX Live تضبطها تُسحب **إلى Docker** على كل واحدة من تلك العقد.

يمكن لـ kubelet أن يستمر في استخدام containerd: إذ يأتي Docker Engine مع `containerd.io`، ويستخدم كلاهما الخدمة (daemon) نفسها في مساحات أسماء مختلفة.

> [!WARNING]
>
> لا يمكن لمجموعات العقد المُدارة التي لا تحتوي على Docker (معظم الإعدادات الافتراضية في EKS وGKE وAKS) تشغيل الترجمة المعزولة. استخدم مجموعات عقد يمكنك تثبيت Docker Engine عليها، أو ضع تسميات (labels) على هذه العقد وأبقِ Ayakaleaf Pro عليها باستخدام `nodeSelector`.

الخطوات أدناه مخصّصة لـ Ubuntu 24.04 ولعنقود مبني باستخدام kubeadm. إذا كان العنقود لديك موجودًا بالفعل، فنفّذ الخطوات 1 و2 و5 على العقد التي ستشغّل Ayakaleaf Pro.

**1. وحدات النواة وإعدادات sysctl**

```bash theme={null}
printf 'overlay\nbr_netfilter\n' | sudo tee /etc/modules-load.d/k8s.conf
sudo modprobe overlay && sudo modprobe br_netfilter
printf 'net.bridge.bridge-nf-call-iptables=1\nnet.bridge.bridge-nf-call-ip6tables=1\nnet.ipv4.ip_forward=1\n' \
  | sudo tee /etc/sysctl.d/99-k8s.conf
sudo sysctl --system
sudo swapoff -a   # and comment out swap in /etc/fstab
```

**2. Docker Engine**

ثبّت Docker Engine من مستودع Docker كما في [0. إعداد Docker](https://ayakaleaf-pro.mintlify.site/ar/on-premises/installation/using-the-toolkit/0.-setup-docker.md). لا حاجة إلى إضافة Compose. يثبّت ذلك أيضًا `containerd.io`.

**3. containerd من أجل kubelet**

تأتي حزمة `containerd.io` من مستودع Docker مع إضافة CRI معطّلة. اكتب الإعدادات الافتراضية الكاملة، والتي تفعّلها، وحوّلها إلى استخدام systemd cgroups:

```bash wrap theme={null}
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# containerd 2.x writes config_path = '' and ignores /etc/containerd/certs.d without this
sudo sed -i "s|config_path = ''|config_path = '/etc/containerd/certs.d'|" /etc/containerd/config.toml
sudo systemctl restart containerd docker
```

**4. kubeadm وkubelet وkubectl**

اتّبع [Installing kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)، ثم أنشئ العنقود باستخدام `kubeadm init` و`kubeadm join` وثبّت إضافة شبكة. على سبيل المثال، مع flannel:

```yaml title="kubeadm-config.yaml" theme={null}
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16   # flannel's default
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
# Compile containers are started by Docker, outside the kubelet's accounting: keep memory for them
systemReserved:
  memory: 300Mi
kubeReserved:
  memory: 200Mi
```

```bash theme={null}
sudo kubeadm init --config kubeadm-config.yaml
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
```

يحتاج العنقود أيضًا إلى StorageClass افتراضي. بالنسبة إلى عنقود اختباري، يعمل [local-path-provisioner](https://github.com/rancher/local-path-provisioner)؛ أما في بيئة الإنتاج، فاستخدم التخزين الكتلي (block storage) الخاص بمنصتك (Longhorn، أو Ceph، أو برنامج تشغيل CSI سحابي).

**5. صور TeX Live**

على **كل** عقدة يمكنها تشغيل Ayakaleaf Pro، اسحب باستخدام Docker صور TeX Live التي ستدرجها في `ALL_TEX_LIVE_DOCKER_IMAGES`، على سبيل المثال:

```bash theme={null}
sudo docker pull ghcr.io/ayaka-notes/texlive-full:2026.1
```

لا يفيد `crictl pull` أو `ctr` هنا: إذ يطلب Ayakaleaf Pro الصورة من Docker. الصور الكاملة كبيرة الحجم (نحو 28 GB لكلٍّ منها)؛ راجع [الترجمة المعزولة (Sandboxed Compiles)](https://ayakaleaf-pro.mintlify.site/ar/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md) للاطلاع على القائمة. وفي الاختبار الأول، تكفي الصورة `ghcr.io/ayaka-notes/texlive-basic:2026.1` (نحو 630 MB، وهي TeX Live بالحد الأدنى).

### أسئلة وأجوبة

> [accordion] هل يمكنني تشغيل Ayakaleaf Pro على عقد لا تحتوي على Docker؟
>
> **الإجابة:** فقط مع `SANDBOXED_COMPILES=false`. عندئذٍ تجري عمليات الترجمة داخل حاوية Ayakaleaf Pro باستخدام TeX Live الصغير المدمج فيها، ويمكن لمستندات LaTeX قراءة وكتابة كل ما تستطيع تلك الحاوية الوصول إليه. لا نوصي بذلك؛ راجع [الترجمة المعزولة (Sandboxed Compiles)](https://ayakaleaf-pro.mintlify.site/ar/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md).

> [accordion] هل تُحتسب عمليات الترجمة ضمن حدّ الذاكرة الخاص بالـ pod؟
>
> **الإجابة:** لا. يشغّل Docker الخاص بالعقدة حاويات TeX Live، خارج الـ pod وخارج نطاق رؤية kubelet. اترك ذاكرة متاحة على العقدة من أجلها، على سبيل المثال باستخدام `systemReserved` كما هو موضّح أعلاه، ولا تملأ العقدة بـ pods أخرى.


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