J'ai une application React + Webpack/Babel + Node/Express) et je souhaite 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 même temps?
par ex. a React application d'une seule page et une API Node/Express.
le frontend (le React app)) sur S et CloudFront ( tutoriel )
le backend (le Node API)) sur Elastic Beanstalk (recommandé) ou - EC2
Une autre option consiste à déployer les deux parties simultanément à la fois sur Elastic Beanstalk ou EC2 . Cependant, vous manquerez les avantages de l'hébergement sur S3 et CloudFront, à savoir une livraison plus rapide pour vos utilisateurs et . ) des coûts moins chers . À mon avis, il est également plus pratique et moins sujet aux 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 de déployer séparément: Pour les organisations avec des équipes différentes pour le front-end et le back-end, , il est plus facile pour chaque équipe de déployer leur côté de l’application par eux-mêmes sans dépendre de l'autre équipe.
4xx
(nécessaire si votre application utilise un routeur basé sur HTML5 History
)http2
et redirection http to https
Vous pouvez utiliser différents sous-domaines, par exemple.
api.domain.com
Pour l'API Node/Expressapp.domain.com
Pour le React appAlors activer CORS dans l'API:
app.get('/api', cors({ Origin: 'https://app.domain.com' }), ...)
par ex. a Node app incluant certaines React vues.
Vous devez déployer l'application entière sur Elastic Beanstalk ou EC2 .
Remarque: Si vous avez un seul projet comprenant deux sous-projets (c'est-à-dire un dossier pour l'application React app et un autre pour l'API Node)]), et si les deux sous-projets fonctionnent toujours quand ils sont séparés, vous pouvez alors déployer les sous-projets séparément (voir la première partie de la réponse).
Exécutez votre Webpack build avant de déployer la partie React. Vous pouvez le faire manuellement (avant de déployer sur AWS) ou automatiquement (dans votre (~ # ~ ] ci [~ # ~] / CD système).
aws s3
.eb
.J'ai répondu ne question connexe pas limité à AWS.
Pour déployer votre application sans tracas, vous devez connaître trois concepts: les microservices, les conteneurs et les gestionnaires de processus. Je vais en discuter avec un peu plus de détails et quelques liens pour vous aider à démarrer:
Microservices est une architecture qui vous permet de diviser votre application en services plus petits. Cela présente de nombreux 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 des dépendances sur les machines cibles, mais très certainement, vous aurez peu de défis à relever. Des programmes tels que Docker vous permettent de créer un conteneur pour votre application et de le déployer 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 toutes les parties. Si votre application se bloque, elle peut facilement redémarrer l’application.
Remarque: Cette approche ne fonctionne pas si vous effectuez un rendu de serveur avec ReactJS. Aller à l'option suivante.
Vous pouvez simplement créer votre application et la déployer sur un site Web S3 statique. Cette option fonctionne si vous utilisez une architecture microservices pour séparer votre API de votre application rea.
Créer un site web statique dans S3 est très simple:
Pour plus d'informations, consultez AWS handy documentation .
Vous pouvez lancer différentes instances EC2 pour chaque microservice. (API, React app, etc.). Vous devez utiliser un gestionnaire de processus tel que PM2 pour vous assurer que votre application fonctionne correctement.
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 l’infrastructure cloud devrait ressembler et Terraform la construit pour vous.
En revanche, Ansible est très procédural et convient parfaitement à l’approvisionnement d’un nouveau serveur.
Idéalement, vous devriez avoir des tests unitaires pour empêcher l'envoi de code de bug à la production. (Utilisez Jest avec supertest , Enzyme pour un rendu peu profond). Mais le monde est imparfait et il est bon de recevoir tout bogue potentiel survenant chez le client. Entrez Sentry