> ## 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 -> виконати міграцію Full Project History -> 4.2.9 -> 5.5.4.

  **Ніколи** не пропускайте мажорні версії (3.5.10 -> 5.5.4). Якщо ви використовуєте Toolkit і відстаєте від останньої версії більш ніж на одну мажорну версію, **не** використовуйте скрипт `bin/upgrade`, оскільки вам потрібно буде виконати ручне багатоетапне оновлення.
</Danger>

<Warning>
  Важливо створювати [узгоджену резервну копію](/uk/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/).

Статус завершення підтримки (end-of-life) для кожної версії MongoDB можна переглянути [тут](https://endoflife.date/mongodb).

#### Оновлення MongoDB

MongoDB вимагає **покрокового оновлення**. Це означає, що не можна перейти, скажімо, з `4.0` одразу на `5.0`. Спочатку потрібно оновитися з `4.2` до `4.4`, а потім до `5.0`.

<Info>
  MongoDB використовує парні номери для своїх стабільних версій.
</Info>

#### **Інструкції з оновлення, якщо MongoDB працює поза Docker**

Нижче наведено посилання на інструкції з оновлення MongoDB на mongodb.com.

* [Примітки до випуску 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), а не автономного (standalone). Оскільки Server Pro/CE 4.0.1+ використовує транзакції, 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 на рівні кластера, і її можна повторно використовувати для цілей моніторингу,
</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.