# وضع التطوير في Spaces: تطوير سلس في Spaces

> [!WARNING]
> يُعد وضع المطور في Spaces جزءًا من خطط PRO أو Team & Enterprise.

## وضع التطوير في Spaces

وضع التطوير في Spaces هو ميزة تُسهّل تصحيح أخطاء تطبيقك وتجعل تكرار العمل على Spaces أسرع.

في كل مرة تُحدِّث فيها بعض التغييرات في مستودع مساحة (Space) الخاصة بك، يُعاد بناء صورة Docker الأساسية، ثم يُخصَّص جهاز افتراضي جديد لاستضافة الحاوية الجديدة.

يتيح لك وضع التطوير تحديث مساحتك بشكل أسرع بكثير عن طريق تجاوز صورة Docker.

يبدأ صورة Docker الخاصة بوضع التطوير تطبيقك كعملية فرعية، مما يتيح لك إعادة تشغيله دون إيقاف حاوية Space نفسها. كما يبدأ خادم SSH (للمحررات الطرفية المحلية) وخادم VS Code (لـ VS Code Web داخل المنتج) في الخلفية، بحيث يمكنك الاتصال بـ Space.

تتيح القدرة على الاتصال بالمساحة قيد التشغيل عدة حالات استخدام:

    - يمكنك إجراء تغييرات على كود التطبيق دون أن يُعاد بناء المساحة في كل مرة
    - يمكنك تصحيح أخطاء تطبيق قيد التشغيل ومراقبة الموارد مباشرة

بشكل عام، يجعل تطوير المساحات والتجارب عليها أسرع بكثير من خلال تجاوز مرحلة إعادة بناء صورة Docker.

## الواجهة

بمجرد تفعيل وضع المطوّر على مساحتك، يجب أن ترى نافذة منبثقة مشابهة للنافذة أدناه.

لا يُعاد تشغيل التطبيق تلقائياً عند تغيير الكود. لكي تظهر تعديلاتك في المساحة، عليك استخدام زر `Refresh` الذي سيعيد تشغيل التطبيق.

  إذا كنت تستخدم Gradio SDK، أو كان تطبيقك مبنيًا على Python، فانتبه إلى أن المتطلبات لا تُثبَّت تلقائيًا. ستحتاج إلى تشغيل `pip install` يدويًا من VS Code أو SSH.

### الاتصال

يكشف وضع التطوير المساحة قيد التشغيل كمضيف SSH قياسي. يتصل VS Code وأي محرر آخر عبر نقطة نهاية SSH نفسها.

#### SSH

بمجرد تشغيل وضع التطوير، اتصل باستخدام:

```shell
ssh <space-subdomain>@ssh.hf.space
```

يظهر نطاق الفرع في نافذة التحكم في وضع التطوير. يمكنك أيضًا استرجاعه برمجياً:

```python
from huggingface_hub import HfApi
print(HfApi().space_info("namespace/repo").subdomain)
```

يمكن لـ Hugging Face CLI حل النطاق الفرعي وفتح الجلسة نيابةً عنك:

```shell
# SSH into the Space's Dev Mode container
hf spaces ssh username/my-space

# Print the SSH command instead of running it
hf spaces ssh username/my-space --dry-run

# Use a specific identity file
hf spaces ssh username/my-space -i ~/.ssh/id_ed25519
```

مرّر `--auto` لتفعيل وضع التطوير دون طلب تأكيد إذا لم يكن قيد التشغيل بالفعل. راجع [مرجع سطر الأوامر `hf spaces ssh`](https://huggingface.co/docs/huggingface_hub/package_reference/cli#hf-spaces-ssh) للاطلاع على القائمة الكاملة للخيارات.

ستحتاج إلى إضافة مفتاح SSH العام لجهازك إلى [حسابك الشخصي](https://huggingface.co/settings/keys) حتى تتمكن من الاتصال بالمساحة باستخدام SSH. راجع وثائق [Git over SSH](./security-git-ssh#add-a-ssh-key-to-your-account) للحصول على تعليمات أكثر تفصيلاً.

#### VS Code

يمكنك أيضاً استخدام تثبيت محلي لـ VS Code للاتصال بحاوية المساحة. للقيام بذلك، ثبّت إضافة [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) واتصل بنفس المضيف `<space-subdomain>@ssh.hf.space`.

### حفظ التغييرات

التغييرات التي تُجريها عند تفعيل وضع التطوير لا تُحفظ تلقائيًا في مستودع المساحة. افتراضيًا، ستُتجاهل هذه التغييرات عند تعطيل وضع التطوير أو عند دخول المساحة إلى وضع السكون.

إذا كنت ترغب في حفظ التغييرات التي أُجريت أثناء تفعيل وضع التطوير، فيجب عليك استخدام `git` من داخل حاوية المساحة (باستخدام VS Code أو SSH). على سبيل المثال:

```shell
# Add changes and commit them
git add .
git commit -m "Persist changes from Dev Mode"

# Push the commit to persist them in the repo
git push
```

ستعرض النافذة المنبثقة تحذيراً إذا كانت لديك تغييرات غير مُثبَّتة أو غير مُرسَلة في المساحة:

## تفعيل وضع التطوير

يمكنك تفعيل وضع المطوّر على مساحتك من واجهة الويب أو عبر واجهة برمجة التطبيقات.

### عبر واجهة برمجة التطبيقات

يمكنك التبديل إلى وضع التطوير برمجياً:

```
POST https://huggingface.co/api/spaces/{namespace}/{repo}/dev-mode
Content-Type: application/json
Authorization: Bearer {token}

{
  "enabled": true
}
```

### عبر واجهة الويب

يمكنك أيضًا إنشاء مساحة مع تفعيل وضع التطوير:

## القيود

حاليًا، وضع التطوير غير متاح للمساحات الثابتة. كما أن مساحات Docker لها بعض المتطلبات الإضافية.

### مساحات Docker

يُؤيَّد وضع التطوير (Dev Mode) لمساحات Docker. ومع ذلك، يجب أن تتوافق مساحتك مع القواعد التالية لكي يعمل وضع التطوير بشكل صحيح.

1. يجب تثبيت الحزم التالية:

- `bash` (مطلوب لإنشاء اتصالات SSH)
- `curl` و`wget` و`procps` (مطلوبة من قبل عملية خادم VS Code)
- `git` و `git-lfs` لتتمكن من تنفيذ عمليات الإرسال والدفع للتغييرات من بيئة وضع التطوير الخاصة بك

2. يجب أن يكون كود التطبيق الخاص بك موجودًا في مجلد `/app` حتى يتمكن شيطان وضع التطوير من اكتشاف التغييرات.

3. يجب أن يكون المالك لمجلد `/app` هو المستخدم الذي يحمل المعرّف `1000` للسماح لك بإجراء تغييرات على الكود.

4. يجب أن يحتوي ملف Dockerfile على تعليمات `CMD` للبدء. راجع [توثيق Docker](https://docs.docker.com/reference/dockerfile/#cmd) حول تعليمات `CMD` لمزيد من التفاصيل.

يعمل وضع التطوير بشكل جيد عندما تكون الصورة الأساسية مبنية على debian (مثل ubuntu).

لم يتم اختبار توزيعات لينكس الأكثر غرابة (مثل alpine) ولا يُكفَل عمل وضع المطوّر عليها.

### مثال على ملفات Dockerfile المتوافقة

هذا مثال على ملف Dockerfile متوافق مع وضع التطوير في Spaces.

يقوم بتثبيت الحزم المطلوبة باستخدام `apt-get`، إلى جانب بضع حزم إضافية لراحة المطورين (وهي على وجه التحديد: `top` و`vim` و`nano`). ثم يبدأ تطبيق NodeJS من `/app`.

```Dockerfile
FROM node:19-slim

RUN apt-get update && \
    apt-get install -y \
      bash \
      git git-lfs \
      wget curl procps \
      htop vim nano && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --link ./ /app
RUN  npm i 

RUN chown 1000 /app
USER 1000
CMD ["node", "index.js"]
```

توجد عدة أمثلة على مساحات Docker متوافقة مع وضع التطوير في هذه المنظمة. لا تتردد في نسخها إلى نطاقك الخاص!

تطبيق بايثون مثال (خادم HTTP باستخدام FastAPI): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

تطبيق JavaScript تجريبي (خادم HTTP باستخدام Express.js): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

## ملاحظات

يمكنك مشاركة ملاحظاتك حول وضع المطوّر في Spaces مباشرةً على HF Hub: https://huggingface.co/spaces/dev-mode-explorers/README/discussions

