> 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/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 мы рекомендуем сначала обновиться до последнего выпуска установленной major-версии **до** перед обновлением до последнего выпуска **следующей** major-версии. Если ваша установка отстает от последней более чем на одну major-версию, вам потребуется выполнить многоэтапное обновление.

Например, если у вас установлена 3.5.10, вам нужно будет обновиться до 3.5.13 -> выполнить миграцию Full Project History -> 4.2.9 -> 5.5.4.

Вам следует **никогда** пропускать major-версии (3.5.10 -> 5.5.4). Если вы используете Toolkit и отстаете от последней более чем на одну major-версию, вы должны **не** использовать `bin/upgrade` скрипт, так как вам потребуется выполнить ручное многоэтапное обновление.
{% endhint %}

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

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

В большинстве случаев перед фактическим обновлением версии 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
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
# bye
```

{% 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
# 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` команды.

**Пример: обновление 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
# 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` чтобы разрешить проверке завершаться с ошибкой, не препятствуя запуску развёртывания.

{% 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://overleaf-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.
