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

# Migration vers S3

## Migration S3

{% hint style="info" %}
Ces instructions concernent la version v5.x et les suivantes. Si vous suivez ce guide pour une version antérieure, veuillez utiliser `sharelatex` au lieu de `overleaf` dans les noms de chemin et `SHARELATEX_` préfixe au lieu de `OVERLEAF_` pour les variables d’environnement.
{% endhint %}

{% hint style="warning" %}
Clients Server Pro : veuillez contacter le support avant de migrer vos données vers S3.
{% endhint %}

{% hint style="success" %}
**Nous serions ravis d’avoir de vos nouvelles !** 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 à [`support@overleaf.com`](mailto:support@overleaf.com) .
{% endhint %}

Ce guide vous accompagnera dans la migration du stockage sur disque vers un stockage d’objets compatible S3. Il fait référence aux sections du document d’introduction sur la [Configuration S3](/on-premises/fr/configuration/overleaf-toolkit/s3.md).

### Exigences

* Un stockage d’objets compatible S3 avec lequel communiquer, voir [S3](/on-premises/fr/configuration/overleaf-toolkit/s3.md#s3-setup) pour les options
* De l’espace disque libre pour migrer les données existantes, soit environ la taille actuelle sur disque
* Une fenêtre de maintenance pour effectuer la migration proprement dite
* Une sauvegarde complète, y compris la config, pour permettre une restauration à partir de celle-ci

### Estimer la taille disque nécessaire pour la migration

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

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

Si vous ne disposez pas de suffisamment d’espace disque sur le serveur actuel, essayez de lui attacher un autre disque.

{% hint style="info" %}
Les répertoires d’historique ont déjà la bonne structure. Vous pouvez téléverser directement depuis le dossier source monté en bind, ce qui ne nécessite pas d’espace disque supplémentaire.
{% endhint %}

### Étapes de migration

#### Étape 0 : arrêt de l’instance

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

Veuillez consulter 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 des répertoires pour le stockage local dans filestore est `<project-id>_<file-id>` et la structure des répertoires dans S3 est `<project-id>/<file-id>`.

Ci-dessous, `/srv/overleaf-s3-migration` est utilisé pour stocker les fichiers dans la nouvelle structure de répertoires.

Nous pouvons faire appel à `tar` pour réécrire la structure :

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

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

Selon votre préférence, vous pouvez utiliser le client S3 minio mc ou aws cli pour téléverser les fichiers vers votre stockage d’objets compatible S3.

**aws cli**

{% hint style="info" %}

* Ici, vous devez remplacer `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 `/var/lib/overleaf` bind-mount. Par défaut, il s’agit de `~/overleaf_data` dans un déploiement docker-compose.yml et `<toolkit-checkout>/data/overleaf` lors de l’utilisation du 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**

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

{% 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 %}

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

Ajoutez toutes les variables liées à S3 à votre configuration, comme détaillé dans la [Présentation des variables](/on-premises/fr/configuration/overleaf-toolkit/s3.md#overview-of-variables) section du guide d’installation [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3) .

Pour les déploiements Docker Compose, vous pouvez également supprimer le bind-mount du répertoire de données de la section volumes.

{% hint style="success" %}
Veuillez conserver le [bind-mount d’un disque de travail pour les fichiers éphémères](/on-premises/fr/assistance/troubleshooting.md#running-overleaf-with-an-nfs-filesystem) en place.
{% endhint %}

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

* peut prévisualiser les fichiers binaires dans l’éditeur
* peut compiler un PDF avec des images
* peut téléverser de nouveaux fichiers

### Retour 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 en utilisant une `transformation inverse`
4. Redémarrez l’instance avec l’ancienne configuration

{% code overflow="wrap" %}

```shell
# Lors de l’utilisation d’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

# Lors de l’utilisation de 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
# Écrire les fichiers dans le 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" %}
Le premier transform supprime le dossier de niveau supérieur. Le deuxième transform modifie la structure des répertoires pour en faire une structure plate. Les caractères génériques garantissent que seuls les fichiers sont extraits, et non leurs dossiers parents (projet).
{% 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://ayakaleaf-pro.ayaka.space/on-premises/fr/maintenance/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.
