web-dev-qa-db-fra.com

Comment déployer la pile MERN sur un service d'hébergement?

Je suis nouveau dans le développement web et j'ai un service d'hébergement sur lequel je souhaite déployer mon projet reactjs/node. Pour le déployer précédemment, j'avais simplement téléchargé le dossier de construction créé à partir de l'exécution de npm run build. J'ai depuis ajouté une connexion à une base de données mongodb en utilisant la pile MERN.

Le projet a été initialement créé à l'aide de create-react-app, puis j'ai configuré mon nœud backend/mongodb en suivant ce tutoriel: https://appdividend.com/2018/11/11/react-crud-example-mern -stack-tutorial / . Tout mon code serveur est contenu dans le dossier du projet dans un dossier api.

Je peux exécuter le projet sur l'hôte local en exécutant npm start, nodemon server.js (à partir du dossier api) et connexion au mongodb dans le terminal. Lorsque j'essaie de l'exécuter à partir du service d'hébergement de la même manière que précédemment, il indique qu'il ne peut pas se connecter à la base de données, ce qui, je suppose, est dû au fait que la connexion n'est pas ouverte sur ma machine.

Actuellement, tous les appels API utilisent axios post pour http: // localhost: 4000 / , ce qui, je suppose, ne fonctionnera pas sur le serveur. J'ai cherché en ligne des informations concernant le déploiement de la pile MERN, mais toutes celles que j'ai trouvées en discutent en termes d'hébergement sur AWS EC2, ce qui n'est pas ce que je ferai.

Comment pourrais-je déployer sur mon service d'hébergement? Y a-t-il des références ou des endroits où je devrais rechercher ces informations?

Edit: je me suis connecté à la base de données en utilisant MongoAtlas, donc j'utilise une adresse SRV. Je pense que le problème est que les messages axios utilisent l'adresse localhost, car l'application sur le serveur ne fonctionne que si j'ai nodemon en cours d'exécution sur ma machine locale. Quelle adresse dois-je utiliser à la place de celle-ci?

5
Meghan King

Sur le front-end, vous voudrez mettre en place une configuration axios qui pointera vers l'URL correcte en fonction de l'environnement en cours d'exécution:

tils/axiosConfig.js (J'aime utiliser le nom app pour le garder en ligne avec express, mais vous pouvez le nommer comme bon vous semble)

import axios from 'axios';

const env = process.env.NODE_ENV; // current environment

export const app = axios.create({
  baseURL:
    env === 'production'
      ? 'http://example.com/api/' // production
      : 'http://localhost:5000/api/', // development
});

Ensuite, vous pouvez utiliser cette configuration partout où vous effectuez un appel d'API:

import { app } from '../utils/axiosConfig.js';

app.get("example");
app.post("example");
...etc

Maintenant, il peut envoyer des demandes à http://localhost:5000/api/example ou http://example.com/api/example.

Dans votre client package.json, vous pouvez spécifier l'environnement:

 "scripts": {
    "start": "NODE_ENV=development webpack-dev-server",
    "build": "NODE_ENV=production webpack",
    "stage": "NODE_ENV=staging webpack",
    "test": "NODE_ENV=testing jest --watchAll --coverage",
  },
1
Matt Carlotta

Eh bien, oui, vous devrez déployer votre service sur un hébergement (déjà établi). Il y a plusieurs solutions que vous pouvez étudier, il y a Digital Ocean Regardez ces quelques liens

comment configurer l'application nodejs pour prod

comment installer mongodb sur ubunt

Il y a aussi Heroku. pour cela il y a un tutoriel complet pour ça ici

préparer et déployer la pile de mern .

Comme je l'ai dit, il existe également plusieurs solutions. J'espère que cela t'aides

0
Jazib