Strapi сохранение файлов на Яндекс Object Storage

—

от автора

Возможно Вы уже пробовали Strapi и он Вам даже понравился настолько, что Вы решили сделать deploy на одном из серверов.

Например я делал deploy на VPS с Node, nginx, pm2. Поскольку VPS обычно обладает скудными возможностями по хранению чего либо — то хочется хранить все свое добро на одном из современных хранилищ.

Strapi разработало для нас коннектор для backet Amazon S3. Данный плагин уже включен в стандартный репозиторий strapi, ранее он фигурировал как plugin, разработанный сообществом.

Как подключить Amazon S3 bucket Вы можете посмотреть здесь:
ролик от Alex
(на сегодня конфигурационные файлы надо писать несколько по другому — но общая канва сохраняется).

В данной статье мы рассмотрим подключение Яндекс Object Storage. Для начала Вам конечно надо зарегистрироваться на Яндекс cloud. После этого в консоли управления выбираете Object Storage.

Нажимаете на желтую кнопку «Создать бакет» и заполните поля как показано на картинке — т.е. поставьте публичный доступ на чтение и на список объектов, класс хранилища — стандартное.

После того как Вы нажмете на кнопку «Создать бакет» — Вы увидите его в списке бакетов:

Дальше нам будет необходимо создать статический ключ для обращения к Яндекс из нашего сервера Strapi. Нажмите на иконку с Вашим облаком (на фото вверху выделил красной рамкой) (у Вас может быть несколько облаков) и выберите Ваш каталог — в моем случае каталог называется default — нажмите на него.

Слева Вы увидите меню в котором есть пункт «Сервисные аккаунты» — нажмите на него и при необходимости создайте сервисный аккаунт (скорее всего Вы это сделали еще при регистрации)

Нажмите на Ваш сервисный аккаунт — перед Вами откроется страница, на которой уже будет необходимая нам кнопка.

Нажмите на кнопку «Создать новый ключ» и выберите пункт «Создать статический ключ доступа», введите описание. После того как Вы введете описание — у Вас появятся два ключа:

Сохраните эти два значения в блокнот — они нам понадобятся далее.

Запустите консоль на своем компьютере и введите команду
npx create-strapi-app strapi-yandex-cloud --quickstart

Через некоторое время Strapi установится в директории strapi-yandex-cloud и откроется окно браузера в которое Вы должны ввести данные администратора. После этого окно браузера можно закрыть.

Прекратите выполнение запущенного сервера, перейдите в директорию Вашего приложения — strapi-yandex-cloud и установите дополнительный плагин:
npm i -S strapi-provider-upload-aws-s3

Теперь остался последний шаг — создать конфигурационный файл плагина. Создайте файл сonfig/plugins.js (файл plugins.js в директории config) следующего содержания:

module.exports = ({ env })=>({   upload: {     provider: 'aws-s3',     providerOptions: {       endpoint: 'https://storage.yandexcloud.net',       accessKeyId: env('AWS_ACCESS_KEY_ID'),       secretAccessKey: env('AWS_ACCESS_SECRET'),       region: env('AWS_REGION'),       params: {         Bucket: env('AWS_BUCKET'),       },     },   }, });

Осталось сделать последний шаг. В корне проекта создайте файл .env в котором запишите данные Вашего бакета:

HOST=0.0.0.0 PORT=1337  AWS_ACCESS_KEY_ID=pg2ywMziH_9zeZfA7t3w AWS_ACCESS_SECRET="aTiO354YNpnO9zKjqBiP1U3nm3F3CoXGLYcldZBC" AWS_REGION="ru-central1" AWS_BUCKET="strapi-backet-test"

Здесь strapi-backet-test — это название бакета, который Вы создали, два длинных ключа — это статический ключ доступа, который Вы создали на предыдущем шаге.

Собственно на этом процесс завершен!
Запускаете Ваш сервер — npm run develop.
Открываете в браузере strapi Media Library, загружаете туда какое либо изображение.

Далее открываем в cloud.yandex.ru наш вновь созданный бакет и видим:

В бакет было помещено несколько файлов разного размера. Дело в том, что стандартные настройки Strapi обеспечивают генерацию нескольких файлов разного разрешения.

В Media Library можно помещать не только изображения, но и видео, pdf а также любые другие файлы. Конечно же в Strapi есть готовый Rest API для записи файлов в Media Library.

P.S. Хочу поблагодарить Александра Власова, оказавшего неоценимую помощь в настройке конфигурации для Яндекс облака.

ссылка на оригинал статьи https://habr.com/ru/post/546938/