> 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/s3-migration.md).

# Migração para S3

## Migração para S3

{% hint style="info" %}
Estas instruções são para a v5.x e posteriores. Se estiver a seguir este guia para uma versão anterior, utilize `sharelatex` em vez de `overleaf` nos nomes dos caminhos e `SHARELATEX_` o prefixo em vez de `OVERLEAF_` para variáveis de ambiente.
{% endhint %}

{% hint style="warning" %}
Clientes Server Pro: contacte o suporte antes de migrar os seus dados para o S3.
{% endhint %}

{% hint style="success" %}
**Gostaríamos muito de saber a sua opinião!** Se quiser partilhar connosco quantos ficheiros migrou, o volume total e quanto tempo a migração demorou, envie um e-mail para [`support@overleaf.com`](mailto:support@overleaf.com) .
{% endhint %}

Este guia irá guiá-lo pela migração do armazenamento em disco para um armazenamento de objetos compatível com S3. Faz referência a secções do documento introdutório sobre o [Configuração do S3](/on-premises/pt/configuracao/overleaf-toolkit/s3.md).

### Requisitos

* Um armazenamento de objetos compatível com S3 com o qual comunicar, veja [S3](/on-premises/pt/configuracao/overleaf-toolkit/s3.md#s3-setup) para opções
* Espaço livre em disco para migrar os dados existentes, cerca do tamanho atual em disco
* Uma janela de manutenção para realizar a migração propriamente dita
* Uma cópia de segurança completa, incluindo a configuração, para permitir a restauração a partir dela

### Estime o espaço em disco necessário para a migração

Podemos usar `du` para calcular a utilização atual do disco:

```shell
docker exec sharelatex \
  du --human-readable --max-depth=0 /var/lib/overleaf/data/user_files

docker exec sharelatex \
  du --human-readable --max-depth=0 /var/lib/overleaf/data/template_files
```

Caso não tenha espaço em disco suficiente disponível no servidor atual, tente ligar outro disco ao servidor.

{% hint style="info" %}
Os diretórios de histórico já têm a estrutura correta. Pode carregar diretamente a partir da pasta de origem montada por bind, o que não requer espaço em disco adicional.
{% endhint %}

### Passos da migração

#### Passo 0: desligue a instância

Precisamos de garantir que todos os ficheiros de utilizador/modelo serão migrados. É melhor desligar a instância para evitar perder ficheiros carregados recentemente.

Consulte o nosso guia sobre como realizar uma cópia de segurança consistente para o procedimento de encerramento.

#### Passo 1: reescrever a estrutura de diretórios

Precisamos de reescrever a estrutura de diretórios dos ficheiros do projeto para os carregar para o S3. A estrutura de diretórios para o armazenamento local no filestore é `<project-id>_<file-id>` e a estrutura de diretórios no S3 é `<project-id>/<file-id>`.

A seguir, `/srv/overleaf-s3-migration` é usado para guardar os ficheiros na nova estrutura de diretórios.

Podemos utilizar `tar` para reescrever a estrutura:

```shell
mkdir -p /srv/overleaf-s3-migration/user_files \
         /srv/overleaf-s3-migration/template_files
docker exec sharelatex \
  tar --create --directory /var/lib/overleaf/data/user_files . \
| tar --extract --directory /srv/overleaf-s3-migration/user_files \
  --transform=sx_x/x
docker exec sharelatex \
  tar --create --directory /var/lib/overleaf/data/template_files . \
| tar --extract --directory /srv/overleaf-s3-migration/template_files \
  --transform=sx_x/xg
```

#### Passo 2: carregue os ficheiros

Consoante a sua preferência, pode usar o cliente S3 minio mc ou o aws cli para carregar os ficheiros para o seu armazenamento de objetos compatível com S3.

**aws cli**

{% hint style="info" %}

* Aqui deve substituir `overleaf-user-files`, `overleaf-template-files`, `overleaf-project-blobs` e `overleaf-chunks` pelos nomes dos seus buckets S3.
* Substitua também `/srv/overleaf-bind-mount` pelo caminho local do `/var/lib/overleaf` bind-mount. Por predefinição, é `~/overleaf_data` numa implementação docker-compose.yml e `<toolkit-checkout>/data/overleaf` ao usar o Toolkit.
  {% endhint %}

{% code overflow="wrap" %}

```shell
aws s3 sync /srv/overleaf-s3-migration/user_files s3://overleaf-user-files
aws s3 sync /srv/overleaf-s3-migration/template_files s3://overleaf-template-files

aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3://overleaf-project-blobs
aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-chunks s3://overleaf-chunks
```

{% endcode %}

**minio mc**

Estamos a usar aqui o alias do servidor "s3"; pode ter escolhido outro nome.

{% code overflow="wrap" %}

```shell
mc mirror /srv/overleaf-s3-migration/user_files s3/overleaf-user-files
mc mirror /srv/overleaf-s3-migration/template_files s3/overleaf-template-files

mc mirror /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3/overleaf-project-blobs
mc mirror /srv/overleaf-bind-mount/data/history/overleaf-chunks s3/overleaf-chunks
```

{% endcode %}

#### Passo 3: inicie a instância apontando para o S3

Adicione todas as variáveis relacionadas com o S3 à sua configuração, conforme detalhado na [Visão geral das variáveis](/on-premises/pt/configuracao/overleaf-toolkit/s3.md#overview-of-variables) secção do [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3) guia de configuração.

Em implementações Docker Compose, também pode remover o bind-mount do diretório de dados da secção volumes.

{% hint style="success" %}
Mantenha o [bind-mount de um disco temporário para ficheiros efémeros](/on-premises/pt/suporte/troubleshooting.md#running-overleaf-with-an-nfs-filesystem) no lugar.
{% endhint %}

Agora pode iniciar a instância e validar a migração:

* pode pré-visualizar ficheiros binários no editor
* pode compilar um PDF com imagens
* pode carregar novos ficheiros

### Reverter

Pode reverter a migração de forma graciosa, invertendo os passos:

1. Desligue a instância
2. Espelhe de volta os ficheiros invertendo a sequência de origem/destino
3. Escreva novos ficheiros de volta no diretório local usando uma inversa `transformação`
4. Reinicie a instância com a configuração antiga

{% code overflow="wrap" %}

```shell
# Ao usar o aws cli
aws s3 sync s3://overleaf-user-files /srv/overleaf-s3-migration/user_files
aws s3 sync s3://overleaf-template-files /srv/overleaf-s3-migration/template_files
aws s3 sync s3://overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
aws s3 sync s3://overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks

# Ao usar o minio mc
mc mirror s3/overleaf-user-files /srv/overleaf-s3-migration/user_files
mc mirror s3/overleaf-template-files /srv/overleaf-s3-migration/template_files
mc mirror s3/overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
mc mirror s3/overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks
```

{% endcode %}

```shell
# Escreva ficheiros no Server CE/Server Pro local
tar --create --directory /srv/overleaf-s3-migration/user_files . \
| docker exec --interactive sharelatex \
    tar \
      --extract \
      --keep-old-files \
      --directory /var/lib/overleaf/data/user_files \
      --transform=sx./xx --transform=sx/x_x \
      --wildcards '*/*/*'

tar --create --directory /srv/overleaf-s3-migration/template_files . \
| docker exec --interactive sharelatex \
    tar \
      --extract \
      --keep-old-files \
      --directory /var/lib/overleaf/data/template_files \
      --transform=sx./xx --transform=sx/x_xg \
      --wildcards '*/*/*/*/pdf-converted-cache/*' \
      --wildcards '*/*/*/*/pdf' \
      --wildcards '*/*/*/*/zip'
```

{% hint style="info" %}
A primeira transformação remove a pasta de nível superior. A segunda transformação altera a estrutura de diretórios para uma estrutura plana. Os curingas garantem que apenas os ficheiros sejam extraídos, não as pastas pai (do projeto).
{% endhint %}


---

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