> 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/pt/manutencao/updating-mongodb.md).

# Atualizar o MongoDB

{% hint style="info" %}
Qualquer nova versão do Server CE/Server Pro indicará qualquer alteração na versão suportada do MongoDB nas suas [notas de lançamento](https://docs.overleaf.com/on-premises/release-notes).
{% endhint %}

### Devo atualizar o MongoDB?

Deve **apenas** considerar atualizar a sua versão do MongoDB se estiver a planear atualizar a sua instância do Server CE/Server Pro.

Se estiver a executar uma versão do MongoDB mais recente do que a recomendada para a sua versão atual (ou de destino), não há necessidade de fazer quaisquer alterações.

{% hint style="warning" %}
Nunca deve fazer downgrade da sua versão do MongoDB.
{% endhint %}

Se tiver um problema específico que pense poder estar relacionado com a sua versão atual do MongoDB, sinta-se à vontade para [abrir uma questão](https://github.com/overleaf/overleaf/issues) se for utilizador do Server CE ou contactar o Suporte do Overleaf se for utilizador do Server Pro.

### Verificar a sua versão do MongoDB

Abrindo o `mongo` shell deverá apresentar imediatamente a versão atual.

Utilizadores do Overleaf Toolkit:

```bash
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"
    }
}
```

Utilizadores do Docker Compose:

```bash
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"
    }
}

```

### Processo de atualização

A atualização da versão do MongoDB durante uma atualização da sua instância do Server CE/Server Pro é a seguinte:

1. Decida a versão do Server CE/Server Pro para a qual planeia atualizar.
2. Encontre a versão do MongoDB recomendada por essa versão específica do Overleaf Server CE/Server Pro.
3. Siga as instruções para atualizar o MongoDB para a versão de destino.
4. Atualize a versão da imagem do Server CE/Server Pro e reinicie a instância.

A nossa recomendação é atualizar sempre **Server CE/Server Pro** para a versão mais recente disponível, uma vez que é sempre garantida a compatibilidade suportada (apenas utilizadores do Server Pro).

{% hint style="danger" %}
Ao efetuar uma atualização do Server CE/Pro, recomendamos atualizar para a versão de lançamento mais recente da versão principal implementada **antes de** atualizar para a versão de lançamento mais recente da **seguinte** versão principal. Se a sua implementação estiver a mais de uma versão principal atrás da mais recente, será necessário efetuar uma atualização em várias etapas.

Por exemplo, se estiver a executar 3.5.10, terá de atualizar para 3.5.13 -> Executar a migração do Histórico Completo do Projeto -> 4.2.9 -> 5.5.4.

Deve **nunca** saltar versões principais (3.5.10 -> 5.5.4). Se estiver a usar o Toolkit e estiver a mais de uma versão principal atrás da mais recente, deve **não** usar o `bin/upgrade` script, pois terá de efetuar uma atualização manual em várias etapas.
{% endhint %}

{% hint style="warning" %}
É importante garantir que faz uma [cópia de segurança consistente](/on-premises/pt/manutencao/data-and-backups.md#performing-a-consistent-backup) **antes de** em cada atualização de versão principal para permitir que possa reverter, caso seja necessário.
{% endhint %}

#### Informações de suporte de versões

Caso decida voltar para uma versão anterior, esta tabela mostra a versão do MongoDB recomendada para lançamentos anteriores do Server CE/Server Pro, mas não deve **nunca** fazer downgrade da sua versão do MongoDB.

<table><thead><tr><th width="175">Server CE/Server Pro</th><th width="139" align="center">Versão do MongoDB</th><th align="center">Versão mínima de compatibilidade de funcionalidades</th><th align="center">Versão máxima suportada pelo driver 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 a 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" %}
A versão mínima de compatibilidade de funcionalidades acima baseia-se na versão correspondente do MongoDB recomendada para utilização com a versão do Overleaf apresentada. Se planeia usar uma versão superior, o MongoDB terá o seu próprio requisito mínimo.
{% endhint %}

Pode ver a tabela de compatibilidade que especifica as versões suportadas do driver Node.js do MongoDB para utilização com o MongoDB [aqui](https://www.mongodb.com/docs/drivers/node/current/reference/compatibility/).

Pode ver o estado de fim de vida de cada versão do MongoDB [aqui](https://endoflife.date/mongodb).

#### Atualizar o MongoDB

O MongoDB requer **atualizações passo a passo**. Isso significa que não pode passar diretamente, por exemplo `4.0` para `5.0`. Precisa primeiro de atualizar `4.2` para `4.4`, e depois `5.0`.

{% hint style="info" %}
O MongoDB usa números pares para as suas versões estáveis.
{% endhint %}

#### **Instruções de atualização ao executar o MongoDB fora do Docker**

Aqui estão ligações para as instruções de atualização do mongodb.com ao atualizar o MongoDB.

* [Notas de lançamento do MongoDB - atualizar o MongoDB de `4.2` para `4.4`](https://www.mongodb.com/docs/v4.4/release-notes/4.4-upgrade-standalone/)
* [Notas de lançamento do MongoDB - atualizar o MongoDB de `4.4` para `5.0`](https://www.mongodb.com/docs/v5.0/release-notes/5.0-upgrade-replica-set/)
* [Notas de lançamento do MongoDB - atualizar o MongoDB de `5.0` para `6.0`](https://www.mongodb.com/docs/v6.0/release-notes/6.0-upgrade-replica-set/)
* [Notas de lançamento do MongoDB - atualizar o MongoDB de `6.0` para `7.0`](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set)
* [Notas de lançamento do MongoDB - atualizar o MongoDB de `7.0` para `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" %}
Instruções para `5.0` e superiores apontam para uma instalação em replica set, em vez de standalone. Como o Server Pro/CE 4.0.1+ usa transações, o MongoDB precisa de ser executado como um replica set.
{% endhint %}

{% hint style="warning" %}
A documentação do MongoDB 3.2 a 4.2 está agora disponível em <https://www.mongodb.com/docs/legacy/>
{% endhint %}

**Instruções básicas**

Na maioria dos casos, a atualização requer definir um sinalizador de compatibilidade antes de atualizar efetivamente a versão do mongo. Os passos são os seguintes:

1. Defina o sinalizador de compatibilidade conforme descrito nas notas de lançamento do MongoDB (veja os exemplos abaixo).
2. Depois atualize a imagem do mongo:
   1. **Utilizadores do Toolkit** Atualize `MONGO_VERSION`, por exemplo `MONGO_VERSION=6.0`
   2. **Utilizadores do Docker Compose** Atualize a versão da `mongo` tag da imagem,\
      por exemplo `services -> mongo -> image: mongo:6.0`;

**Exemplo: Atualizar o MongoDB de `5.0` para `6.0`**

Comecemos por garantir que estamos a executar o MongoDB `6.0`:

Utilizadores do Overleaf Toolkit:

```bash
bin/docker-compose exec mongo mongod --version
# db version v5.0.24
```

Utilizadores do Docker Compose:

```bash
docker compose exec mongo mongod --version
# db version v5.0.24
```

De acordo com as [instruções de atualização](https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/#upgrade-version-path), o único requisito é ter `featureCompatibilityVersion` definido para `5.0`. Fazemo-lo abrindo um shell do MongoDB e executando o comando indicado:

Utilizadores do Overleaf Toolkit:

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

{% hint style="info" %}
Os utilizadores do Docker Compose podem executar `docker compose exec mongo mongosh` para obter um shell e executar os mesmos comandos que os utilizadores do Toolkit.
{% endhint %}

Utilizadores do Overleaf Toolkit:

Depois, iremos parar as instâncias do Server CE/Server Pro e do MongoDB usando o `bin/stop` comando, definir `MONGO_VERSION=6.0` em `config/overleaf.rc`, e depois reiniciar o `mongo` serviço usando `bin/up mongo`) para verificar se a atualização decorreu sem problemas.

Por fim, atualizaremos a versão da imagem do Server CE/Server Pro para a nossa versão de destino e recriaremos todos os serviços usando o `bin/up -d` comando.

Utilizadores do Docker Compose:

Depois, iremos parar as instâncias do Server CE/Server Pro e do MongoDB usando o `docker compose stop` comando, atualize [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) ficheiro para usar `image: mongo:6.0`, e depois reiniciar o `mongo` serviço usando o `docker compose up mongo` comando para verificar se a atualização decorreu sem problemas.

Por fim, atualizaremos a versão da imagem do Server CE/Server Pro para a nossa versão de destino e recriaremos todos os serviços usando o `docker compose up` comando.

**Exemplo: Atualizar o MongoDB de `6.0` para `7.0` (utilizadores do Toolkit)**

Comece por garantir que está a executar o MongoDB `6.0` usando os `mongod --version` comandos acima.

De acordo com as [instruções de atualização](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set), o único requisito é ter `featureCompatibilityVersion` definido para `6.0`. Fazemo-lo abrindo um shell do MongoDB e executando o comando `db.adminCommand({ setFeatureCompatibilityVersion: "6.0" })` .

Utilizadores do Overleaf Toolkit:

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

Depois, iremos parar as instâncias do Server CE/Server Pro e do MongoDB usando o `bin/stop` comando, definir `MONGO_VERSION=7.0` em `config/overleaf.rc`, e depois reiniciar o `mongo` serviço usando `bin/up mongo`) para verificar se a atualização decorreu sem problemas.

Por fim, atualizaremos a versão da imagem do Server CE/Server Pro para a nossa versão de destino e recriaremos todos os serviços usando o `bin/up -d` comando.

**Exemplo: Atualizar o MongoDB de `7.0` para `8.0` (utilizadores do Toolkit)**

Comece por garantir que está a executar o MongoDB `7.0` usando os `mongod --version` comandos acima.

De acordo com as [instruções de atualização](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set), o único requisito é ter `featureCompatibilityVersion` definido para `7.0`. Fazemo-lo abrindo um shell do MongoDB e executando o comando `db.adminCommand({ setFeatureCompatibilityVersion: "7.0", confirm: true })`. Note que isto agora requer um `confirm: true` parâmetro adicional.

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

Depois, iremos parar as instâncias do Server CE/Server Pro e do MongoDB usando o `bin/stop` comando, definir `MONGO_VERSION=8.0` em `config/overleaf.rc`, e depois reiniciar o `mongo` serviço usando `bin/up mongo`) para verificar se a atualização decorreu sem problemas.

Por fim, atualizaremos a versão da imagem do Server CE/Server Pro para a nossa versão de destino e recriaremos todos os serviços usando o `bin/up -d` comando.

#### Comandos equivalentes para utilizadores do docker compose

Para os utilizadores do docker compose, os comandos equivalentes são:

* `docker compose exec mongo mongod --version` para mostrar a versão do mongo
* `docker compose exec mongo mongosh` para iniciar um shell do mongo para comandos de administração
* `docker compose stop` comando para parar o servidor
* Edite o [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) ficheiro para usar `image: mongo:6.0` para atualizar a versão do mongo
* `docker compose up mongo` para reiniciar o serviço do mongo e verificar se a atualização decorreu sem problemas
* Edite o [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) ficheiro para usar `image: sharelatex:VERSION` para atualizar a versão da imagem
* `docker compose up` para recriar todos os serviços.

### Criar uma função personalizada

Na versão `5.5.1`, introduzimos uma verificação de arranque para validar a versão de compatibilidade de funcionalidades do MongoDB. Se a sua base de dados MongoDB usar autenticação (por exemplo, autenticação básica), o `sharelatex` contentor pode não arrancar, apresentando um erro de permissão "*não autorizado em admin para executar o comando*".

Para resolver isto, pode criar uma nova função no MongoDB e atribuí-la à conta de utilizador usada para aceder à base de dados, seguindo as instruções abaixo, ou definir `ALLOW_MONGO_ADMIN_CHECK_FAILURES=true` para permitir que a verificação falhe sem impedir o arranque da implementação.

{% hint style="success" %}
Esta nova função **apenas** concede permissão para ler parâmetros do servidor MongoDB ao nível do cluster e pode ser reutilizada para fins de monitorização,
{% endhint %}

{% code overflow="wrap" %}

```bash
# Utilizadores do Toolkit
$ bin/docker-compose exec -it mongo mongosh -u {{YOUR-ADMIN-USERNAME}} -p

# Mude para a base de dados "admin" usando
overleaf [direct: primary] sharelatex> use admin
mudado para a base de dados admin
overleaf [direct: primary] admin> 

# Crie uma nova função com permissão para usar "getParamter". Copie e cole a função abaixo no shell e prima a tecla Enter

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

# Volte para a base de dados "sharelatex" 
use sharelatex
mudado para a base de dados sharelatex
overleaf [direct: primary] sharelatex> 

# Atribua a nova função "clusterParameterReader" ao seu utilizador da base de dados copiando e colando a função abaixo no shell e premindo a tecla Enter 
db.grantRolesToUser(
  "{{YOUR-DATABASE-USER}}",
  [
    { role: "clusterParameterReader", db: "admin" }
  ]
);

# Escreva exit e depois prima Enter para sair do shell do MongoDB
# Execute bin/up -d para iniciar a pilha de implementação
$ 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/pt/manutencao/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.
