# colis avec Cloudflare R2

> Livrez vos fichiers à vos clients depuis un bucket Cloudflare R2 avec colis : la configuration createBucket(), le fichier de départ de la CLI, et ce qu’il faut savoir sur ce fournisseur.

Canonical: https://colis-site.vercel.app/providers/cloudflare-r2 · Markdown: https://colis-site.vercel.app/providers/cloudflare-r2.md · English: https://colis-site.vercel.app/en/providers/cloudflare-r2

Compatible S3, la région est toujours "auto", et le tableau de bord accepte la règle CORS en JSON.

**createBucket()**
```ts
import { createBucket } from '@colis/core'

const store = createBucket({
  bucket: 'transfers',
  endpoint: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
  credentials: {
    accessKeyId: process.env.R2_ACCESS_KEY_ID!,
    secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
  },
  publicUrl: 'https://cdn.example.com', // optional: your R2 custom domain
})
```

## Pourquoi celui-ci
R2 parle l’API S3 et ignore la région. C’est le fournisseur contre lequel le README de la page de livraison est écrit : un bucket, un jeton d’API limité à celui-ci, cinq variables d’environnement, et une règle CORS pour les gros fichiers, collée dans les réglages du bucket.

## Un fichier de départ, et ce qu’il reste à faire.
init écrit le fichier avec des références ${VAR} plutôt que des secrets : il est fait pour être versionné ; le fichier d’environnement qu’il désigne, non.

```sh
colis init --provider r2 --bucket transfers
```
**colis.config.json**
```json
{
  "bucket": "transfers",
  "region": "auto",
  "endpoint": "https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com",
  "prefix": "transfers",
  "expiresIn": "24h",
  "envFile": ".env",
  "credentials": {
    "accessKeyId": "${R2_ACCESS_KEY_ID}",
    "secretAccessKey": "${R2_SECRET_ACCESS_KEY}"
  }
}
```

### Ensuite
1. Mettez R2_ACCOUNT_ID, R2_ACCESS_KEY_ID et R2_SECRET_ACCESS_KEY dans .env, et gardez-le hors de git.
2. Le jeton d’API a besoin de Object Read & Write sur ce bucket, et de rien d’autre.
3. Ajoutez une règle de cycle de vie qui supprime les objets du préfixe après un jour ou deux.
4. Lancez `colis verifier`. Il effectue les opérations dont colis a besoin et rapporte ce qui s’est passé.

## Notes sur R2.
- **region: "auto"** — R2 ignore la région et le SDK en exige une. Définir un endpoint fait que colis choisit "auto" par défaut : il n’y a rien à écrire.
- **Gros fichiers** — Les gros fichiers vont du navigateur au bucket, par morceaux. Le bucket a besoin d’une règle CORS qui autorise PUT depuis votre page de livraison et expose ETag ; sans elle, les petits fichiers passent quand même.
- **Nettoyage des expirés** — L’expiration empêche un colis d’être remis ; seule une règle de cycle de vie supprime l’objet. Donnez au préfixe une règle qui expire les objets après un jour ou deux, et colis verifier passe au vert.

[Le guide complet](https://colis-docs.vercel.app/docs/stockages#cloudflare-r2)
