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

# تحديث MongoDB

<Info>
  سيشير أي إصدار جديد من Server CE/Server Pro إلى أي تغيير في إصدار MongoDB المدعوم ضمن [ملاحظات الإصدار](https://docs.overleaf.com/on-premises/release-notes) الخاصة به.
</Info>

### هل يجب أن أحدّث MongoDB؟

يجب أن تفكر في تحديث إصدار MongoDB **فقط** إذا كنت تخطط لترقية نسخة Server CE/Server Pro الخاصة بك.

إذا كنت تشغّل إصدارًا من MongoDB أحدث من الإصدار الموصى به لإصدارك الحالي (أو المستهدف)، فلا داعي لإجراء أي تغييرات.

<Warning>
  يجب ألا تُرجع إصدار MongoDB إلى إصدار أقدم أبدًا.
</Warning>

إذا واجهت مشكلة محددة تعتقد أنها قد تكون مرتبطة بإصدار MongoDB الحالي لديك، فلا تتردد في [فتح بلاغ (issue)](https://github.com/overleaf/overleaf/issues) إذا كنت من مستخدمي Server CE، أو التواصل مع دعم Overleaf إذا كنت من مستخدمي Server Pro.

### التحقق من إصدار MongoDB

يجب أن يؤدي فتح صدفة `mongo` إلى طباعة الإصدار الحالي فورًا.

مستخدمو Overleaf Toolkit:

```bash theme={null}
bin/docker-compose exec mongo mongod --version
db version v5.0.24
Build Info: {
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
```

مستخدمو Docker Compose:

```bash theme={null}
docker compose exec mongo mongod --version
db version v5.0.24
Build Info: {
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

```

### عملية التحديث

يتم تحديث إصدار MongoDB أثناء ترقية نسخة Server CE/Server Pro على النحو التالي:

1. حدّد إصدار Server CE/Server Pro الذي تخطط للترقية إليه.
2. اعثر على إصدار MongoDB الموصى به لذلك الإصدار المحدد من Overleaf Server CE/Server Pro.
3. اتبع التعليمات لترقية MongoDB إلى الإصدار المستهدف.
4. رقِّ إصدار صورة Server CE/Server Pro وأعد تشغيل النسخة.

توصيتنا هي ترقية **Server CE/Server Pro** دائمًا إلى أحدث إصدار متاح، لأنه مضمون الدعم دائمًا (لمستخدمي Server Pro فقط).

<Danger>
  عند إجراء ترقية لـ Server CE/Pro، نوصي بالترقية إلى أحدث إصدار من الإصدار الرئيسي المنشور **قبل** الترقية إلى أحدث إصدار من الإصدار الرئيسي **التالي**. إذا كان نشرك متأخرًا بأكثر من إصدار رئيسي واحد عن الأحدث، فسيتعين عليك إجراء ترقية متعددة المراحل.

  على سبيل المثال، إذا كنت تشغّل 3.5.10، فستحتاج إلى الترقية إلى 3.5.13 -> إجراء ترحيل سجل المشروع الكامل -> 4.2.9 -> 5.5.4.

  يجب **ألا** تتخطى الإصدارات الرئيسية أبدًا (3.5.10 -> 5.5.4). إذا كنت تستخدم الـ Toolkit وكنت متأخرًا بأكثر من إصدار رئيسي واحد عن الأحدث، فيجب **ألا** تستخدم السكربت `bin/upgrade`، إذ ستحتاج إلى إجراء ترقية يدوية متعددة المراحل.
</Danger>

<Warning>
  من المهم التأكد من أخذ [نسخة احتياطية متسقة](/ar/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) **قبل** كل ترقية لإصدار رئيسي، لتتمكن من التراجع إذا احتجت إلى ذلك.
</Warning>

#### معلومات دعم الإصدارات

في حال قررت الانتقال إلى إصدار أقدم، يوضح هذا الجدول إصدار MongoDB الموصى به للإصدارات الأقدم من Server CE/Server Pro، لكن يجب **ألا** تُرجع إصدار MongoDB إلى إصدار أقدم أبدًا.

<div style={{ overflowX: "auto" }}><table style={{ display: "table", width: "100%" }}><thead><tr><th width="175">Server CE/Server Pro</th><th width="139" style={{ textAlign: "center" }}>إصدار MongoDB</th><th style={{ textAlign: "center" }}>الحد الأدنى لإصدار توافق الميزات</th><th style={{ textAlign: "center" }}>أقصى إصدار يدعمه برنامج تشغيل Node.js</th></tr></thead><tbody><tr><td>2.0.x</td><td style={{ textAlign: "center" }}>3.4</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>من 2.1.x إلى 2.4.x</td><td style={{ textAlign: "center" }}>3.6</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>>=2.5.0</td><td style={{ textAlign: "center" }}>4.0</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>>=3.1.0</td><td style={{ textAlign: "center" }}>4.2</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>>=3.2.0</td><td style={{ textAlign: "center" }}>4.4</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>>=4.2.0</td><td style={{ textAlign: "center" }}>5.0</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>>=5.1.0</td><td style={{ textAlign: "center" }}>6.0</td><td style={{ textAlign: "center" }}>-</td><td style={{ textAlign: "center" }}>-</td></tr><tr><td>>=5.3.1</td><td style={{ textAlign: "center" }}>6.0</td><td style={{ textAlign: "center" }}>5.0</td><td style={{ textAlign: "center" }}>8.0</td></tr><tr><td>>=5.5.0</td><td style={{ textAlign: "center" }}>6.0</td><td style={{ textAlign: "center" }}>6.0</td><td style={{ textAlign: "center" }}>8.0</td></tr><tr><td>6.0.0</td><td style={{ textAlign: "center" }}>8.0</td><td style={{ textAlign: "center" }}>8.0</td><td style={{ textAlign: "center" }}>8.0</td></tr></tbody></table></div>

<Danger>
  يستند الحد الأدنى لإصدار توافق الميزات أعلاه إلى إصدار MongoDB المقابل الموصى باستخدامه مع إصدار Overleaf الموضح. إذا كنت تخطط لاستخدام إصدار أعلى، فسيكون لـ MongoDB حدّه الأدنى الخاص.
</Danger>

يمكنك الاطلاع على جدول التوافق الذي يحدد الإصدارات المدعومة من برنامج تشغيل MongoDB لـ Node.js للاستخدام مع MongoDB [هنا](https://www.mongodb.com/docs/drivers/node/current/reference/compatibility/).

يمكنك الاطلاع على حالة انتهاء الدعم لكل إصدار من MongoDB [هنا](https://endoflife.date/mongodb).

#### ترقية MongoDB

يتطلب MongoDB **ترقيات تدريجية خطوة بخطوة**. وهذا يعني أنه لا يمكنك الانتقال مباشرةً من `4.0` إلى `5.0` مثلًا. بل تحتاج أولًا إلى التحديث من `4.2` إلى `4.4`، ثم إلى `5.0`.

<Info>
  يستخدم MongoDB الأرقام الزوجية لإصداراته المستقرة.
</Info>

#### **تعليمات التحديث عند تشغيل MongoDB خارج Docker**

فيما يلي روابط لتعليمات التحديث من mongodb.com عند ترقية MongoDB.

* [ملاحظات إصدار MongoDB - ترقية MongoDB من `4.2` إلى `4.4`](https://www.mongodb.com/docs/v4.4/release-notes/4.4-upgrade-standalone/)
* [ملاحظات إصدار MongoDB - ترقية MongoDB من `4.4` إلى `5.0`](https://www.mongodb.com/docs/v5.0/release-notes/5.0-upgrade-replica-set/)
* [ملاحظات إصدار MongoDB - ترقية MongoDB من `5.0` إلى `6.0`](https://www.mongodb.com/docs/v6.0/release-notes/6.0-upgrade-replica-set/)
* [ملاحظات إصدار MongoDB - ترقية MongoDB من `6.0` إلى `7.0`](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set)
* [ملاحظات إصدار MongoDB - ترقية MongoDB من `7.0` إلى `8.0`](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set)

<Info>
  تشير تعليمات الإصدار `5.0` وما بعده إلى تثبيت بنمط مجموعة النسخ المتماثلة (replica set) بدلًا من التثبيت المستقل. ونظرًا لأن Server Pro/CE 4.0.1+ يستخدم المعاملات (transactions)، فيجب تشغيل MongoDB كمجموعة نسخ متماثلة.
</Info>

<Warning>
  أصبح توثيق MongoDB من 3.2 إلى 4.2 متاحًا الآن عبر [https://www.mongodb.com/docs/legacy/](https://www.mongodb.com/docs/legacy/)
</Warning>

**التعليمات الأساسية**

في معظم الحالات، يتطلب التحديث تعيين علامة توافق قبل تحديث إصدار mongo فعليًا. والخطوات كما يلي:

1. عيّن علامة التوافق كما هو موضح في ملاحظات إصدار MongoDB (انظر الأمثلة أدناه).
2. ثم حدّث صورة mongo:
   1. **مستخدمو الـ Toolkit**: حدّث `MONGO_VERSION`، مثل `MONGO_VERSION=6.0`
   2. **مستخدمو Docker Compose**: حدّث إصدار وسم صورة `mongo`،\
      مثل `services -> mongo -> image: mongo:6.0`؛

**مثال: ترقية MongoDB من `5.0` إلى `6.0`**

لنبدأ بالتأكد من أننا نشغّل MongoDB `6.0`:

مستخدمو Overleaf Toolkit:

```bash theme={null}
bin/docker-compose exec mongo mongod --version
# db version v5.0.24
```

مستخدمو Docker Compose:

```bash theme={null}
docker compose exec mongo mongod --version
# db version v5.0.24
```

وفقًا لـ [تعليمات الترقية](https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/#upgrade-version-path)، فإن المتطلب الوحيد هو تعيين `featureCompatibilityVersion` إلى `5.0`. نقوم بذلك بفتح صدفة MongoDB وتشغيل الأمر المشار إليه:

مستخدمو Overleaf Toolkit:

```bash theme={null}
bin/mongo
# MongoDB shell version v5.0.24
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# bye
```

<Info>
  يمكن لمستخدمي Docker Compose تشغيل `docker compose exec mongo mongosh` للحصول على صدفة وتشغيل الأوامر نفسها التي يشغّلها مستخدمو الـ Toolkit.
</Info>

مستخدمو Overleaf Toolkit:

بعد ذلك سنوقف نسختي Server CE/Server Pro وMongoDB باستخدام الأمر `bin/stop`، ونعيّن `MONGO_VERSION=6.0` في `config/overleaf.rc`، ثم نعيد تشغيل خدمة `mongo` باستخدام `bin/up mongo`) للتحقق من أن التحديث تم بسلاسة.

أخيرًا، سنحدّث إصدار صورة Server CE/Server Pro إلى إصدارنا المستهدف ونعيد إنشاء جميع الخدمات باستخدام الأمر `bin/up -d`.

مستخدمو Docker Compose:

بعد ذلك سنوقف نسختي Server CE/Server Pro وMongoDB باستخدام الأمر `docker compose stop`، ونحدّث ملف [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) لاستخدام `image: mongo:6.0`، ثم نعيد تشغيل خدمة `mongo` باستخدام الأمر `docker compose up mongo` للتحقق من أن التحديث تم بسلاسة.

أخيرًا، سنحدّث إصدار صورة Server CE/Server Pro إلى إصدارنا المستهدف ونعيد إنشاء جميع الخدمات باستخدام الأمر `docker compose up`.

<strong>مثال: ترقية MongoDB من `6.0` إلى `7.0` (لمستخدمي الـ Toolkit)</strong>

ابدأ بالتأكد من أنك تشغّل MongoDB `6.0` باستخدام أوامر `mongod --version` أعلاه.

وفقًا لـ [تعليمات الترقية](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set)، فإن المتطلب الوحيد هو تعيين `featureCompatibilityVersion` إلى `6.0`. نقوم بذلك بفتح صدفة MongoDB وتشغيل الأمر `db.adminCommand({ setFeatureCompatibilityVersion: "6.0" })` .

مستخدمو Overleaf Toolkit:

```bash theme={null}
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# bye
```

بعد ذلك سنوقف نسختي Server CE/Server Pro وMongoDB باستخدام الأمر `bin/stop`، ونعيّن `MONGO_VERSION=7.0` في `config/overleaf.rc`، ثم نعيد تشغيل خدمة `mongo` باستخدام `bin/up mongo`) للتحقق من أن التحديث تم بسلاسة.

أخيرًا، سنحدّث إصدار صورة Server CE/Server Pro إلى إصدارنا المستهدف ونعيد إنشاء جميع الخدمات باستخدام الأمر `bin/up -d`.

<strong>مثال: ترقية MongoDB من `7.0` إلى `8.0` (لمستخدمي الـ Toolkit)</strong>

ابدأ بالتأكد من أنك تشغّل MongoDB `7.0` باستخدام أوامر `mongod --version` أعلاه.

وفقًا لـ [تعليمات الترقية](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set)، فإن المتطلب الوحيد هو تعيين `featureCompatibilityVersion` إلى `7.0`. نقوم بذلك بفتح صدفة MongoDB وتشغيل الأمر `db.adminCommand({ setFeatureCompatibilityVersion: "7.0", confirm: true })`. لاحظ أن هذا يتطلب الآن معاملًا إضافيًا هو `confirm: true`.

```bash theme={null}
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# bye
```

بعد ذلك سنوقف نسختي Server CE/Server Pro وMongoDB باستخدام الأمر `bin/stop`، ونعيّن `MONGO_VERSION=8.0` في `config/overleaf.rc`، ثم نعيد تشغيل خدمة `mongo` باستخدام `bin/up mongo`) للتحقق من أن التحديث تم بسلاسة.

أخيرًا، سنحدّث إصدار صورة Server CE/Server Pro إلى إصدارنا المستهدف ونعيد إنشاء جميع الخدمات باستخدام الأمر `bin/up -d`.

#### الأوامر المكافئة لمستخدمي docker compose

بالنسبة لمستخدمي docker compose، فإن الأوامر المكافئة هي:

* `docker compose exec mongo mongod --version` لعرض إصدار mongo
* `docker compose exec mongo mongosh` لبدء صدفة mongo لأوامر الإدارة
* الأمر `docker compose stop` لإيقاف الخادم
* حرّر ملف [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) لاستخدام `image: mongo:6.0` لترقية إصدار mongo
* `docker compose up mongo` لإعادة تشغيل خدمة mongo والتحقق من أن التحديث تم بسلاسة
* حرّر ملف [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) لاستخدام `image: sharelatex:VERSION` لترقية إصدار الصورة
* `docker compose up` لإعادة إنشاء جميع الخدمات.

### إنشاء دور مخصص

في الإصدار `5.5.1`، أضفنا فحصًا عند بدء التشغيل للتحقق من إصدار توافق الميزات في MongoDB. إذا كانت قاعدة بيانات MongoDB لديك تستخدم المصادقة (مثل المصادقة الأساسية)، فقد لا تبدأ حاوية `sharelatex`، وتعرض خطأ صلاحيات "*not authorized on admin to execute command*".

لحل ذلك، يمكنك إما إنشاء دور جديد في MongoDB وإسناده إلى حساب المستخدم المستخدم للوصول إلى قاعدة البيانات باتباع التعليمات أدناه، أو تعيين `ALLOW_MONGO_ADMIN_CHECK_FAILURES=true` للسماح بفشل الفحص دون منع النشر من البدء.

<Check>
  يمنح هذا الدور الجديد صلاحية قراءة معاملات خادم MongoDB على مستوى العنقود (cluster) **فقط**، ويمكن إعادة استخدامه لأغراض المراقبة،
</Check>

```bash wrap theme={null}
# Toolkit users
$ bin/docker-compose exec -it mongo mongosh -u {{YOUR-ADMIN-USERNAME}} -p

# Switch to the "admin" database using
overleaf [direct: primary] sharelatex> use admin
switched to db admin
overleaf [direct: primary] admin> 

# Create a new role with permission to use "getParamter". Copy and paste the function below into the shell and press the return key

db.createRole(
  {
    role: "clusterParameterReader",
    privileges: [
      {
        resource: { cluster: true },
        actions: ["getParameter"]    
      }
    ],
    roles: [] 
  }
);

# Switch back to the "sharelatex" database 
use sharelatex
switched to db sharelatex
overleaf [direct: primary] sharelatex> 

# Assign the new "clusterParameterReader" role to your database user by copy and pasting the function below into the shell and press the return key 
db.grantRolesToUser(
  "{{YOUR-DATABASE-USER}}",
  [
    { role: "clusterParameterReader", db: "admin" }
  ]
);

# Type exit then return to exit the MongoDB shell
# Run bin/up -d to start the deployment stack
$ bin/up -d
```


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