# المستودعات

**المستودع** هو صورة قرص مشفرة بـ LUKS على الخادم البعيد. عند تحميله، يوفر:
- نظام ملفات معزول لبيانات تطبيقك
- عملية Docker مخصصة (منفصلة عن Docker المضيف)
- عناوين IP حلقية فريدة لكل خدمة ضمن شبكة فرعية /26

## إنشاء مستودع

```bash
rdc repo create --name my-app -m server-1 --size 10G
```

| الخيار | مطلوب | الوصف |
|--------|-------|-------|
| `-m, --machine <name>` | نعم | الجهاز المستهدف حيث سيتم إنشاء المستودع. |
| `--size <size>` | نعم | حجم صورة القرص المشفرة (مثل `5G`، `10G`، `50G`). |
| `--skip-router-restart` | No | Skip restarting the route server after the operation |

ستظهر في المخرجات ثلاث قيم مُنشأة تلقائياً:

- **معرّف المستودع (GUID)** -- معرّف UUID يحدد صورة القرص المشفرة على الخادم.
- **بيانات الاعتماد (Credential)** -- عبارة مرور عشوائية تُستخدم لتشفير وفك تشفير وحدة LUKS.
- **معرّف الشبكة (Network ID)** -- عدد صحيح (يبدأ من 2816، ويزداد بمقدار 64) يحدد الشبكة الفرعية لعناوين IP لخدمات هذا المستودع.

> **احفظ بيانات الاعتماد بأمان.** إنها مفتاح التشفير لمستودعك. في حالة فقدانها، لا يمكن استرجاع البيانات. يتم تخزين بيانات الاعتماد في ملف `config.json` المحلي ولكن لا تُخزّن على الخادم.

## التحميل وإلغاء التحميل

التحميل يفك تشفير نظام ملفات المستودع ويجعله متاحاً. إلغاء التحميل يغلق الوحدة المشفرة.

```bash
rdc repo mount --name my-app -m server-1  # فك التشفير والتحميل
rdc repo unmount --name my-app -m server-1  # إلغاء التحميل وإعادة التشفير
```

| الخيار | الوصف |
|--------|-------|
| `--checkpoint` | إنشاء نقطة تفتيش قبل التحميل/إلغاء التحميل |
| `--skip-router-restart` | Skip restarting the route server after the operation |

## التحقق من الحالة

```bash
rdc repo status --name my-app -m server-1
```

## عرض جميع المستودعات

```bash
rdc repo list -m server-1
```

## تغيير الحجم

عيّن المستودع إلى حجم محدد أو وسّعه بمقدار معين:

```bash
rdc repo resize --name my-app -m server-1 --size 20G  # تعيين حجم محدد
rdc repo expand --name my-app -m server-1 --size 5G  # إضافة 5G إلى الحجم الحالي
```

> يجب إلغاء تحميل المستودع قبل تغيير حجمه.

## نسخ مستودع (Fork)

أنشئ نسخة من مستودع موجود في حالته الحالية:

```bash
rdc repo fork --parent my-app --tag staging -m server-1
```

تستخدم النسخ نموذج name:tag: النسخة الناتجة تسمى `my-app:staging`. ينشئ هذا نسخة مشفرة جديدة بمعرّف GUID ومعرّف شبكة خاصين بها، مع مشاركة اسم المستودع الأصلي. تشترك النسخة في نفس بيانات اعتماد LUKS مع المستودع الأصلي.

## التحقق من السلامة

تحقق من سلامة نظام ملفات مستودع:

```bash
rdc repo validate --name my-app -m server-1
```

## الملكية

عيّن ملكية الملفات داخل المستودع للمستخدم العام (UID 7111). هذا مطلوب عادةً بعد رفع الملفات من محطة عملك، والتي تصل بمعرّف المستخدم المحلي الخاص بك.

```bash
rdc repo ownership --name my-app -m server-1
```

يكتشف الأمر تلقائياً مجلدات بيانات حاويات Docker (نقاط التحميل القابلة للكتابة) ويستثنيها. هذا يمنع تعطل الحاويات التي تدير ملفاتها بمعرّفات مستخدم خاصة بها (مثل MariaDB=999، www-data=33).

| الخيار | الوصف |
|--------|-------|
| `--uid <uid>` | تعيين معرّف مستخدم مخصص بدلاً من 7111 |
| `--skip-router-restart` | Skip restarting the route server after the operation |

لفرض الملكية على جميع الملفات، بما في ذلك بيانات الحاويات:

```bash
rdc repo ownership --name my-app -m server-1
```


راجع [دليل الترحيل](/ar/docs/migration) لشرح كامل لمتى وكيف تُستخدم الملكية أثناء ترحيل المشاريع.

## تطبيق قالب

طبّق قالباً لتهيئة مستودع بملفات:

```bash
rdc repo template apply --name my-template -m server-1 -r my-app --file ./my-template.tar.gz
```

## الحذف

تدمير المستودع وجميع البيانات الموجودة فيه بشكل دائم:

```bash
rdc repo delete --name my-app -m server-1
```

> يؤدي هذا إلى تدمير صورة القرص المشفرة بشكل دائم. لا يمكن التراجع عن هذا الإجراء.