J'ai une application React + Webpack/Babel + Node/Express et je veux la déployer sur AWS.
Devrais-je déployer React et Node/Express séparément ? Ou pourraient-ils être déployés ensemble en une seule fois ?
J'ai une application React + Webpack/Babel + Node/Express et je veux la déployer sur AWS.
Devrais-je déployer React et Node/Express séparément ? Ou pourraient-ils être déployés ensemble en une seule fois ?
_Par exemple, un React application monopage et une API Node/Express._
le site front-end (l'application React) sur S3 y CloudFront ( tutorial )
le site backend (l'API de Node) sur Elastic Beanstalk (recommandé) ou EC2
Une autre option consiste à déployer les deux parties en une seule fois sur Elastic Beanstalk o EC2 . Cependant, vous ne bénéficierez pas des avantages de l'hébergement sur S3 et CloudFront, à savoir une livraison plus rapide pour vos utilisateurs y des coûts moins élevés . À mon avis, il est également plus pratique et moins sujet à des erreurs inattendues de mettre à jour et de déployer séparément le côté client et le côté serveur d'une application web.
Un autre avantage du déploiement séparé : Pour les organisations ayant des équipes différentes pour le frontend et le backend, il est plus facile pour chaque équipe de déployer sa partie de l'application sur son propre site. sans dépendre de l'autre équipe.
4xx
(nécessaire si votre application utilise un HTML5 History
-)http2
y http to https
redirectionVous pouvez utiliser différents sous-domaines, par ex.
api.domain.com
pour l'API Node/Expressapp.domain.com
pour l'application ReactPuis activer CORS dans l'API :
app.get('/api', cors({ origin: 'https://app.domain.com' }), ...)
Par exemple, une application Node comprenant des vues React.
Vous devez déployer l'ensemble de l'application sur Elastic Beanstalk o EC2 .
Remarque : Si vous avez un seul projet comprenant deux sous-projets (c'est-à-dire un dossier pour l'application React et un autre pour l'API Node), et si les deux sous-projets fonctionnent toujours lorsqu'ils sont séparés, alors vous pouvez déployer les sous-projets séparément (voir la première partie de la réponse).
Exécutez votre Construction de Webpack avant de déployer la partie React. Vous pouvez le faire manuellement (avant de déployer sur AWS) ou automatiquement (dans votre fichier CI / CD système). Si vous avez démarré votre application avec create-react-app (CRA), il suffit d'exécuter yarn build
o npm run build
à la racine du projet et téléchargez le contenu du dossier "build" dans votre seau S3.
aws s3
des commandes.eb
des commandes.J'ai répondu une question connexe ne se limite pas à AWS.
J'apprécie la réponse ! Avant d'accepter la réponse, quelques questions. React App ne pourrait-il pas être déployé uniquement sur S3 ? Je suis juste curieux de savoir pourquoi CloudFront est suggéré. Pourriez-vous également préciser ce que vous entendez par l'exécution de la construction de production de webpack/babel avant le déploiement sur S3 ? Enfin, NodeJS et ReactJS doivent en fait être déployés séparément ? Actuellement, ils sont sous un seul projet, mais dans deux sous-dossiers différents.
Désolé mais que signifie Node app avec des parties React par rapport à React app + Node API ?
Pour déployer votre application sans problème, vous devez vous familiariser avec trois concepts : Les microservices, les conteneurs et les gestionnaires de processus. Je vais les aborder avec un peu plus de détails et quelques liens pour vous aider à démarrer :
Les microservices sont une architecture qui vous permet de diviser votre application en services plus petits. Cela présente de multiples avantages : 1- Les services sont facilement testables. 2- Les services sont remplaçables. 3- Les services peuvent évoluer séparément.
Presque toutes les applications utiles ont au moins des dizaines de dépendances. Vous pouvez installer les dépendances sur les machines cibles, mais vous rencontrerez très certainement quelques difficultés. Des programmes comme Docker vous permettent de créer un conteneur pour votre application et de déployer ce conteneur sur le cloud. (Quel que soit le fournisseur de cloud) En savoir plus...
Les gestionnaires de processus veillent au bon fonctionnement de votre application et à la bonne santé de tous les éléments. Si votre application tombe en panne, il peut facilement redémarrer l'application.
Nota: Cette approche ne fonctionne pas si vous effectuez un rendu serveur avec ReactJS. Passez à l'option suivante.
Vous pouvez simplement construire votre application et la déployer sur un site web statique S3. Cette option fonctionne si vous utilisez une architecture de microservices pour séparer votre API de votre application react.
La création d'un site web statique dans S3 est très simple :
Pour plus d'informations, consultez le site pratique d'AWS documentation .
Vous pouvez lancer différentes instances EC2 pour chaque microservice. (API, application React, etc.) Vous devez utiliser un gestionnaire de processus tel que PM2 pour garantir le bon fonctionnement de votre application.
Pour créer un déploiement automatique, je préfère utiliser Terraform en combinaison avec Ansible . Terraform est très déclaratif. Vous décrivez à quoi doit ressembler l'infrastructure du nuage et Terraform la construit pour vous.
Ansible, en revanche, est très procédural et est parfait pour le provisionnement d'un nouveau serveur.
Idéalement, vous devriez avoir des tests unitaires pour éviter d'envoyer du code bogué vers la production. (Utilisez Jest avec supertest , Enzyme pour un rendu peu profond). Mais le monde est imparfait, et il est bon de recevoir tous les bugs potentiels qui se produisent sur le client. Entrez Sentry
J'apprécie vraiment tous les points de vue ! J'ai besoin de quelques éclaircissements, si vous le voulez bien. Que signifie "server-render", et comment puis-je vérifier si le mien le fait ? Et qu'est-ce qu'une application NodeJS/React sans serveur ? NodeJS n'est-il pas un serveur ? De plus, mon projet comporte à la fois React et NodeJS/ExpressJS, dans deux sous-dossiers distincts, et j'aimerais donc les déployer comme un tout.
Je vérifie juste si vous avez vu mon message précédent avant que j'accepte la réponse et le vote positif.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.