> 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/data-and-backups.md).

# Dados e cópias de segurança

Às vezes precisamos alterar o esquema dos dados na base de dados à medida que o Overleaf evolui; são usados scripts de migração para automatizar este processo. Estes terão sido executados em [overleaf.com](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit) primeiro, que é a maior instância do Overleaf no mundo, por isso a maioria das eventualidades já terá sido encontrada; no entanto, não garantimos os seus dados. Certifique-se de que cria uma **consistente** cópia de segurança dos seus dados **antes de** ao atualizar a sua instância.

{% hint style="info" %}
Ao atualizar para uma nova imagem Docker, quaisquer migrações que ainda **não** não tenham sido executadas serão executadas automaticamente; isto pode demorar algum tempo, dependendo do tamanho do seu conjunto de dados. Seguir os logs dar-lhe-á indicação do progresso. Para mais informações, consulte o nosso [Registo](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging) documentação.
{% endhint %}

### Armazenamento de dados

O Overleaf Community Edition e o Server Pro guardam os seus dados em três locais separados:

* **Base de dados MongoDB:** É aqui que residem os dados dos utilizadores e dos projetos.
* **Redis:** serve como cache de alto desempenho para dados em trânsito, armazenando principalmente informação relacionada com as edições de projetos e a colaboração.
* **Sistema de ficheiros do Overleaf:** armazena ficheiros de projeto não editáveis (incluindo imagens) e também funciona como cache temporária em disco durante as compilações dos projetos.

{% hint style="info" %}
Isto pode ser `~/sharelatex_data` ou `~/overleaf_data`, dependendo de quando a sua instância foi configurada.
{% endhint %}

{% hint style="success" %}
Para ficheiros de projetos e dados do histórico completo dos projetos, também suportamos backends de armazenamento compatíveis com S3.
{% endhint %}

Consulte Pastas em detalhe para mais informações sobre a disposição das pastas no disco.

### Realizar uma cópia de segurança consistente

Há três repositórios que precisam de ser incluídos ao fazer uma cópia de segurança consistente:

* MongoDB
* Redis
* Dados do sistema de ficheiros do Overleaf

Para produzir uma cópia de segurança consistente, é **obrigatório** impedir que os utilizadores criem novos dados enquanto o processo de cópia de segurança estiver em execução. Por isso, aconselhamos agendar uma janela de manutenção durante a qual os utilizadores não deverão poder aceder à instância nem editar os seus projetos.

Antes de iniciar o processo de cópia de segurança, terá de colocar a sua instância offline. A partir do Server Pro `3.5.0` o processo de encerramento automatiza o fecho do site e a desconexão dos utilizadores.

Para encerrar a sua instância, terá de executar `bin/docker-compose stop sharelatex` se estiver a executar uma implementação Toolkit ou `docker compose stop sharelatex` se estiver a executar o Docker Compose.

Assim que o `sharelatex` contentor tiver sido parado, pode iniciar o processo de cópia de segurança.

Assim que o processo de cópia de segurança tiver sido concluído **com êxito** terá de iniciar o `sharelatex` contentor. Para tal, execute `bin/docker-compose start sharelatex` se estiver a executar uma implementação Toolkit ou `docker compose start sharelatex` se estiver a executar o Docker Compose.

{% hint style="danger" %}

* As cópias de segurança devem ser guardadas num servidor separado daquele onde a sua instância do Overleaf está a correr, idealmente numa localização completamente diferente.
* Replicar bases de dados em várias instâncias MongoDB pode oferecer alguma redundância, mas não protege contra corrupção.
* Testar as suas cópias de segurança é a melhor forma de garantir que estão completas e funcionais.
  {% endhint %}

### MongoDB

O MongoDB inclui uma ferramenta de linha de comandos chamada [mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/) que pode ser usada para criar uma cópia de segurança dos dados dos utilizadores e dos projetos armazenados na base de dados.

### Dados do sistema de ficheiros do Overleaf

Nas implementações Toolkit, o caminho onde os seus ficheiros não editáveis são armazenados é especificado na `config/overleaf.rc` usando os `OVERLEAF_DATA_PATH` variável de ambiente, mas, dependendo de quando a sua instância foi criada, isto pode ser `data/sharelatex`.

Ao utilizar uma ferramenta como **rsync** para copiar recursivamente este diretório é necessário para garantir que é criada uma cópia de segurança completa.

### Redis

O Redis armazena as sessões dos utilizadores e as atualizações pendentes dos documentos antes de serem enviadas para o MongoDB.

A persistência Append Only File (AOF) é a configuração recomendada para a persistência do Redis.

Os utilizadores do Toolkit têm a persistência AOF ativada por predefinição para **novas** instalações; os utilizadores existentes podem encontrar mais informações sobre como ativar o AOF [aqui](/on-premises/pt/configuracao/overleaf-toolkit/redis.md#enabling-append-only-file-persistence).

Se decidir continuar a usar instantâneos RDB juntamente com a persistência AOF, pode copiar o ficheiro RDB para uma localização segura como cópia de segurança.

### Migrar dados entre servidores

No melhor dos casos, ainda não tem quaisquer dados valiosos na nova instância. Não dispomos de um processo para fundir os dados de instâncias.

Assumindo que a nova instância ainda não tem dados, aqui estão alguns passos que pode seguir. Em termos gerais, produzimos um tarball dos `mongo`, `redis` e `overleaf` volumes, copiamo-lo para o novo servidor e descompactamo-lo novamente lá.

#### Toolkit

```bash
# Encerrar corretamente a instância antiga
old-server$ bin/stop

# Criar o tarball
old-server$ tar --create --file backup-old-server.tar config/ data/

# Copiar o ficheiro backup-old-server.tar do old-server para o
# new-server usando qualquer método que seja adequado

# Encerrar corretamente a nova instância (se já tiver sido iniciada)
new-server$ bin/stop

# Mover os novos dados, também os pode eliminar
new-server$ mkdir backup-new-server
new-server$ mv config/ data/ backup-new-server/

# Preencher novamente o diretório config/data
new-server$ tar --extract --file backup-old-server.tar

# Iniciar contentores
new-server$ bin/up
```

#### Docker Compose

```bash
# Encerrar corretamente a instância antiga
old-server$ docker stop sharelatex
old-server$ docker stop mongo redis

# Criar o tarball
old-server$ tar --create --file backup-old-server.tar ~/OVERLEAF_data ~/mongo_data ~/redis_data

# Copiar o ficheiro backup-old-server.tar do old-server para
# o new-server usando qualquer método que seja adequado

# Encerrar corretamente a nova instância (se já tiver sido iniciada)
new-server$ docker stop sharelatex
new-server$ docker stop mongo redis

# Mover os novos dados, também os pode eliminar
new-server$ mkdir backup-new-server
new-server$ mv ~/OVERLEAF_data ~/mongo_data ~/redis_data backup-new-server/

# Preencher novamente os diretórios de dados
new-server$ tar --extract --file backup-old-server.tar

# Iniciar contentores
new-server$ docker start mongo redis
new-server$ docker start sharelatex
```

Dependendo do seu **docker-compose.yml** ficheiro, poderá ser necessário ajustar os caminhos dos `mongo`, `redis`, `overleaf` volumes.

{% hint style="info" %}
Quando executado como utilizador root (ou com sudo), o tar manterá o proprietário/grupo do ficheiro e as permissões, o que é crucial ao restaurar a cópia de segurança.
{% endhint %}

### Pastas em detalhe

{% hint style="info" %}
As seguintes pastas têm indicações adicionais:

* (b) incluir nas cópias de segurança, ideal quando a instância está parada para garantir consistência
* (d) pode ser eliminado
* (e) ficheiros efémeros, podem ser eliminados quando a instância está parada
  {% endhint %}

1. `~/mongo_data` (b)
   * diretório de dados do MongoDB
2. `~/redis_data` (b)
   * diretório de dados da base de dados Redis
3. `~/overleaf_data`
   1. bin
      1. synctex (d)
         * não utilizado na versão mais recente; anteriormente era usado um binário synctex personalizado (o synctex é usado para mapeamento entre ficheiros .tex e o pdf)
   2. data
      1. cache (e)
         * cache de ficheiros binários para compilações
      2. compilações (e)
         * a compilação LaTeX acontece aqui
      3. db.sqlite (d)
         * não utilizado na versão mais recente; anteriormente armazenava detalhes da cache do clsi (ou foram movidos para mapas simples em memória ou fazemos uma análise do disco)
      4. db.sqlite-wal (d)
         * não utilizado na versão mais recente; ver db.sqlite
      5. saída (e)
         * armazenamento da saída da compilação LaTeX para servir ao cliente
      6. ficheiros de modelo (b)
         * pré-visualizações de imagens do sistema de modelos (apenas Server Pro)
      7. ficheiros do utilizador (b)
         * ficheiros binários dos projetos
      8. histórico (b)
         * ficheiros do histórico completo dos projetos
   3. tmp
      1. dumpFolder (e)
         * ficheiros temporários resultantes do processamento de ficheiros zip
      2. envios (e)
         * armazenamento intermédio dos carregamentos de ficheiros (carregamento de ficheiro binário/novo projeto a partir de zip)
      3. históricos de projetos (e)
         * ficheiros temporários para migrações do histórico completo dos projetos


---

# 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/data-and-backups.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.
