Aller au contenu
colis

Fournisseur de stockage

colis avec Cloudflare R2

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

createBucket()
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

Cloudflare R2

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.

En ligne de commande

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.

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

À savoir

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.

Vous envoyez. Ils valident. Vous le savez.

Votre stockage, une page de livraison à votre nom, un webhook à chaque étape. Rien d’hébergé chez un tiers.