Создание электронной коммерции с открытым исходным кодом в облаке

Введение

Medusa — это безголовая коммерция с открытым исходным кодом, которая позволяет создавать цифровую коммерцию с помощью своего API с помощью всего нескольких команд и за считанное время. Вы можете разместить сервер Medusa на любом удобном для вас хостинге, и одним из способов размещения является использование AWS Elastic Beanstalk.

AWS Elastic Beanstalk — это сервис для развертывания и масштабирования веб-приложений и сервисов, разработанных с использованием многих языков программирования и фреймворков, включая Node.js.

В этом руководстве вы узнаете, как создать простой конвейер с помощью AWS CodePipeline, который будет извлекать код сервера Medusa из репозитория GitHub и автоматически развертывать его на AWS Elastic Beanstalk.

Почему именно Elastic Beanstalk?

Используя Elastic Beanstalk, вы сможете развернуть серверное приложение Medusa в облаке AWS Cloud. Вы просто развертываете свое приложение, а Elastic Beanstalk механически обрабатывает основные моменты предоставления возможностей, выравнивания нагрузки, масштабирования и наблюдения за здоровьем приложения.

После развертывания приложения Elastic Beanstalk создает выбранную поддерживаемую версию платформы и предоставляет все ресурсы AWS, такие как экземпляры AmazonEC2 или базы данных, необходимые для работы приложения.

Одним словом, AWS Elastic Beanstalk облегчает разработчикам развертывание своих приложений и предоставляет их миру.

Предварительные условия

Чтобы следовать этому руководству, вам необходимо следующее:

  • Работающее серверное приложение Medusa. Для начала работы вы можете воспользоваться руководством по быстрому запуску.
  • Учетная запись GitHub.
  • Аккаунт AWS с пользователем IAM, как его создать, можно посмотреть здесь. Убедитесь, что ваш IAM-пользователь имеет достаточные разрешения для взаимодействия с Elastic Beanstalk, более подробную информацию об этом вы можете найти здесь.

Настройка окружения Node на Elastic Beanstalk

Первым шагом будет создание среды Node.js на Elastic Beanstalk с примером приложения. Позже вы замените образец приложения на сервер Medusa.

Перейдите на страницу входа в AWS и войдите под своим пользователем IAM. Вы будете перенаправлены на главную страницу консоли.

Как только вы окажетесь здесь, перейдите в верхнюю строку поиска и напишите Elastic Beanstalk; в результатах выберите первый вариант.

Это приведет вас на страницу AWS Elastic Beanstalk Dashboard, где вам нужно будет нажать на кнопку Create application.

Вы можете использовать консольный мастер «Create Web app» для создания вашего образца приложения.

  1. Укажите информацию об имени вашего приложения Elastic Beanstalk, для данного руководства имя будет aws-medusa-server.
  2. Нажмите на выпадающий список Platform и выберите платформу Node.js. На момент написания этой статьи была выбрана ветка платформы Node.js 16 running on 64bit Amazon Linux 2, а версия платформы была 5.5.0.
  3. Выберите Sample Application в качестве кода приложения.
  4. Нажмите на Configure more options и перейдите в раздел Capacity. Там нажмите на кнопку Изменить.
  5. На странице Modify capacity перейдите к instances types и выберите t2.small и t2.medium, затем нажмите на save.

⚠️ Этот шаг очень важен, потому что по умолчанию типы экземпляров t2.micro и t2.small, однако экземпляр micro имеет только 1 Гб оперативной памяти. Этого достаточно для тестирования и разработки, но для производственной среды мы рекомендуем использовать экземпляр большего объема.

  1. Вернувшись на страницу Configure more options, перейдите в раздел Database и нажмите на кнопку edit. Здесь вы собираетесь настроить базу данных PostgreSQL, необходимую для сервера medusa. В качестве движка предлагается выбрать postgres версии 10, 11 или 12. Вам также нужно будет ввести имя пользователя и пароль. Обязательно сохраните их на потом, так как они вам еще пригодятся. Как только вы закончите, нажмите «Сохранить».
  2. Наконец, нажмите на кнопку «Создать приложение». Это займет несколько минут, чтобы запустить ваше приложение.

После создания среды вы можете перейти на страницу обзора и проверить состояние среды, версию запущенного приложения и версию платформы, на которой работает приложение.

В верхней части этой страницы вы увидите URL среды под названием среды, нажмите на этот URL, чтобы перейти на страницу поздравления образца приложения.

До этого момента у вас должна быть среда Node, запущенная на AWS Elastic Beanstalk с образцом приложения, следующим шагом будет подготовка сервера Medusa для развертывания на этой среде.


Подготовка сервера Medusa

Чтобы создать конвейер для CI/CD, необходимо внести некоторые изменения в репозиторий сервера Medusa и опубликовать их на GitHub.

Во-первых, в вашем сервере Medusa откройте файл package.json и добавьте в конец следующее свойство

"engines": {
  "node": ">=16.0.0"
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Будьте внимательны: версия node version должна соответствовать версии, которую вы задали при создании среды. AWS Elastic Beanstalk будет искать это перед развертыванием вашего приложения с помощью AWS CodePipeline, поэтому, если вы этого не сделаете, развертывание будет неудачным.

В этом файле вам также нужно изменить команду start на следующую:

"start": "medusa migrations run && medusa develop -p=8080",
Войти в полноэкранный режим Выйти из полноэкранного режима

По сути, вы меняете порт, на котором по умолчанию работает сервер medusa, так что вместо порта 9000 он будет работать на порту 8080. Это необходимо сделать потому, что по умолчанию AWS Beanstalk запускает ngix в качестве обратного прокси, чтобы перенаправить весь входящий трафик из интернета с порта 80 на порт 8080.

Также необходимо запустить миграции на сервере перед запуском сервера Medusa.

Следующим шагом будет добавление Procfile в корень вашего проекта со следующей строкой кода

web: npm run start
Войти в полноэкранный режим Выйти из полноэкранного режима

Это проинструктирует AWS Beanstalk, как запустить ваше приложение после установки всех зависимостей с помощью npm install, сначала он запустит миграции medusa, а затем запустит приложение.

Последнее, что вам нужно сделать, это убедиться, что вы настроили свою базу данных на использование PostgreSQL. В medusa-config.js внесите следующие изменения в экспортируемый объект:

database_url: DATABASE_URL,
atabase_type: "postgres",
// database_database: "./medusa-db.sql",
// database_type: "sqlite",
Войти в полноэкранный режим Выйти из полноэкранного режима

Когда все эти изменения будут сделаны, зафиксируйте их и перенесите в удаленный репозиторий на GitHub.

Как только репозиторий на GitHub будет готов, следующим шагом будет создание AWS CodePipeline.


Добавьте свойства среды

Чтобы создать конвейер, вам необходимо установить некоторые переменные окружения в окружении узла на AWS Beanstalk. Это необходимо потому, что когда вы закончите настройку конвейера кода, он будет немедленно запущен и выполнит первое развертывание. Поэтому, чтобы получить статус OK, все переменные окружения, необходимые серверу Medusa, должны быть установлены заранее.

На странице обзора AWS Beanstalk перейдите на левую панель, найдите меню конфигурации среды вашего узла и щелкните на нем.

Затем нажмите на кнопку Изменить рядом с пунктом Программное обеспечение.

На странице Изменение программного обеспечения перейдите к последнему разделу под названием *Свойства среды* и добавьте следующие свойства

NPM_USE_PRODUCTION=false
JWT_SECRET=something
COOKIE_SECRET=something
DATABASE_URL=postgres://<<USERNAME>>:<<PASSWORD>>@<<DATABASE_URL>>:5432/<<DB_NAME>>
Войти в полноэкранный режим Выйти из полноэкранного режима

Обратите особое внимание на первое и последнее свойства. Первое свойство должно разрешить AWS Beanstalk установить зависимости (babel), необходимые для выполнения команды medusa develop.

Последнее — это URL для подключения к базе данных. Здесь нужно изменить <<USERNAME> и <<PASSWORD>> на те, которые вы задали при создании среды ноды.

Что касается <<DB_NAME>> и <<DB_URL>>, вы можете найти их, выполнив поиск «RDS» в консоли AWS. Затем нажмите на Базы данных в боковой панели. Вы должны увидеть базу данных PostgreSQL.

Нажмите на идентификатор базы данных и прокрутите вниз до Connectivity & Security. URL под Endpoint — это ваша <<DB_URL>>. Что касается <<DB_NAME>>, вы можете найти его на вкладке Configuration. По умолчанию это ebdb.

После добавления переменных окружения нажмите на кнопку Применить и подождите, пока окружение не будет обновлено с учетом этих изменений. После завершения обновления можно приступать к созданию CodePipeline.


Настройка AWS CodePipeline

Цель конвейера — отслеживать изменения или коммиты в основной ветке репозитория вашего сервера Medusa на GitHub. Когда это произойдет, конвейер будет запущен, и он начнет новое развертывание для обновления вашего приложения на AWS Beanstalk.

Прежде чем продолжить этот шаг, убедитесь, что вы создали репозиторий для своего сервера Medusa.

Перейдите в верхнюю строку поиска и напишите CodePipeline в результатах выберите первый вариант

На странице CodePipeline dashboard нажмите на кнопку «Create Pipeline».

⚠️ Убедитесь, что вы находитесь в том же регионе, где и среда вашего узла.

На странице «Выбор параметров трубопровода» дайте имя трубопроводу, оставьте все как есть и нажмите на кнопку «Далее». Для этого руководства имя будет aws-medusa-server-pipeline.

На странице Add source stage в выпадающем списке Source Provider выберите GitHub (версия 2). Затем, если вы не создали подключение к GitHub, нажмите на кнопку «Connect to GitHub», чтобы предоставить AWS CodePipeline разрешение на доступ к репозиторию сервера Medusa на GitHub. Это поможет AWS Code Pipeline загрузить зафиксированные изменения из GitHub в AWS CodePipeline.

После подключения GitHub выберите свой репозиторий и ветку, из которой вы будете извлекать свое приложение.

Отметьте опцию Start the pipeline on source code change и для опции Output artifact format выберите «CodePipeline default». Нажмите на кнопку Next.

На странице добавления этапа сборки нажмите на кнопку Skip build stage.

На странице Add deploy stage в выпадающем списке Deploy provider выберите «AWS Elastic Beanstalk», затем выберите регион, в котором находится среда узла, а также приложение и среду, которые вы создали ранее (в случае данного руководства это aws-medusa-server и Awsmedusaserver-env соответственно) После этого нажмите на кнопку Next.

На странице Review проверьте, все ли в порядке. Затем нажмите на кнопку Создать трубопровод.

Вы увидите баннер с сообщением об успехе, а действия трубопровода будут выполняться до тех пор, пока не завершатся. Если все прошло нормально, оба этапа будут отмечены галочкой успеха.

Проверка

Чтобы проверить, работает ли ваш сервер Medusa, вернитесь на приборную панель Elastic Beanstalk и найдите URL среды под названием среды, а затем выполните следующие действия:

  • Скопируйте URL-адрес.
  • Откройте новую вкладку в браузере, вставьте URL и добавьте в конце /health, чтобы URL выглядел примерно так:

http://awsmedusaserver-env.eba-kkrjvcxb.us-west-2.elasticbeanstalk.com/health

Вы должны получить сообщение OK, если это так, то вы успешно развернули ваш сервер Medusa в AWS Elastic Beanstalk.

Не забудьте изменить URL в витрине или админке Medusa в соответствии с URL вашего сервера.

Устранение неполадок

Если вы столкнулись с какими-либо проблемами или возникла проблема с развернутым сервером, вы можете проверить журналы в вашем экземпляре Elastic Beanstalk, нажав на Logs в боковой панели.

Заключение

Развертывание сервера Medusa на AWS Elastic Beanstalk стало проще с помощью конвейеров CI/CD. После завершения работы вы можете сосредоточиться на добавлении новой функциональности к серверу Medusa в виде пользовательских конечных точек, сервисов или плагинов.

Затем, чтобы перенести изменения на сервер, вы можете просто перенести их в свой репозиторий GitHub. Настроенный конвейер обнаружит изменения и начнет их выполнение. После этого ваше приложение будет обновлено новыми функциями.

Чтобы узнать больше о том, как настроить свой магазин или как подключить витрину к своему магазину, обязательно ознакомьтесь с документацией Medusa.

Если у вас возникли какие-либо проблемы или вопросы, связанные с Medusa, обращайтесь к команде Medusa через Discord.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *