Non-Official Google Cloud Storage Provider for Strapi Upload
Install the package from your app root directory
with npm
npm install strapi-provider-upload-google-cloud-storage --save
or yarn
yarn add strapi-provider-upload-google-cloud-storage
The bucket should be created with fine grained access control, as the plugin will configure uploaded files with public read access.
- In the GCP Console, go to the Create service account key page..
- From the Service account list, select New service account.
- In the Service account name field, enter a name.
- From the Role list, select Cloud Storage > Storage Admin.
- Select
JSON
for Key Type - Click Create. A JSON file that contains your key downloads to your computer.
You will find below many examples of configurations, for each example :
- Copy the full content of the downloaded JSON file
- Open the configuration file
- Paste it into the "Service Account JSON" field (as
string
orJSON
, be careful with indentation) - Set the
bucketName
field and replaceBucket-name
by yours previously create - Default
baseUrl
is working, but you can replace it by yours (if you use a custom baseUrl) - Save the configuration file
- Enjoy !
Example with one configuration for all environments (dev/stage/prod)
./extensions/upload/config/settings.json
{
"provider": "google-cloud-storage",
"providerOptions": {
"serviceAccount": "<Your serviceAccount JSON object/string here>",
"bucketName": "Bucket-name",
"baseUrl": "https://storage.googleapis.com/{bucket-name}",
"basePath": "/",
"publicFiles": true
}
}
Example with environment variable
./extensions/upload/config/settings.json
{
"provider": "google-cloud-storage",
"providerOptions": {
"serviceAccount": "${process.env.GCS_SERVICE_ACCOUNT || <Your serviceAccount JSON object/string here>}",
"bucketName": "${process.env.GCS_BUCKET_NAME || Bucket-name}",
"baseUrl": "${process.env.GCS_BASE_URL || https://storage.googleapis.com/{bucket-name}}",
"basePath": "",
"publicFiles": true
}
}
You can rename the environment variables
as you like.
All variable are optional, you can setting up only bucketName
if you need to change only the bucketName
.
Example with multi configuration multi upload : one by environment (dev/stage/prod)
./extensions/upload/config/settings.js
const stagingProviderOptions = {
serviceAccount: '<Your serviceAccount JSON object/string here>', // json configuration
bucketName: 'Bucket-name', // name of the bucket
baseUrl: 'https://storage.googleapis.com/{bucket-name}',
basePath: '/staging',
publicFiles: false
};
const productionProviderOptions = {
serviceAccount: '<Your serviceAccount JSON object/string here>', // json configuration
bucketName: 'Bucket-name', // name of the bucket
baseUrl: 'https://storage.googleapis.com/{bucket-name}',
basePath: '/production',
publicFiles: true
};
if (process.env.NODE_ENV === 'production') {
module.exports = {
provider: 'google-cloud-storage',
providerOptions: productionProviderOptions
};
}
else if (process.env.NODE_ENV === 'staging') {
module.exports = {
provider: 'google-cloud-storage',
providerOptions: stagingProviderOptions
};
}
else {
module.exports = {
provider: 'local'
};
}
Overriding uploadProvider
config with gcs
key in Strapi custom config
Contents of gcs
key in Strapi custom config, if set, will be merged over ./extensions/upload/config/settings.json
,
./config/custom.json
(config items set here will be merged over, overriding config set at ./extensions/upload/config/settings.json
)
{
"gcs" : {
"serviceAccount": "<Your serviceAccount JSON object/string here>",
"bucketName": "Bucket-name",
"baseUrl": "https://storage.googleapis.com/{bucket-name}",
"publicFiles": true
}
}
./config/environments/<development|staging|production>/custom.json
(config items set here will be merged over and override the previous ones)
{
"gcs" : {
"serviceAccount": "<Your serviceAccount JSON object/string here>",
"bucketName": "Bucket-name",
"baseUrl": "https://storage.googleapis.com/{bucket-name}",
"publicFiles": true
}
}
JSON data provide by Google Account (explained before).
Can be set as a String or JSON Object.
The name of the bucket on Google Cloud Storage. You can find more information on Google Cloud documentation.
Define your base Url, first is default value :
- https://storage.googleapis.com/{bucket-name}
- https://{bucket-name}
- http://{bucket-name}
Define base path to save each media document.
Boolean atribute to define public attribute to file when it is upload to storage.
From release 3.0.0-beta.20
the bucketLocation
is no longer supported.
The plugin will not create the bucket, you need to configure it before.