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

# Migración a S3

## Migración a S3

<Info>
  Estas instrucciones son para la v5.x y posteriores. Si sigues esta guía para una versión anterior, usa `sharelatex` en lugar de `overleaf` en los nombres de ruta y el prefijo `SHARELATEX_` en lugar de `OVERLEAF_` para las variables de entorno. Para la v6 y posteriores, omite los comandos heredados de `user_files`.
</Info>

<Check>
  <strong>¡Nos encantaría saber de ti!</strong> Si quieres contarnos cuántos archivos migraste, su volumen total y cuánto tardó la migración, escribe a [`ayaka-notes@outlook.com`](mailto:support@overleaf.com).
</Check>

Esta guía te acompañará en la migración del almacenamiento en disco a un almacenamiento de objetos compatible con S3. Hace referencia a secciones del documento introductorio sobre la [configuración de S3](/es/on-premises/configuration/overleaf-toolkit/s3).

### Requisitos

* Un almacenamiento de objetos compatible con S3 con el que comunicarse; consulta [#s3-setup](/es/on-premises/configuration/overleaf-toolkit/s3#s3-setup "mention") para ver las opciones
* Espacio libre en disco para migrar los datos existentes, aproximadamente el tamaño actual en disco
* Una ventana de mantenimiento para realizar la migración propiamente dicha
* Una copia de seguridad completa, incluida la configuración, para poder restaurarla

### Estimar el espacio en disco necesario para la migración

Podemos usar `du` para calcular el uso actual del 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
```

Si no tienes suficiente espacio en disco disponible en el servidor actual, prueba a conectar otro disco al servidor.

<Info>
  Los directorios del historial ya tienen la estructura correcta. Puedes subirlos directamente desde la carpeta de origen montada (bind-mount), lo que no requiere espacio en disco adicional.
</Info>

### Pasos de la migración

#### Paso 0: detener la instancia

Debemos asegurarnos de que se migren todos los archivos de usuario y de plantillas. Lo mejor es detener la instancia para no perder archivos subidos recientemente.

Consulta nuestra guía sobre cómo realizar una copia de seguridad coherente para conocer el procedimiento de detención.

#### Paso 1: reescribir la estructura de directorios

Debemos reescribir la estructura de directorios de los archivos de proyecto para subirlos a S3. La estructura de directorios del almacenamiento local en filestore es `<project-id>_<file-id>` y la estructura de directorios en S3 es `<project-id>/<file-id>`.

A continuación, se usa `/srv/overleaf-s3-migration` para almacenar los archivos con la nueva estructura de directorios. Sustituye `/srv/overleaf-bind-mount` por el directorio del host montado en `/var/lib/overleaf`. Ejecuta los comandos de copia en el host con permisos de lectura y escritura sobre estos directorios; el contenedor permanece detenido.

Podemos usar `tar` para reescribir la estructura:

```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
```

#### Paso 2: subir los archivos

Según tus preferencias, puedes usar el cliente S3 minio mc o la aws cli para subir los archivos a tu almacenamiento de objetos compatible con S3.

**aws cli**

<Info>
  * Aquí debes sustituir `overleaf-user-files`, `overleaf-template-files`, `overleaf-project-blobs` y `overleaf-chunks` por los nombres de tus buckets de S3.
  * Sustituye también `/srv/overleaf-bind-mount` por la ruta local del bind-mount de `/var/lib/overleaf`. De forma predeterminada, es `~/overleaf_data` en un despliegue con docker-compose.yml y `<toolkit-checkout>/data/overleaf` al usar el 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**

Aquí usamos el alias de servidor "s3"; es posible que tú hayas elegido otro nombre.

```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
```

#### Paso 3: iniciar la instancia apuntando a S3

Añade todas las variables relacionadas con S3 a tu configuración, tal como se detalla en la sección [Resumen de variables](/es/on-premises/configuration/overleaf-toolkit/s3#overview-of-variables) de la guía de configuración de [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3).

Mantén el bind-mount del directorio de datos: también puede contener claves de cifrado de Zotero o Mendeley que no se migran a S3.

<Check>
  Mantén el [bind-mount de un disco temporal para archivos efímeros](/es/on-premises/support/troubleshooting#running-overleaf-with-an-nfs-filesystem).
</Check>

Ahora puedes iniciar la instancia y validar la migración:

* se pueden previsualizar archivos binarios en el editor
* se puede compilar un PDF con imágenes
* se pueden subir archivos nuevos

### Revertir la migración

Puedes revertir la migración de forma ordenada invirtiendo los pasos:

1. Detén la instancia
2. Vuelve a reflejar los archivos invirtiendo el orden de origen/destino
3. Vuelve a escribir los archivos nuevos en el directorio local usando una `transform` inversa
4. Reinicia la instancia con la configuración anterior

```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>
  La primera transformación elimina la carpeta de nivel superior. La segunda transformación cambia la estructura de directorios a una estructura plana. Los comodines garantizan que solo se extraigan los archivos, no sus carpetas padre (de proyecto).
</Info>


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