Как развернуть приложение ReactJS + NodeJS Express на AWS?
У меня есть приложение ReactJS + NodeJS/ExpressJS + Webpack/Babel, и я хотел бы развернуть его на AWS.
Мой вопрос: должен ли я разворачивать ReactJS и NodeJS/ExpressJS отдельно? Или они могут быть развернуты вместе сразу?
Кроме того, упомянуты какие-либо хорошие руководства, относящиеся к моему стеклу? Посмотрел вокруг, но все, казалось, были специфическими для одного конкретного, будь то просто NodeJS или ReactJS. Ближе всего он нашел https://www.youtube.com/watch?v=WxhFq64FQzA, но я считаю, что он охватывает только NodeJS/ExpressJS, а не ReactJS.
В настоящее время приложение находится под одним проектом, включая все ReactJS + NodeJS/ExpressJS + Webpack/Babel.
Ответы
Ответ 1
1. Если у вас есть два разных проекта
например. a Реакт одностраничное приложение и Node/Express API.
а. Вы можете развернуть
В противном случае вы можете развернуть обе части одновременно на Elastic Beanstalk или EC2. При этом вы пропустите преимущества хостинга на S3 и CloudFront, т.е. более быстрая доставка для ваших пользователей и более дешевые расходы. На мой взгляд, это также более удобно и менее подвержено неожиданным ошибкам для обновления и развертывания отдельно клиентской стороны и серверной части веб-приложения.
б. Почему S3 + CloudFront вместо S3 один?
- all преимущества использования CDN
- ваше собственное доменное имя и бесплатный SSL-сертификат в 1 клик
- перенаправление при ошибках
4xx
(необходимо, если ваше приложение использует маршрутизатор на основе HTML5 History
)
- система кэширования
-
http2
и http to https
перенаправление
с. Как обращаться с CORS?
Вы можете использовать разные субдомены, например.
-
api.domain.com
для API
-
app.domain.com
для приложения
Затем включить CORS в API:
app.get('/api', cors({ origin: 'https://app.domain.com' }), ...)
2. Если у вас есть один проект
например. a Node, включая некоторые виды React.
Вам нужно развернуть все приложение на Elastic Beanstalk или EC2.
Примечание. Если у вас есть один проект, включающий два подпроекта (например, папку для приложения React и еще один для API Node), и если оба подпроекта все еще работают, когда они разделены, то вы может развернуть суб-проекты отдельно (см. первую часть ответа).
3. В обоих случаях
Запустите сборку Webpack/Babel до развертывания части React. Вы можете сделать это вручную (до развертывания на AWS) или автоматически (в CI/CD).
4. Если не ограничено AWS
Я просто ответил на связанный вопрос, не ограничиваясь AWS.
Ответ 2
Основные понятия
Чтобы развернуть бесплатное приложение, вам нужно узнать о трех концепциях: микросервисах, контейнерах и менеджерах процессов. Я обсужу их с немного более подробной информацией и несколькими ссылками, чтобы вы начали:
Microservices
Microservices - это архитектура, которая позволяет разделить ваше приложение на более мелкие сервисы. Это имеет несколько преимуществ:
1- Услуги легко проверяются.
2. Услуги могут быть заменены.
3- Услуги могут масштабироваться отдельно.
![Монолит против дизайна микросервисов]()
Контейнерные
Практически каждое полезное приложение имеет как минимум десятки зависимостей. Вы можете устанавливать зависимости на целевые машины, но, безусловно, вы столкнетесь с несколькими проблемами. Такие программы, как Docker, позволяют создавать контейнер для вашего приложения и развертывать этот контейнер в облаке. (Независимо от поставщика облака) Подробнее...
Менеджеры процессов
Менеджеры процессов обеспечивают бесперебойную работу вашего приложения, а все части здоровы. Если ваше приложение выходит из строя, оно может легко перезапустить приложение.
Развертывание серверного приложения NodeJS/React Application
Примечание. Этот подход не работает, если вы выполняете рендеринг сервера с помощью ReactJS. Перейдите к следующему варианту.
Вы можете просто создать свое приложение и развернуть его на статический веб-сайт S3. Этот параметр работает, если вы используете архитектуру микросервисов для ветки вашего API от вашего реагирующего приложения.
Создание статического веб-сайта в S3 очень просто:
- Создайте ведро в S3 с точным названием веб-сайта. Пример: blog.stackoverflow.com.
- Включить статический хостинг
- Создайте запись A в маршруте 53 и подключите ее к создаваемому вами ведру.
Для получения дополнительной информации проверьте, что AWS удобна документация.
Развертывание приложения NodeJS в EC2
Вы можете запускать разные экземпляры EC2 для каждого микросервиса. (API, приложение React и т.д.) Для обеспечения бесперебойной работы вашего приложения вам необходимо использовать диспетчер процессов, например PM2.
Бонус: используйте Sentry для обработки ошибок
В идеале, вы должны иметь модульные тесты, чтобы предотвратить доставку багги-кода для производства. Но мир несовершенен, и хорошо получать любые потенциальные ошибки, которые происходят на клиенте. Введите Sentry