Для хранения загружаемых файлов будем использовать S3 хранилище - Yandex Object Storage. В нем можно дешево хранить файлы и быстро раздавать их через cdn.
Инструкция по созданию бакета и настройке публичного доступа.
Устанавливаем в strapi плагин для работы с S3 хранилищем.
npm install @strapi/provider-upload-aws-s3 --save
Добавить конфигурацию для подключения к S3 Yandex cloud
module.exports = ({ env }) => ({
upload: {
config: {
provider: 'aws-s3',
providerOptions: {
credentials: {
accessKeyId: env('YC_ACCESS_KEY_ID'),
secretAccessKey: env('YC_ACCESS_SECRET'),
},
region: 'ru-central1',
endpoint: 'https://storage.yandexcloud.net',
params: {
Bucket: env('YC_BUCKET'),
},
},
},
},
});
Для отображения в галерее превью картинок необходимо добавить домен в доверенный.
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'https://'+env('YC_BUCKET')+'.storage.yandexcloud.net',
],
'media-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'https://'+env('YC_BUCKET')+'.storage.yandexcloud.net',
],
upgradeInsecureRequests: null,
},
},
},
},
Создаем ключ и секрет для загрузки файлов в бакет.
- Создайте сервисный аккаунт.
- Назначьте сервисному аккаунту роль
storage.uploader
- Создайте статический ключ доступа.
Добавляем новые переменные окружения.
YC_BUCKET
- название бакетаYC_ACCESS_KEY_ID
- идентификатор ключаYC_ACCESS_SECRET
- секретный ключ
Исходный код руководства на GitHub.