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

# Dados e cópias de segurança

Por vezes precisamos de alterar o esquema dos dados na base de dados à medida que evoluímos o Overleaf; scripts de migração são usados para automatizar este processo. Eles já 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 damos garantias sobre 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 tenham **não** ainda não sido executadas serão executadas automaticamente; isto pode demorar algum tempo dependendo do tamanho do seu conjunto de dados; acompanhar os logs dar-lhe-á o progresso. Para mais informações, consulte o nosso [Registos](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging) documentação.
{% endhint %}

### Armazenamento de dados

O Overleaf Community Edition e o Server Pro armazenam 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 uma cache de alto desempenho para dados em trânsito, armazenando principalmente informações relacionadas com edições de projetos e colaboração.
* **Sistema de ficheiros do Overleaf:** armazena ficheiros de projeto não editáveis (incluindo imagens) e também atua como uma 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 projeto e dados completos do histórico do projeto, 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.

### Efetuar 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 produzam novos dados enquanto o processo de cópia de segurança estiver em execução. Por isso, recomendamos agendar uma janela de manutenção durante a qual os utilizadores não devem conseguir 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. Começando com o Server Pro `3.5.0` o processo de encerramento automatiza o encerramento 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 do 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 sucesso** terá de iniciar o `sharelatex` contentor. Para tal, execute `bin/docker-compose start sharelatex` se estiver a executar uma implementação do Toolkit ou `docker compose start sharelatex` se estiver a executar o Docker Compose.

{% hint style="danger" %}

* As cópias de segurança devem ser armazenadas num servidor diferente daquele em que a sua instância Overleaf está a correr, idealmente numa localização completamente diferente.
* Replicar bases de dados em múltiplas 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 de utilizadores e projetos armazenados na base de dados.

### Dados do sistema de ficheiros do Overleaf

Para implementações do 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 poderá ser `data/sharelatex`.

Usar 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 sessões de utilizador e atualizações pendentes de documentos antes de serem descarregadas 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 **novos** instalações; os utilizadores existentes podem encontrar mais informações sobre como ativar AOF [aqui](/on-premises/pt/configuracao/overleaf-toolkit/redis.md#enabling-append-only-file-persistence).

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

### Migração de dados entre servidores

Na melhor das hipóteses, ainda não tem quaisquer dados valiosos na nova instância. Não გვაქვს um processo para fundir os dados das instâncias.

Assumindo que a nova instância ainda não tem dados, eis alguns passos que pode seguir. Em termos gerais, produzimos um tarball dos `mongo`, `redis` e `overleaf` volumes, copiamo-lo para o novo servidor e extraímo-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 se adeque

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

# Mover os novos dados, também os pode apagar
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 se adeque

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

# Mover os novos dados, também os pode apagar
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á precisar de 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 e as permissões dos ficheiros, o que é crucial ao restaurar a cópia de segurança.
{% endhint %}

### Pastas em detalhe

{% hint style="info" %}
As seguintes pastas têm dicas adicionais:

* (b) incluir nas cópias de segurança, melhor quando a instância está parada para garantir consistência
* (d) pode ser apagado
* (e) ficheiros efémeros, podem ser apagados 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 (synctex é usado para mapeamento de origem 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 foi movido para mapas simples em memória ou fazemos varrimento do disco)
      4. db.sqlite-wal (d)
         * não utilizado na versão mais recente, consulte db.sqlite
      5. output (e)
         * armazenamento do resultado da compilação LaTeX para servir ao cliente
      6. template\_files (b)
         * pré-visualizações de imagens do sistema de modelos (apenas Server Pro)
      7. user\_files (b)
         * ficheiros binários dos projetos
      8. history (b)
         * ficheiros completos do histórico do projeto
   3. tmp
      1. dumpFolder (e)
         * ficheiros temporários do tratamento de ficheiros zip
      2. uploads (e)
         * bufferização dos carregamentos de ficheiros (carregamento de ficheiro binário/novo projeto a partir de upload zip)
      3. projectHistories (e)
         * ficheiros temporários para migrações completas do histórico do projeto


---

# 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/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.
