> 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/ru/obsluzhivanie/updating-mongodb.md).

# Обновление MongoDB

{% hint style="info" %}
Любой новый выпуск Server CE/Server Pro будет указывать любые изменения поддерживаемой версии MongoDB в своих [примечаниях к выпуску](https://docs.overleaf.com/on-premises/release-notes).
{% endhint %}

### Нужно ли мне обновлять MongoDB?

Вам следует **только** рассматривать обновление версии MongoDB, если вы планируете обновить свой экземпляр Server CE/Server Pro.

Если у вас используется версия MongoDB новее, чем рекомендованная для вашей текущей (или целевой) версии, вносить какие-либо изменения не нужно.

{% hint style="warning" %}
Никогда не следует понижать версию MongoDB.
{% endhint %}

Если вы столкнулись с конкретной проблемой, которая, как вам кажется, может быть связана с вашей текущей версией MongoDB, не стесняйтесь [создать обращение](https://github.com/overleaf/overleaf/issues) если вы пользователь Server CE, или обратитесь в службу поддержки Overleaf, если вы пользователь Server Pro.

### Проверка вашей версии MongoDB

Открытие `mongo` оболочки должно сразу вывести текущую версию.

Пользователи Overleaf Toolkit:

```bash
bin/docker-compose exec mongo mongod --version
версия БД v5.0.24
Информация о сборке: {
    "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
docker compose exec mongo mongod --version
версия БД v5.0.24
Информация о сборке: {
    "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).

{% hint style="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` скрипт, поскольку вам потребуется выполнить многоэтапное обновление вручную.
{% endhint %}

{% hint style="warning" %}
Важно убедиться, что вы делаете [консистентную резервную копию](/on-premises/ru/obsluzhivanie/data-and-backups.md#performing-a-consistent-backup) **перед** при каждом обновлении до новой основной версии, чтобы при необходимости вы могли откатиться.
{% endhint %}

#### Информация о поддержке версий

Если вы решите перейти на более раннюю версию, эта таблица показывает рекомендуемую версию MongoDB для более ранних выпусков Server CE/Server Pro, но вам следует **никогда** понизить версию MongoDB.

<table><thead><tr><th width="175">Server CE/Server Pro</th><th width="139" align="center">Версия MongoDB</th><th align="center">Минимальная версия совместимости функций</th><th align="center">Максимальная версия, поддерживаемая драйвером Node.js</th></tr></thead><tbody><tr><td>2.0.x</td><td align="center">3.4</td><td align="center">-</td><td align="center">-</td></tr><tr><td>2.1.x до 2.4.x</td><td align="center">3.6</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=2.5.0</td><td align="center">4.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=3.1.0</td><td align="center">4.2</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=3.2.0</td><td align="center">4.4</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=4.2.0</td><td align="center">5.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=5.1.0</td><td align="center">6.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=5.3.1</td><td align="center">6.0</td><td align="center">5.0</td><td align="center">8.0</td></tr><tr><td>>=5.5.0</td><td align="center">6.0</td><td align="center">6.0</td><td align="center">8.0</td></tr><tr><td>6.0.0</td><td align="center">8.0</td><td align="center">8.0</td><td align="center">8.0</td></tr></tbody></table>

{% hint style="danger" %}
Указанная выше минимальная версия совместимости функций основана на соответствующей версии MongoDB, рекомендованной для использования с показанной версией Overleaf. Если вы планируете использовать более высокую версию, у MongoDB будут собственные минимальные требования.
{% endhint %}

Вы можете посмотреть таблицу совместимости, в которой указаны поддерживаемые версии драйвера 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`.

{% hint style="info" %}
MongoDB использует четные номера для своих стабильных версий.
{% endhint %}

#### **Инструкции по обновлению при запуске 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)

{% hint style="info" %}
Инструкции для `5.0` и выше указывают на установку в виде набора реплик, а не отдельного экземпляра. Поскольку Server Pro/CE 4.0.1+ использует транзакции, MongoDB нужно запускать как набор реплик.
{% endhint %}

{% hint style="warning" %}
Документация для MongoDB 3.2–4.2 теперь доступна через <https://www.mongodb.com/docs/legacy/>
{% endhint %}

**Базовые инструкции**

В большинстве случаев обновление требует настройки флага совместимости перед фактическим обновлением версии MongoDB. Шаги следующие:

1. Установите флаг совместимости, как описано в примечаниях к выпуску MongoDB (см. примеры ниже).
2. Затем обновите образ MongoDB:
   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
bin/docker-compose exec mongo mongod --version
# версия БД v5.0.24
```

Пользователи Docker Compose:

```bash
docker compose exec mongo mongod --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
bin/mongo
# версия оболочки MongoDB v5.0.24
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# до свидания
```

{% hint style="info" %}
Пользователи Docker Compose могут выполнить `docker compose exec mongo mongosh` чтобы получить оболочку и выполнить те же команды, что и пользователи Toolkit.
{% endhint %}

Пользователи 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` команды.

**Пример: обновление MongoDB с `6.0` с `7.0` (пользователи Toolkit)**

Сначала убедитесь, что у вас запущена 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
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# до свидания
```

Затем мы остановим экземпляры 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` команды.

**Пример: обновление MongoDB с `7.0` с `8.0` (пользователи Toolkit)**

Сначала убедитесь, что у вас запущена 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
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# до свидания
```

Затем мы остановим экземпляры 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` для отображения версии MongoDB
* `docker compose exec mongo mongosh` для запуска оболочки MongoDB для административных команд
* `docker compose stop` команда для остановки сервера
* Отредактируйте [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) файл, чтобы использовать `image: mongo:6.0` чтобы обновить версию MongoDB
* `docker compose up mongo` чтобы перезапустить службу MongoDB и убедиться, что обновление прошло успешно
* Отредактируйте [`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` чтобы разрешить проверке завершаться с ошибкой, не препятствуя запуску развертывания.

{% hint style="success" %}
Эта новая роль **только** дает разрешение на чтение общекластерных параметров сервера MongoDB и может повторно использоваться для целей мониторинга,
{% endhint %}

{% code overflow="wrap" %}

```bash
# пользователи Toolkit
$ bin/docker-compose exec -it mongo mongosh -u {{YOUR-ADMIN-USERNAME}} -p

# Переключитесь на базу данных «admin» с помощью
overleaf [direct: primary] sharelatex> use admin
переключено на БД admin
overleaf [direct: primary] admin> 

# Создайте новую роль с разрешением использовать "getParamter". Скопируйте и вставьте приведенную ниже функцию в оболочку и нажмите клавишу Enter

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

# Переключитесь обратно на базу данных «sharelatex» 
use sharelatex
переключено на БД sharelatex
overleaf [direct: primary] sharelatex> 

# Назначьте новую роль "clusterParameterReader" вашему пользователю базы данных, скопировав и вставив приведенную ниже функцию в оболочку и нажав клавишу Enter 
db.grantRolesToUser(
  "{{YOUR-DATABASE-USER}}",
  [
    { role: "clusterParameterReader", db: "admin" }
  ]
);

# Введите exit, затем нажмите Enter, чтобы выйти из оболочки MongoDB
# Запустите bin/up -d, чтобы запустить стек развертывания
$ bin/up -d
```

{% endcode %}


---

# 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/ru/obsluzhivanie/updating-mongodb.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.
