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

# S3

<Info>
  Ce document décrit la configuration de S3 dans Server CE et Ayakaleaf Pro. Un [guide distinct](/fr/on-premises/maintenance/s3-migration) explique comment migrer des données existantes vers un stockage compatible S3.
</Info>

<Warning>
  Si vous déployez Ayakaleaf Pro avec le stockage [s3.md](/fr/on-premises/configuration/overleaf-toolkit/s3 "mention") activé, les données stockées dans S3 sont-elles chiffrées ?

  *<strong>Non.</strong>* Les données ne sont pas chiffrées. Tous les fragments d'historique, fichiers de modèles, PDF et autres fichiers sont stockés en clair. Si vous utilisez un fournisseur de stockage S3 externe tiers, soyez très attentif à la sécurité et à la confidentialité des données.
</Warning>

## Quand envisager S3 pour le stockage des données

Pour les instances de moins de 1000 utilisateurs, nous recommandons d'utiliser un stockage sur disque local avec des [sauvegardes cohérentes](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) régulières.

Pour les instances plus importantes, de plus de 1000 utilisateurs, qui atteignent les limites de leur stockage local (taille ou débit), nous recommandons d'utiliser un backend de stockage objet compatible S3 plutôt que d'autres solutions de stockage réseau comme NFS.

## Options de stockage objet compatible S3

Voici les options de stockage objet compatible S3 les plus populaires :

* [AWS S3](https://aws.amazon.com/s3/), service géré ; nous vous conseillons de choisir AWS S3 si vous exécutez Overleaf CE/Server Pro sur AWS
* [MINIO](https://min.io/), auto-hébergé
* [Ceph](https://ceph.io/en/), auto-hébergé
* D'autres hébergeurs proposent également une forme de stockage objet géré compatible S3 ; si vous exécutez déjà Overleaf CE/Server Pro chez un tel hébergeur, vous préférerez peut-être l'utiliser plutôt que de gérer votre propre solution.

## Latence : points à prendre en compte dans le choix d'un stockage objet compatible S3

La latence entre l'instance Server CE/Server Pro et votre stockage objet compatible S3 contribue fortement à la durée de la migration. La latence a également un impact sur les performances d'envoi de fichiers dans Server CE/Server Pro, et des téléchargements lents peuvent aussi fortement allonger les temps de compilation des PDF. Nous vous conseillons de réduire au minimum la distance géographique entre votre instance Server CE/Server Pro et le stockage objet compatible S3. Dans un environnement géré, cela signifie provisionner un bucket dans la même région ; pour une solution sur site, cela signifie exécuter les deux sur le même campus.

## Configuration de S3

Il nous faut quatre « buckets » et deux comptes utilisateurs aux droits restreints. `overleaf-user-files` et `OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME` ne sont nécessaires qu'avant la v6.

<Warning>
  Les buckets ne doivent **pas** être accessibles publiquement
</Warning>

<div style={{ overflowX: "auto" }}><table style={{ display: "table", width: "100%" }}><thead><tr><th width="279" /><th width="152" /><th width="97" /><th /></tr></thead><tbody><tr><td>Bucket</td><td>Usage</td><td>Service</td><td>Auparavant dans `/var/lib/overleaf/data`</td></tr><tr><td>`overleaf-user-files`</td><td>fichiers utilisateur des projets</td><td>filestore</td><td>`user_files`</td></tr><tr><td>`overleaf-template-files`</td><td>fichiers de modèles</td><td>filestore</td><td>`template_files`</td></tr><tr><td>`overleaf-project-blobs`</td><td>blobs de l'historique des projets</td><td>history et filestore en lecture seule</td><td>`history/overleaf-project-blobs`</td></tr><tr><td>`overleaf-chunks`</td><td>fragments d'historique</td><td>history</td><td>`history/overleaf-chunks`</td></tr></tbody></table></div>

Vous pouvez vouloir ou devoir choisir un autre nom ; veillez alors à utiliser vos buckets personnalisés dans toutes les commandes.

Les éléments suivants utilisent des valeurs fictives à la place des identifiants réels :

<div style={{ overflowX: "auto" }}><table style={{ display: "table", width: "100%" }}><thead><tr><th width="431">Variable d'environnement</th><th>Description</th></tr></thead><tbody><tr><td>`OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID`</td><td>La clé d'accès/le nom d'utilisateur de l'utilisateur restreint du service filestore.</td></tr><tr><td>`OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY`</td><td>La clé secrète/le mot de passe de l'utilisateur restreint du service filestore.</td></tr><tr><td>`OVERLEAF_HISTORY_S3_ACCESS_KEY_ID`</td><td>La clé d'accès/le nom d'utilisateur de l'utilisateur restreint du service history.</td></tr><tr><td>`OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY`</td><td>La clé secrète/le mot de passe de l'utilisateur restreint du service history.</td></tr></tbody></table></div>

Server CE et Server Pro n'ont besoin que d'un petit ensemble de permissions sur chaque bucket :

* créer un objet
* lire un objet
* supprimer un objet
* lister le bucket

### Politiques d'accès

Voici à quoi pourrait ressembler une politique pour l'utilisateur filestore :

```json theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-user-files"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-user-files/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-template-files"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-template-files/*"
    }
  ]
}
```

Voici à quoi pourrait ressembler une politique pour l'utilisateur history :

```json theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::overleaf-chunks"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::overleaf-chunks/*"
    }
  ]
}
```

### Aperçu des variables

#### Avec AWS S3

```bash theme={null}
# Enable S3 backend for filestore
OVERLEAF_FILESTORE_BACKEND=s3

# Bucket name for project files
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# Bucket name for template files
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# Key for filestore user
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Secret for filestore user
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# Bucket region you picked when creating the buckets.
OVERLEAF_FILESTORE_S3_REGION=""

# Enable S3 backend for history
OVERLEAF_HISTORY_BACKEND=s3

# Bucket name for project history blobs
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# Bucket name for history chunks
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# Key for history user
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# Secret for history user
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# Bucket region you picked when creating the buckets.
OVERLEAF_HISTORY_S3_REGION=""
```

#### Avec une option auto-hébergée

```bash theme={null}
# Enable S3 backend for filestore
OVERLEAF_FILESTORE_BACKEND=s3

# Bucket name for project files
OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files

# Bucket name for template files
OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files

# Key for filestore user
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...

# Secret for filestore user
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...

# S3 provider endpoint
OVERLEAF_FILESTORE_S3_ENDPOINT=http://10.10.10.10:9000

# Path style addressing of buckets. Most likely you need to set this to "true".
OVERLEAF_FILESTORE_S3_PATH_STYLE="true"

# Bucket region. Most likely you do not need to configure this.
OVERLEAF_FILESTORE_S3_REGION=""

# Enable S3 backend for history
OVERLEAF_HISTORY_BACKEND=s3

# Bucket name for project history blobs
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs

# Bucket name for history chunks
OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks

# Key for history user
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...

# Secret for history user
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...

# S3 provider endpoint
OVERLEAF_HISTORY_S3_ENDPOINT=http://10.10.10.10:9000

# Path style addressing of buckets. Most likely you need to set this to "true".
OVERLEAF_HISTORY_S3_PATH_STYLE="true"

# Bucket region. Most likely you do not need to configure this.
OVERLEAF_HISTORY_S3_REGION=""
```

### Configuration de MINIO

<Info>
  `MINIO_ROOT_USER` et `MINIO_ROOT_PASSWORD` sont les identifiants root de l'instance MINIO.
</Info>

Veuillez suivre la [documentation officielle](https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart) pour obtenir une copie de `mc`.

```bash theme={null}
mc alias set s3 http://10.10.10.10:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD

# Put the contents of the policies from the previous section in the
# respective json file policy-filestore.json and policy-history.json.

# Reminder: Replace the bucket names and credentials accordingly.

# filestore buckets, user and policy
mc mb --ignore-existing s3/overleaf-user-files
mc mb --ignore-existing s3/overleaf-template-files
mc admin user add s3 \
  OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
  OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
mc admin policy create s3 overleaf-filestore policy-filestore.json
mc admin policy attach s3 overleaf-filestore \
  --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID

# history buckets, user and policy
mc mb --ignore-existing s3/overleaf-project-blobs
mc mb --ignore-existing s3/overleaf-chunks
mc admin user add s3 \
  OVERLEAF_HISTORY_S3_ACCESS_KEY_ID \
  OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY
mc admin policy create s3 overleaf-history policy-history.json
mc admin policy attach s3 overleaf-history \
  --user=OVERLEAF_HISTORY_S3_ACCESS_KEY_ID
```


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