如何将MERN堆栈部署到托管服务?

时间:2019-02-24 17:33:48

标签: node.js reactjs deployment nodemon mern

我是Web开发的新手,我有一个托管服务,我想在上面部署我的reactjs / node项目。要以前部署它,我只是上传了通过运行npm run build创建的build文件夹。此后,我使用MERN堆栈向mongodb数据库添加了连接。

该项目最初是使用create-react-app创建的,然后按照本教程https://appdividend.com/2018/11/11/react-crud-example-mern-stack-tutorial/设置了后端节点/ mongodb。我所有的服务器代码都包含在api文件夹的project文件夹中。

通过运行npm startnodemon server.js(来自api文件夹)并连接到终端中的mongodb,我可以在本地主机上运行项目。当我尝试以与以前相同的方式从托管服务运行它时,它说它无法连接到数据库,我认为这是由于该连接未在我的计算机上打开。

当前,所有API调用都使用axios张贴到http://localhost:4000/,我还假定这在服务器上将不起作用。我已经在网上寻找有关部署MERN堆栈的信息,但是我发现的所有对象都讨论了在AWS EC2上进行托管的问题,这不是我要做的。

我将如何部署到托管服务? 我应该寻找任何参考或地方吗?

编辑:我已经使用MongoAtlas连接到数据库,所以我使用的是SRV地址。我认为问题是使用本地地址的axios帖子,因为服务器上的应用程序仅在本地计算机上运行nodemon时才起作用。我应该用什么地址代替这个地址?

4 个答案:

答案 0 :(得分:0)

  

当前,所有API调用都使用axios帖子发布到http://localhost:4000/,我还假定这在服务器上将不起作用。

您是正确的,这是行不通的。这是因为,如果用户获得了您的 React应用,则所有API调用都将重定向到他们的localhost 。哪个不包含您的API

  

当我尝试以以前的方式从托管服务运行它时,它说它无法连接到数据库,我认为这是由于该连接在我的计算机上未打开。

>

那可能是因为MongoDB URL可能仍设置为'mongodb://localhost:27017/myapp之类的东西。这里有2个主要选项。

  1. 使用MongoDB Atlas 之类的“数据库托管服务” ,然后您需要更改数据库的URL以指向该服务提供的URL < / li>
  2. 将数据库托管在您的服务器上,它将与localhost URL一起使用
  

我一直在网上寻找有关部署MERN堆栈的信息,但是我发现的所有对象都讨论了在AWS EC2上托管的问题,这不是我要做的。

  • 您拥有控制权和灵活性的任何服务器在这种情况下均可使用。您可以根据需要托管所有内容(服务器,前端和数据库)。 EC2可以完成所有操作,但这不是您唯一的选择。您还可以从Microsoft和Google等处查看类似产品...
  • 另一种可行的方法是分别部署每个工件,它具有更高的可伸缩性,但同时也带来了其自身的复杂性。如果您采用这种方式,则可能需要研究 Docker containersKubernetes ,它们对于编排分布式系统很有用

编辑

由于您使用的是MongoDB Atlas,请确保将服务器的IP地址列入白名单

答案 1 :(得分:0)

是的,是的,您将必须在托管服务器(已经建立)中部署服务。 您可以查看多种解决方案 有 Digital Ocean (数字海洋)

how to setup nodejs app for prod

how to install mongodb on ubuntu

还有Heroku。为此,这里有完整的教程

prepare and deploye mern stack

正如我所说,除了这些以外,还有多种解决方案。希望这会有所帮助

答案 2 :(得分:0)

在前端,您需要设置一个axios配置,该配置将根据运行环境指向正确的URL:

utils / axiosConfig.js (我喜欢使用名称app使其与express保持内联,但是您可以为它起任何名字)

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
});

然后,无论您在哪里进行API调用,都可以利用此配置:

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

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

现在,它可以将请求发送到http://localhost:5000/api/examplehttp://example.com/api/example

在您的client package.json中,您可以指定环境:

 "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",
  },

答案 3 :(得分:0)

TLDR;

为了运行基于 nodejs 的应用程序,您需要拥有自己的服务器。

详情

您可能已经共享的托管计划,其中大部分不提供几个第三方和开源项目。 (或者的NodeJS码头工人)

有关启动,我建议寻找到

  1. 如何可以得到一个管理VPS(虚拟专用服务器)提供Docker容器。将您的应用程序包装在 docker 容器中并将其上传到您的服务器。 (亚马逊,天青等)。

  2. 其他更便宜的选择是获得一个非托管的VPS,你就必须自己安装操作系统,安装依赖,DB,防火墙等)。不要被它们的名字吓着了。

  3. 购买一台专门的服务器,安装所需的所有东西,您的域名申请一个静态IP指向您的静态IP地址。

第三个选项是可扩展的,从长远来看更便宜,但它是个好东西,了解服务器及其并发症的几件事情。

相关问题