> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/ar/aliadadat/overleaf-toolkit/s3.md).

# S3

{% hint style="info" %}
تتناول هذه الوثيقة إعداد S3 في Server CE وOverleaf Pro. أ [دليل منفصل](/on-premises/ar/alsyanh/s3-migration.md) يمكن العثور عليه بشأن نقل البيانات الموجودة إلى تخزين متوافق مع S3.
{% endhint %}

## متى ينبغي التفكير في استخدام S3 لتخزين البيانات

للمثيلات التي تحتوي على أقل من 1000 مقعد، نوصي باستخدام تخزين القرص المحلي مع نسخ احتياطية منتظمة [نسخ احتياطية متسقة](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup).

بالنسبة للمثيلات الأكبر التي تحتوي على أكثر من 1000 مقعد وتصل إلى حدود التخزين المحلي لديها (الحجم أو معدل النقل)، نوصي باستخدام تخزين كائنات متوافق مع S3 كخلفية بدلًا من حلول التخزين الأخرى المعتمدة على الشبكة مثل NFS.

## خيارات تخزين الكائنات المتوافقة مع S3

فيما يلي أكثر الخيارات شيوعًا لتخزين الكائنات المتوافق مع S3:

* [AWS S3](https://aws.amazon.com/s3/)، مُدار، نوصي باختيار AWS S3 عند تشغيل Overleaf CE/Server Pro على AWS
* [MINIO](https://min.io/)، مستضاف ذاتيًا
* [Ceph](https://ceph.io/en/)، مستضاف ذاتيًا
* لدى مزودي الاستضافة الآخرين أيضًا نوع من تخزين الكائنات المتوافق مع S3 والمُدار، وقد ترغب في استخدامه بدلًا من تشغيله بنفسك عندما تكون بالفعل تشغّل Overleaf CE/Server Pro لدى مثل هذا المزود.

## اعتبارات زمن الوصول عند اختيار تخزين كائنات متوافق مع S3

يُعد زمن الوصول بين مثيل Server CE/Server Pro وتخزين الكائنات المتوافق مع S3 مساهمًا كبيرًا في الوقت المستغرق لإكمال الترحيل. كما يؤثر زمن الوصول أيضًا في أداء رفع الملفات في Server CE/Server Pro، ويمكن أن يكون لبطء تنزيل الملفات أثر كبير على أوقات تجميع ملفات PDF كذلك. نقترح تقليل المسافة الجغرافية بين مثيل Server CE/Server Pro الخاص بك وتخزين الكائنات المتوافق مع S3. في بيئة مُدارة، يعني ذلك توفير حاوية (bucket) في المنطقة نفسها، أما في حل محلي (on-premise)، فقم بتشغيلهما في الحرم نفسه.

## إعداد S3

نحتاج إلى أربع "حاويات" وحسابي مستخدم مقيدين.

{% hint style="warning" %}
يجب أن تكون الحاويات **لا** متاحة للعامة
{% endhint %}

<table data-header-hidden><thead><tr><th width="279"></th><th width="152"></th><th width="97"></th><th></th></tr></thead><tbody><tr><td>الحاوية</td><td>الاستخدام</td><td>الخدمة</td><td>سابقًا في <code>/var/lib/overleaf/data</code></td></tr><tr><td><code>overleaf-user-files</code></td><td>ملفات مستخدمي المشروع</td><td>filestore</td><td><code>user_files</code></td></tr><tr><td><code>overleaf-template-files</code></td><td>ملفات القوالب</td><td>filestore</td><td><code>template_files</code></td></tr><tr><td><code>overleaf-project-blobs</code></td><td>كتل محفوظات المشروع</td><td>المحفوظات ومخزن الملفات للقراءة فقط</td><td><code>history/overleaf-project-blobs</code></td></tr><tr><td><code>overleaf-chunks</code></td><td>أجزاء المحفوظات</td><td>history</td><td><code>history/overleaf-chunks</code></td></tr></tbody></table>

قد ترغب/تحتاج إلى اختيار اسم مختلف، وتأكد من استخدام الحاويات المخصصة في جميع الأوامر.

سيستخدم ما يلي عناصر نائبة للاعتمادات الفعلية:

<table><thead><tr><th width="431">متغير البيئة</th><th>الوصف</th></tr></thead><tbody><tr><td><code>OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID</code></td><td>مفتاح الوصول/اسم المستخدم للمستخدم المقيد لخدمة مخزن الملفات.</td></tr><tr><td><code>OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY</code></td><td>المفتاح السري/كلمة المرور للمستخدم المقيد لخدمة مخزن الملفات.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_ACCESS_KEY_ID</code></td><td>مفتاح الوصول/اسم المستخدم للمستخدم المقيد لخدمة المحفوظات.</td></tr><tr><td><code>OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY</code></td><td>المفتاح السري/كلمة المرور للمستخدم المقيد لخدمة المحفوظات.</td></tr></tbody></table>

يحتاج Server CE وServer Pro فقط إلى مجموعة صغيرة من الأذونات على كل حاوية:

* إنشاء كائن
* جلب كائن
* حذف كائن
* عرض محتويات الحاوية

### سياسات الوصول

إليك كيف يمكن أن تبدو سياسة لمستخدم مخزن الملفات:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-user-files"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-user-files/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-template-files"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-template-files/*"
    }
  ]
}
```

إليك كيف يمكن أن تبدو سياسة لمستخدم المحفوظات:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-chunks"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-chunks/*"
    }
  ]
}
```

### نظرة عامة على المتغيرات

#### عند استخدام AWS S3

```bash
# تفعيل واجهة S3 الخلفية لمخزن الملفات
OVERLEAF_FILESTORE_BACKEND=s3

# اسم الحاوية لملفات المشروع
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# اسم الحاوية لملفات القوالب
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# مفتاح مستخدم مخزن الملفات
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# السرّ لمستخدم مخزن الملفات
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# منطقة الحاوية التي اخترتها عند إنشاء الحاويات.
OVERLEAF_FILESTORE_S3_REGION=""

# تفعيل واجهة S3 الخلفية للمحفوظات
OVERLEAF_HISTORY_BACKEND=s3

# اسم الحاوية لكتل محفوظات المشروع
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# اسم الحاوية لأجزاء المحفوظات
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# مفتاح مستخدم المحفوظات
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# السرّ لمستخدم المحفوظات
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# منطقة الحاوية التي اخترتها عند إنشاء الحاويات.
OVERLEAF_HISTORY_S3_REGION=""
```

#### عند استخدام خيار مستضاف ذاتيًا

```bash
# تفعيل واجهة S3 الخلفية لمخزن الملفات
OVERLEAF_FILESTORE_BACKEND=s3

# اسم الحاوية لملفات المشروع
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# اسم الحاوية لملفات القوالب
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# مفتاح مستخدم مخزن الملفات
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# السرّ لمستخدم مخزن الملفات
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# نقطة نهاية موفر S3
OVERLEAF_FILESTORE_S3_ENDPOINT=http://10.10.10.10:9000

# عنونة الحاويات بنمط المسار. على الأرجح ستحتاج إلى ضبطها على "true".
OVERLEAF_FILESTORE_S3_PATH_STYLE="true"

# منطقة الحاوية. على الأرجح لن تحتاج إلى تهيئة هذا.
OVERLEAF_FILESTORE_S3_REGION=""

# تفعيل واجهة S3 الخلفية للمحفوظات
OVERLEAF_HISTORY_BACKEND=s3

# اسم الحاوية لكتل محفوظات المشروع
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# اسم الحاوية لأجزاء المحفوظات
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# مفتاح مستخدم المحفوظات
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# السرّ لمستخدم المحفوظات
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# نقطة نهاية موفر S3
OVERLEAF_HISTORY_S3_ENDPOINT=http://10.10.10.10:9000

# عنونة الحاويات بنمط المسار. على الأرجح ستحتاج إلى ضبطها على "true".
OVERLEAF_HISTORY_S3_PATH_STYLE="true"

# منطقة الحاوية. على الأرجح لن تحتاج إلى تهيئة هذا.
OVERLEAF_HISTORY_S3_REGION=""
```

### إعداد MINIO

{% hint style="info" %}
`MINIO_ROOT_USER` و `MINIO_ROOT_PASSWORD` هي بيانات اعتماد الجذر لمثيل MINIO.
{% endhint %}

يرجى اتباع [التوثيق الرسمي](https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart) للحصول على نسخة من `mc`.

```bash
mc alias set s3 http://10.10.10.10:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD

# ضع محتويات السياسات من القسم السابق في
# ملفي JSON المناسبين policy-filestore.json وpolicy-history.json.

# تذكير: استبدل أسماء الحاويات وبيانات الاعتماد وفقًا لذلك.

# حاويات مخزن الملفات والمستخدم والسياسة
mc mb --ignore-existing s3/overleaf-user-files
mc mb --ignore-existing s3/overleaf-template-files
mc admin user add s3 \\
  OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \\
  OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
mc admin policy create s3 overleaf-filestore policy-filestore.json
mc admin policy attach s3 overleaf-filestore \\
  --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID

# حاويات المحفوظات والمستخدم والسياسة
mc mb --ignore-existing s3/overleaf-project-blobs
mc mb --ignore-existing s3/overleaf-chunks
mc admin user add s3 \\
  OVERLEAF_HISTORY_S3_ACCESS_KEY_ID \\
  OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY
mc admin policy create s3 overleaf-history policy-history.json
mc admin policy attach s3 overleaf-history \\
  --user=OVERLEAF_HISTORY_S3_ACCESS_KEY_ID
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/ar/aliadadat/overleaf-toolkit/s3.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
