> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Migração para S3

## Migração para S3

<Info>
  Estas instruções se aplicam à v5.x e posteriores. Se você estiver seguindo este guia para uma versão anterior, use `sharelatex` em vez de `overleaf` nos nomes de caminhos e o prefixo `SHARELATEX_` em vez de `OVERLEAF_` nas variáveis de ambiente. Para a v6 e posteriores, ignore os comandos legados de `user_files`.
</Info>

<Check>
  <strong>Adoraríamos ouvir você!</strong> Se quiser compartilhar conosco quantos arquivos migrou, o volume total e quanto tempo a migração levou, envie um e-mail para [`ayaka-notes@outlook.com`](mailto:support@overleaf.com) .
</Check>

Este guia conduzirá você pela migração do armazenamento em disco para um armazenamento de objetos compatível com S3. Ele faz referência a seções do documento introdutório sobre a [configuração do S3](/pt/on-premises/configuration/overleaf-toolkit/s3).

### Requisitos

* Um armazenamento de objetos compatível com S3 com o qual se comunicar; veja [#s3-setup](/pt/on-premises/configuration/overleaf-toolkit/s3#s3-setup "mention") para as opções
* Espaço livre em disco para migrar os dados existentes, aproximadamente o tamanho atual em disco
* Uma janela de manutenção para realizar a migração propriamente dita
* Um backup completo, incluindo a configuração, para permitir a restauração a partir dele

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

Podemos usar `du` para calcular o uso atual do disco:

```shell theme={null}
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 haja espaço em disco suficiente no servidor atual, tente anexar outro disco ao servidor.

<Info>
  Os diretórios de histórico já possuem o layout correto. Você pode enviá-los diretamente da pasta de origem montada via bind mount, o que não exige espaço em disco adicional.
</Info>

### Etapas da migração

#### Etapa 0: desligar a instância

Precisamos garantir que todos os arquivos de usuários/modelos sejam migrados. O melhor é desligar a instância para não perder arquivos enviados recentemente.

Consulte nosso guia sobre como realizar um backup consistente para o procedimento de desligamento.

#### Etapa 1: reescrever o layout de diretórios

Precisamos reescrever o layout de diretórios dos arquivos de projeto para enviá-los ao S3. O layout de diretórios do armazenamento local no filestore é `<project-id>_<file-id>`, e o layout de diretórios no S3 é `<project-id>/<file-id>`.

A seguir, `/srv/overleaf-s3-migration` é usado para armazenar os arquivos no novo layout de diretórios. Substitua `/srv/overleaf-bind-mount` pelo diretório do host montado em `/var/lib/overleaf`. Execute os comandos de cópia no host, com permissão para ler e gravar nesses diretórios; o contêiner permanece parado.

Podemos usar o `tar` para reescrever o layout:

```shell theme={null}
mkdir -p /srv/overleaf-s3-migration/user_files \
         /srv/overleaf-s3-migration/template_files
tar --create --directory /srv/overleaf-bind-mount/data/user_files . \
| tar --extract --directory /srv/overleaf-s3-migration/user_files \
  --transform=sx_x/x
tar --create --directory /srv/overleaf-bind-mount/data/template_files . \
| tar --extract --directory /srv/overleaf-s3-migration/template_files \
  --transform=sx_x/xg
```

#### Etapa 2: enviar os arquivos

Conforme sua preferência, você pode usar o cliente S3 minio mc ou o aws cli para enviar os arquivos ao seu armazenamento de objetos compatível com S3.

**aws cli**

<Info>
  * Aqui você 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 bind mount de `/var/lib/overleaf`. Por padrão, é `~/overleaf_data` em uma implantação com docker-compose.yml e `<toolkit-checkout>/data/overleaf` ao usar o Toolkit.
</Info>

```shell wrap theme={null}
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
```

**minio mc**

Aqui usamos o alias de servidor "s3"; você pode ter escolhido outro nome.

```shell wrap theme={null}
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
```

#### Etapa 3: iniciar a instância apontando para o S3

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

Mantenha o bind mount do diretório de dados: ele também pode conter chaves de criptografia do Zotero ou do Mendeley que não são migradas para o S3.

<Check>
  Mantenha o [bind mount de um disco temporário para arquivos efêmeros](/pt/on-premises/support/troubleshooting#running-overleaf-with-an-nfs-filesystem).
</Check>

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

* é possível pré-visualizar arquivos binários no editor
* é possível compilar um PDF com imagens
* é possível enviar novos arquivos

### Reverter a migração

Você pode reverter a migração de forma segura invertendo as etapas:

1. Desligue a instância
2. Espelhe os arquivos de volta invertendo a ordem de origem/destino
3. Grave os novos arquivos de volta no diretório local usando um `transform` inverso
4. Reinicie a instância com a configuração antiga

```shell wrap theme={null}
# When using 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

# When using 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
```

```shell theme={null}
# Write files into local Server CE/Server Pro
tar --create --directory /srv/overleaf-s3-migration/user_files . \
| tar \
      --extract \
      --keep-old-files \
      --directory /srv/overleaf-bind-mount/data/user_files \
      --transform=sx./xx --transform=sx/x_x \
      --wildcards '*/*/*'

tar --create --directory /srv/overleaf-s3-migration/template_files . \
| tar \
      --extract \
      --keep-old-files \
      --directory /srv/overleaf-bind-mount/data/template_files \
      --transform=sx./xx --transform=sx/x_xg \
      --wildcards '*/*/*/*/pdf-converted-cache/*' \
      --wildcards '*/*/*/*/pdf' \
      --wildcards '*/*/*/*/zip'
```

<Info>
  O primeiro transform remove a pasta de nível superior. O segundo transform altera o layout de diretórios para um layout plano. Os curingas (wildcards) garantem que apenas arquivos sejam extraídos, e não suas pastas pai (de projeto).
</Info>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.