Возможно Вы уже пробовали Strapi и он Вам даже понравился настолько, что Вы решили сделать deploy на одном из серверов.
Например я делал deploy на VPS с Node, nginx, pm2. Поскольку VPS обычно обладает скудными возможностями по хранению чего либо - то хочется хранить все свое добро на одном из современных хранилищ.
Strapi разработало для нас коннектор для bucket Amazon S3. Данный плагин уже включен в стандартный репозиторий strapi, ранее он фигурировал как plugin, разработанный сообществом.
Как подключить Amazon S3 bucket Вы можете посмотреть здесь:
ролик от Alex
(на сегодня конфигурационные файлы надо писать несколько по другому - но общая канва сохраняется).
В данной статье мы рассмотрим подключение Яндекс Object Storage. Для начала Вам конечно надо зарегистрироваться на Яндекс cloud. После этого в консоли управления выбираете Object Storage.
![](https://habrastorage.org/getpro/habr/upload_files/8cc/0a3/753/8cc0a375388ac04180ba19598f2f3783.png)
Нажимаете на желтую кнопку "Создать бакет" и заполните поля как показано на картинке - т.е. поставьте публичный доступ на чтение и на список объектов, класс хранилища - стандартное.
![](https://habrastorage.org/getpro/habr/upload_files/580/4e4/161/5804e4161de8f5fb49fb04fbc9276580.png)
После того как Вы нажмете на кнопку "Создать бакет" - Вы увидите его в списке бакетов:
![](https://habrastorage.org/getpro/habr/upload_files/6e3/36f/ff6/6e336fff62356ef14ec7220f8a9ab873.png)
Дальше нам будет необходимо создать статический ключ для обращения к Яндекс из нашего сервера Strapi. Нажмите на иконку с Вашим облаком (на фото вверху выделил красной рамкой) (у Вас может быть несколько облаков) и выберите Ваш каталог - в моем случае каталог называется default - нажмите на него.
![](https://habrastorage.org/getpro/habr/upload_files/2e3/439/393/2e3439393e5cfc293fd2d9b065be8555.png)
Слева Вы увидите меню в котором есть пункт "Сервисные аккаунты" - нажмите на него и при необходимости создайте сервисный аккаунт (скорее всего Вы это сделали еще при регистрации)
![](https://habrastorage.org/getpro/habr/upload_files/27d/f8c/bb6/27df8cbb610094e07e18310396301112.png)
Нажмите на Ваш сервисный аккаунт - перед Вами откроется страница, на которой уже будет необходимая нам кнопка.
![](https://habrastorage.org/getpro/habr/upload_files/e37/c12/b88/e37c12b88c5fde98bf42e933e15c4420.png)
Нажмите на кнопку "Создать новый ключ" и выберите пункт "Создать статический ключ доступа", введите описание. После того как Вы введете описание - у Вас появятся два ключа:
![](https://habrastorage.org/getpro/habr/upload_files/0c1/204/3fd/0c12043fd160c8e3224afddeed26da5b.png)
Сохраните эти два значения в блокнот - они нам понадобятся далее.
Запустите консоль на своем компьютере и введите команду
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, загружаете туда какое либо изображение.
![](https://habrastorage.org/getpro/habr/upload_files/89b/270/a0c/89b270a0c8ecaa7fef7cd42ab99a4fa8.png)
Далее открываем в cloud.yandex.ru наш вновь созданный бакет и видим:
![](https://habrastorage.org/getpro/habr/upload_files/297/bc0/b36/297bc0b360addefea482a50bca47e785.png)
В бакет было помещено несколько файлов разного размера. Дело в том, что стандартные настройки Strapi обеспечивают генерацию нескольких файлов разного разрешения.
В Media Library можно помещать не только изображения, но и видео, pdf а также любые другие файлы. Конечно же в Strapi есть готовый Rest API для записи файлов в Media Library.
P.S. Хочу поблагодарить Александра Власова, оказавшего неоценимую помощь в настройке конфигурации для Яндекс облака.
Carduelis
Спасибо большое за статью!
А вы являетесь maintainer'ом
strapi-yandex-cloud
?Кстати, раз вы пользуетесь Headless CMS, возможно, у вас JamStack? Как вы сервируете его на Yandex Cloud?
Ulibka Автор
Возможно я вопрос неправильно понял — но репозитария strapi-yandex-cloud я не нашел :)
По поводу deploy Strapi на Яндекс собираюсь написать отдельную статью.
Carduelis
А, точно. Я вначале подумал, что это название шаблона для
npx
команды. Проглядел)