Store images and other assets with Digital Ocean Spaces object storage.
Digital Ocean Spaces is an S3-compatible object storage solution.
Prerequisite
The AssetServerPlugin is part of a standard Vendure installation, but if it is not already installed, you must install it:
npm install @vendure/asset-server-plugin
Install AWS SDKs
Before using this strategy, make sure you have the @aws-sdk/client-s3
and @aws-sdk/lib-storage
packages installed:
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage
Create a new Spaces bucket
In the Digital Ocean dashboard, navigate to “Spaces Object Storage” from the left nav menu and create a new bucket named “vendure-assets”.
Next, navigate to the “API” section and generate a new API key for that bucket. Be sure to note down:
- The access key
- The secret key (important!)
- The bucket url (available from the spaces bucket page)
These can then be used to configure the environment variables SPACES_ACCESS_KEY
, SPACES_SECRET_KEY
and SPACES_ENDPOINT
.
Configure the AssetServerPlugin for Spaces
// vendure-config.ts
import { AssetServerPlugin, configureS3AssetStorage } from '@vendure/asset-server-plugin';
import { DefaultAssetNamingStrategy } from '@vendure/core';
// ...
plugins: [
AssetServerPlugin.init({
route: 'assets',
assetUploadDir: path.join(__dirname, 'assets'),
namingStrategy: new DefaultAssetNamingStrategy(),
storageStrategyFactory: configureS3AssetStorage({
bucket: 'vendure-assets',
credentials: {
accessKeyId: process.env.SPACES_ACCESS_KEY,
secretAccessKey: process.env.SPACES_SECRET_KEY,
},
nativeS3Configuration: {
endpoint: process.env.SPACES_ENDPOINT?? 'http://localhost:9000',
forcePathStyle: true,
signatureVersion: 'v4',
// The `region` is required by the AWS SDK,
// so we just use a dummy value here.
region: 'eu-west-1',
},
}),
}),
Complete documentation
See the S3AssetStorageStrategy docs for full documentation.
Create your first commerce experience with Vendure in less than 2 minutes
Vendure is a registered trademark. Our trademark policy ensures that our brand and products are protected. Feel free to reach out if you have any questions about our trademarks.
Documentation
Newsletter
Get the latest product news and announcements delivered directly to your inbox.