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

# Migration vers S3

## Migration vers S3

<Info>
  Ces instructions concernent la v5.x et les versions ultérieures. Si vous suivez ce guide pour une version antérieure, utilisez `sharelatex` au lieu de `overleaf` dans les noms de chemins et le préfixe `SHARELATEX_` au lieu de `OVERLEAF_` pour les variables d'environnement. Pour la v6 et les versions ultérieures, ignorez les anciennes commandes `user_files`.
</Info>

<Check>
  <strong>Nous aimerions avoir de vos nouvelles !</strong> Si vous souhaitez nous indiquer combien de fichiers vous avez migrés, leur volume total et la durée de la migration, envoyez un e-mail à [`ayaka-notes@outlook.com`](mailto:support@overleaf.com).
</Check>

Ce guide vous accompagne dans la migration d'un stockage sur disque vers un stockage objet compatible S3. Il fait référence à des sections du document d'introduction sur la [configuration S3](/fr/on-premises/configuration/overleaf-toolkit/s3).

### Prérequis

* Un stockage objet compatible S3 avec lequel communiquer ; voir [#s3-setup](/fr/on-premises/configuration/overleaf-toolkit/s3#s3-setup "mention") pour les options
* De l'espace disque libre pour migrer les données existantes, environ la taille actuelle sur disque
* Une fenêtre de maintenance pour effectuer la migration proprement dite
* Une sauvegarde complète, configuration comprise, permettant une restauration

### Estimer l'espace disque nécessaire à la migration

Nous pouvons utiliser `du` pour calculer l'utilisation actuelle du disque :

```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 vous ne disposez pas de suffisamment d'espace disque sur le serveur actuel, essayez d'y attacher un disque supplémentaire.

<Info>
  Les répertoires d'historique ont déjà la bonne structure. Vous pouvez les téléverser directement depuis le dossier source monté (bind-mount), ce qui ne nécessite aucun espace disque supplémentaire.
</Info>

### Étapes de migration

#### Étape 0 : arrêter l'instance

Nous devons nous assurer que tous les fichiers utilisateurs et de modèles seront migrés. Il est préférable d'arrêter l'instance pour éviter de manquer des fichiers nouvellement téléversés.

Consultez notre guide sur la réalisation d'une sauvegarde cohérente pour la procédure d'arrêt.

#### Étape 1 : réécrire la structure des répertoires

Nous devons réécrire la structure des répertoires des fichiers de projet pour les téléverser vers S3. La structure de répertoires du stockage local dans le filestore est `<project-id>_<file-id>` et celle dans S3 est `<project-id>/<file-id>`.

Dans la suite, `/srv/overleaf-s3-migration` est utilisé pour stocker les fichiers dans la nouvelle structure de répertoires. Remplacez `/srv/overleaf-bind-mount` par le répertoire de l'hôte monté sur `/var/lib/overleaf`. Exécutez les commandes de copie sur l'hôte avec les permissions nécessaires pour lire et écrire dans ces répertoires ; le conteneur reste arrêté.

Nous pouvons utiliser `tar` pour réécrire la structure :

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

#### Étape 2 : téléverser les fichiers

Selon vos préférences, vous pouvez utiliser le client S3 minio mc ou l'aws cli pour téléverser les fichiers vers votre stockage objet compatible S3.

**aws cli**

<Info>
  * Remplacez ici `overleaf-user-files`, `overleaf-template-files`, `overleaf-project-blobs` et `overleaf-chunks` par les noms de vos buckets S3.
  * Remplacez également `/srv/overleaf-bind-mount` par le chemin local du bind-mount `/var/lib/overleaf`. Par défaut, il s'agit de `~/overleaf_data` dans un déploiement docker-compose.yml et de `<toolkit-checkout>/data/overleaf` avec le 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**

Nous utilisons ici l'alias de serveur « s3 » ; vous avez peut-être choisi un autre nom.

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

#### Étape 3 : démarrer l'instance en la pointant vers S3

Ajoutez toutes les variables liées à S3 à votre configuration, comme indiqué dans la section [Aperçu des variables](/fr/on-premises/configuration/overleaf-toolkit/s3#overview-of-variables) du guide de configuration [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3).

Conservez le bind-mount du répertoire de données : il peut également contenir des clés de chiffrement Zotero ou Mendeley qui ne sont pas migrées vers S3.

<Check>
  Conservez le [bind-mount d'un disque temporaire pour les fichiers éphémères](/fr/on-premises/support/troubleshooting#running-overleaf-with-an-nfs-filesystem).
</Check>

Vous pouvez maintenant démarrer l'instance et valider la migration :

* prévisualisation des fichiers binaires dans l'éditeur
* compilation d'un PDF contenant des images
* téléversement de nouveaux fichiers

### Revenir en arrière

Vous pouvez annuler la migration proprement en inversant les étapes :

1. Arrêtez l'instance
2. Recopiez les fichiers en inversant l'ordre source/destination
3. Réécrivez les nouveaux fichiers dans le répertoire local à l'aide d'un `transform` inverse
4. Redémarrez l'instance avec l'ancienne configuration

```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 première transformation supprime le dossier de premier niveau. La seconde transforme la structure de répertoires en structure plate. Les jokers (wildcards) garantissent que seuls les fichiers sont extraits, et non leurs dossiers parents (de projet).
</Info>


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