Stockages
AWS S3, Cloudflare R2, MinIO, Scaleway, Wasabi : le point d’accès est la seule différence. Les réglages de chacun pour la page de livraison, la CLI et la bibliothèque.
colis parle S3. Tout stockage compatible convient ; le point d’accès (endpoint) est la seule
différence. Quand il est défini, deux valeurs par défaut suivent :
regiondevient"auto", la convention des fournisseurs qui ignorent la région mais dont le SDK en exige une ;forcePathStyledevienttrue:https://endpoint/bucket/keyplutôt quehttps://bucket.endpoint/key. Les passerelles auto-hébergées l’exigent, les fournisseurs gérés l’acceptent.
Les deux restent modifiables. Dans chaque cas, donnez aux clés la lecture et l’écriture sur ce seul bucket, rien d’autre : des clés capables de lister le bucket permettraient d’énumérer les codes.
Cloudflare R2
Pas de frais de sortie, ce qui compte quand vos clients téléchargent des fichiers lourds. Créez le bucket (R2 → Create bucket) et un jeton d’API Object Read & Write limité à ce bucket. L’identifiant de compte est le début du point d’accès S3 que R2 affiche.
Pour la page de livraison :
COLIS_BUCKET=livraisons
COLIS_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
COLIS_REGION=auto
AWS_ACCESS_KEY_ID=…
AWS_SECRET_ACCESS_KEY=…Pour la CLI en mode bucket, colis init --provider r2 --bucket livraisons écrit le même réglage, avec
les secrets lus depuis .env (R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY).
Dans votre code :
import { createBucket } from '@colis/core'
const store = createBucket({
bucket: 'livraisons',
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!,
},
})Les règles de cycle de vie et CORS se règlent dans R2 → votre bucket → Settings. R2 abandonne de lui-même les envois multipart incomplets après sept jours.
AWS S3
Laissez COLIS_ENDPOINT vide et donnez une vraie région (COLIS_REGION=eu-west-3). Sans clés
explicites, la chaîne d’identifiants d’AWS s’applique : variables AWS_*, profil partagé, rôle
d’instance. Sur un hébergement qui fournit un rôle, préférez-le : rien à faire tourner, rien à fuiter.
La politique minimale pour le préfixe des colis :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": "arn:aws:s3:::livraisons/*"
}
]
}Les deux dernières actions ne servent qu’aux gros fichiers. Signer une URL ne demande aucune permission de plus : c’est un calcul local sur les clés que vous détenez déjà.
colis verifier en mode bucket appelle aussi HeadBucket, qu’AWS autorise avec s3:ListBucket sur
le bucket lui-même, et lit les règles de cycle de vie et CORS. Avec la politique ci-dessus, ces
contrôles échouent ou avertissent alors que la page de livraison fonctionne : vérifiez plutôt le
déploiement avec colis verifier --remote.
MinIO
Le moyen le plus rapide d’essayer le vrai chemin de code, sans compte :
docker run -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin \
quay.io/minio/minio server /data --console-address ":9001"Créez le bucket depuis la console sur localhost:9001, puis
COLIS_ENDPOINT=http://localhost:9000 avec minioadmin / minioadmin comme clés.
colis init --provider minio écrit le même réglage pour la CLI.
Scaleway Object Storage
Scaleway utilise vraiment la région : donnez-la plutôt que de laisser "auto".
COLIS_ENDPOINT=https://s3.fr-par.scw.cloud
COLIS_REGION=fr-parcolis init --provider scaleway lit les clés dans SCW_ACCESS_KEY et SCW_SECRET_KEY.
Wasabi
COLIS_ENDPOINT=https://s3.eu-central-1.wasabisys.com
COLIS_REGION=eu-central-1colis init --provider wasabi lit les clés dans WASABI_ACCESS_KEY et WASABI_SECRET_KEY.
À propos des ACL
upload() accepte une option acl, mais la plupart des buckets récents ont les ACL désactivées, et
R2 ne les prend pas en charge : l’option fait alors échouer la requête. colis n’a pas besoin d’objets
publics ; laissez acl de côté.
Vérifier
Quel que soit le fournisseur, colis verifier en mode bucket effectue les opérations dont colis a
besoin et signale la règle de cycle de vie ou la règle CORS manquante. Voir CLI.
Gros fichiers
Au-delà de DROP_MAX_SIZE_MB, le navigateur envoie le fichier directement au bucket, en morceaux, avec reprise. La règle CORS et le nettoyage qu’il faut.
Configuration
Chaque variable de la page de livraison, chaque clé du fichier de la CLI, chaque option de createBucket, et la forme des codes.