为 Strapi Cloud 上传提供商配置
🌐 Upload Provider Configuration for Strapi Cloud
Page summary:
像 S3 或 Cloudinary 这样的外部存储需要插件设置、安全中间件和云变量。
Strapi Cloud 开箱即用带有本地上传提供者。不过,如果需要,它也可以配置为使用第三方上传提供者。
🌐 Strapi Cloud comes with a local upload provider out of the box. However, it can also be configured to utilize a third-party upload provider, if needed.
请注意,Strapi 无法为第三方上传提供商提供支持。
🌐 Please be advised that Strapi is unable to provide support for third-party upload providers.
- 一个在
v4.8.2+上运行的本地 Strapi 项目。 - 第三方上传提供者的凭证(参见 Strapi Market)。
配置
🌐 Configuration
为 Strapi Cloud 配置第三方上传提供商需要四个步骤:
🌐 Configuring a third-party upload provider for use with Strapi Cloud requires 4 steps:
- 在本地 Strapi 项目中安装提供程序插件。
- 在本地 Strapi 项目中配置提供者。
- 在本地 Strapi 项目中配置安全中间件。
- 将环境变量添加到 Strapi Cloud 项目中。
安装提供程序插件
🌐 Install the Provider Plugin
使用 npm 或 yarn,按照对应供应商在 Marketplace 中的条目说明,将提供程序插件作为包依赖安装到本地 Strapi 项目中。
配置提供者
🌐 Configure the Provider
要在你的 Strapi 项目中配置第三方上传提供者,请通过添加如下上传配置选项来创建或编辑你的生产环境 ./config/env/production/plugins.js|ts 的插件配置文件:
🌐 To configure a 3rd-party upload provider in your Strapi project, create or edit the plugins configuration file for your production environment ./config/env/production/plugins.js|ts by adding upload configuration options as follows:
- JavaScript
- TypeScript
module.exports = ({ env }) => ({
// … some unrelated plugins configuration options
upload: {
config: {
// … provider-specific upload configuration options go here
}
// … some other unrelated plugins configuration options
}
});
export default ({ env }) => ({
// … some unrelated plugins configuration options
upload: {
config: {
// … provider-specific upload configuration options go here
}
// … some other unrelated plugins configuration options
}
});
文件结构必须与上述路径完全匹配,否则配置将不会应用到 Strapi 云。
🌐 The file structure must match the above path exactly, or the configuration will not be applied to Strapi Cloud.
每个提供商将有不同的配置设置可用。请查看 Marketplace中该提供商的相应条目。
示例:
- JavaScript
- TypeScript
- Cloudinary
- Amazon S3
module.exports = ({ env }) => ({
// ...
upload: {
config: {
provider: 'cloudinary',
providerOptions: {
cloud_name: env('CLOUDINARY_NAME'),
api_key: env('CLOUDINARY_KEY'),
api_secret: env('CLOUDINARY_SECRET'),
},
actionOptions: {
upload: {},
uploadStream: {},
delete: {},
},
},
},
// ...
});
module.exports = ({ env }) => ({
// ...
upload: {
config: {
provider: 'aws-s3',
providerOptions: {
baseUrl: env('CDN_URL'),
rootPath: env('CDN_ROOT_PATH'),
s3Options: {
accessKeyId: env('AWS_ACCESS_KEY_ID'),
secretAccessKey: env('AWS_ACCESS_SECRET'),
region: env('AWS_REGION'),
params: {
ACL: env('AWS_ACL', 'public-read'),
signedUrlExpires: env('AWS_SIGNED_URL_EXPIRES', 15 * 60),
Bucket: env('AWS_BUCKET'),
},
},
},
actionOptions: {
upload: {},
uploadStream: {},
delete: {},
},
},
},
// ...
});
- Cloudinary
- Amazon S3
export default ({ env }) => ({
// ...
upload: {
config: {
provider: 'cloudinary',
providerOptions: {
cloud_name: env('CLOUDINARY_NAME'),
api_key: env('CLOUDINARY_KEY'),
api_secret: env('CLOUDINARY_SECRET'),
},
actionOptions: {
upload: {},
uploadStream: {},
delete: {},
},
},
},
// ...
});
export default ({ env }) => ({
// ...
upload: {
config: {
provider: 'aws-s3',
providerOptions: {
baseUrl: env('CDN_URL'),
rootPath: env('CDN_ROOT_PATH'),
s3Options: {
accessKeyId: env('AWS_ACCESS_KEY_ID'),
secretAccessKey: env('AWS_ACCESS_SECRET'),
region: env('AWS_REGION'),
params: {
ACL: env('AWS_ACL', 'public-read'),
signedUrlExpires: env('AWS_SIGNED_URL_EXPIRES', 15 * 60),
Bucket: env('AWS_BUCKET'),
},
},
},
actionOptions: {
upload: {},
uploadStream: {},
delete: {},
},
},
},
// ...
});
配置安全中间件
🌐 Configure the Security Middleware
由于 Strapi 安全中间件的默认设置,你需要修改 contentSecurityPolicy 设置才能在媒体库中正确查看缩略图预览。
🌐 Due to the default settings in the Strapi Security Middleware you will need to modify the contentSecurityPolicy settings to properly see thumbnail previews in the Media Library.
在你的 Strapi 项目中执行此操作:
🌐 To do this in your Strapi project:
- 在你的 Strapi 项目中,导航到
./config/middlewares.js或./config/middlewares.ts。 - 用上传提供者提供的对象替换默认的
strapi::security字符串。
示例:
- JavaScript
- TypeScript
- Cloudinary
- Amazon S3
module.exports = [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'res.cloudinary.com'
],
'media-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'res.cloudinary.com',
],
upgradeInsecureRequests: null,
},
},
},
},
// ...
];
module.exports = [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'yourBucketName.s3.yourRegion.amazonaws.com',
],
'media-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'yourBucketName.s3.yourRegion.amazonaws.com',
],
upgradeInsecureRequests: null,
},
},
},
},
// ...
];
- Cloudinary
- Amazon S3
export default [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'res.cloudinary.com'
],
'media-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'res.cloudinary.com',
],
upgradeInsecureRequests: null,
},
},
},
},
// ...
];
export default [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'yourBucketName.s3.yourRegion.amazonaws.com',
],
'media-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'yourBucketName.s3.yourRegion.amazonaws.com',
],
upgradeInsecureRequests: null,
},
},
},
},
// ...
];
在将上述更改推送到 GitHub 之前,向 Strapi Cloud 项目添加环境变量,以防在更改完成之前触发项目的重建和新部署。
🌐 Before pushing the above changes to GitHub, add environment variables to the Strapi Cloud project to prevent triggering a rebuild and new deployment of the project before the changes are complete.
Strapi 云配置
🌐 Strapi Cloud Configuration
- 登录 Strapi Cloud,然后在“项目”页面上点击相应的项目。
- 点击 设置 标签,然后在左侧菜单中选择 变量。
- 添加特定于上传提供者的所需环境变量。
- 点击 保存。
示例:
- Cloudinary
- Amazon S3
| 变量 | 值 ||---------------------|-------------------------|| CLOUDINARY_NAME | your_cloudinary_name || CLOUDINARY_KEY | your_cloudinary_api_key || CLOUDINARY_SECRET | your_cloudinary_secret |
| 变量 | 值 ||---------------------|------------------------|| AWS_ACCESS_KEY_ID | 你的_aws_access_key_id || AWS_ACCESS_SECRET | 你的_aws_access_secret || AWS_REGION | 你的_aws_region || AWS_BUCKET | 你的_aws_bucket || CDN_URL | 你的_cdn_url || CDN_ROOT_PATH | 你的_cdn_root_path |
部署
🌐 Deployment
要部署项目并使用第三方上传提供商,请推送之前的更改。这将触发 Strapi Cloud 项目的重新构建和新部署。
🌐 To deploy the project and utilize the third-party upload provider, push the changes from earlier. This will trigger a rebuild and new deployment of the Strapi Cloud project.
一旦应用构建完成,项目将使用新的上传提供者。
🌐 Once the application finishes building, the project will use the new upload provider.