> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/ar/althyeh/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 المتوافق. في بيئة مُدارة، يعني هذا توفير حاوية في المنطقة نفسها، أما في الحل المحلي، فشغّل النظامين في الحرم نفسه.

## إعداد 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://ayakaleaf-pro.ayaka.space/on-premises/ar/althyeh/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.
