3
votes

Comment puis-je déployer le back-end Node Js et le front-end React Js sur le serveur?

J'ai créé un back-end en utilisant Node Express qui fonctionne sur port 5000 . Et mon front-end utilisant React Js qui fonctionne sur port 3000 . Et les deux sont dans différents dossiers du répertoire racine.

Je souhaite télécharger les deux et les déployer sur Digital Ocean Server. Je suis nouveau dans ce processus de département. Comment puis-je déployer les deux sur le serveur et les exécuter par une seule commande, s'il vous plaît


0 commentaires

3 Réponses :


1
votes

Si votre front-end est create react app, vous pouvez effectuer npm run build et diffuser des ressources statiques dans nodejs via nodejs sur le même serveur. Il servira les morceaux minifiés.

app.use (express.static (path.join (__ dirname, '../client/build')));


1 commentaires

Actuellement, j'utilise npm start pour React. Seul npm run build est suffisant pour Node et React?



0
votes

Vous pouvez rendre votre application react côté serveur à partir de votre Node.js / Express, je pense que vous utilisez actuellement webpack pour rendre votre application react sur le port 3000. Si vous pouvez télécharger votre code pour jeter un coup d'œil, il sera plus facile de aide


6 commentaires

Comment utiliser webpack?


Je pense que vous utilisez déjà webpack, c'est un bundler d'actifs et a également des plugins l'un d'eux appelé dev server où vous pouvez servir votre application react, le plus simple est de vérifier si vous avez webpack.config.js et si vous avez webpack npm dépendance


Non, je n'ai pas utilisé webpack. Comment l'utiliser?


Je vous suggère donc de l'utiliser, surtout si vous prévoyez de le mettre en production, je pense que ce sera un autre sujet avec une longue réponse, donc je ferai de mon mieux ici pour vous aider à démarrer. Vous devrez installer webpack en tant que dépendance dev, puis créer webpack.config.js avec un objet de configuration qui correspond à votre application, comme par exemple module.exports = {mode: "production", // "production" | "développement" | "none" // Le mode choisi indique à Webpack d'utiliser ses optimisations intégrées en conséquence. entrée: "./app/entry", // chaîne | objet | array // par défaut à './src' // Ici l'application démarre


voici le fichier de configuration plus complet webpack.js.org/configuration


Alors, dois-je installer le module webpack ?



4
votes

Voici une façon de le faire (en utilisant le serveur de nœuds pour servir d'API pour le site Web React servi par le serveur Apache).

Vous pouvez laisser nodejs en cours d'exécution sur le port 5000 (sur le serveur distant) mais assurez-vous que vous n'utilisent pas localhost mais 0.0.0.0.

ie. app.listen (5000, "0.0.0.0") ;

Maintenant, vous devriez pouvoir communiquer avec le serveur de nœud via le nom IP / DNS public sur ce port, c'est-à-dire. myPublicIpOrDNSname: 5000 . (en supposant que vous ayez installé nodejs ainsi que npm => faites attention à la version, apt-get install nodejs , par défaut, récupérera une version plus ancienne)

Si vous avez besoin d'une version plus récente de nodejs , vous pouvez la récupérer en suivant ces étapes (vous pouvez remplacer cette partie setup_8.x avec votre version préférée).

<Directory "/var/www/html">
    RewriteEngine on
    # Don't rewrite files or directories
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    # Rewrite everything else to index.html to allow html5 state links
    RewriteRule ^ index.html [L]
</Directory>

Utilisez le serveur Apache2 pour servir vos fichiers statiques (React, css, ...) (vous n'avez pas besoin d'exécuter create -react-app server ).

sudo apt-get update
sudo apt-get install apache2

Construisez votre projet React en utilisant npm run build , puis placez les fichiers qui ont été créés dans le dossier / build (dans le dossier React) vers / var / www / html (sur le serveur distant). Notez que vous devez y placer les fichiers et dossiers du dossier / build , pas du dossier / build lui-même.

Vous devriez maintenant pouvoir voir votre site Web réagit en cours d'exécution lorsque vous tapez l'adresse myPublicIpOrDNSname (en supposant qu'Apache exécute sudo systemctl start apache2 ).

Pour qu'Apache fonctionne correctement (si vous utilisez le routage frontal - c'est-à-dire react-router-dom ), vous devez aller dans /etc/apache2/sites-enabled/000-default.conf et placez cette configuration

cd ~
curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt-get install nodejs

sous la section de ce fichier. (Apache ne connaît pas vos routes React. Cela le fera pousser toutes les requêtes qu'il ne sait pas gérer à la racine et laisser React gérer le routage)

Ensuite, vous devez vous assurer que RewriteEngine est en cours d'exécution (sinon vous obtiendrez une erreur lors du redémarrage du serveur Apache).

sudo a2enmod rewrite

Enfin, redémarrez le serveur Apache

sudo /etc/init.d/apache2 restart

Maintenant, cela devrait fonctionner.

Notez que vous devez modifier vos appels ajax dans votre React avec la nouvelle adresse IP / DNS publique.


2 commentaires

Le serveur utilise localhost . Comment le changer en 0.0.0.0


@testteam À l'endroit où vous démarrez votre serveur (ie. index.js), vous avez une ligne app.listen (5000, ...) ou server.listen (5000) < / code> ou server.listen (port, ...) ou quelque chose de similaire avec la méthode listen . Ajoutez simplement 0.0.0.0 comme deuxième argument à cette méthode ( ie. App.listen (5000, "0.0.0.0") )