ec2实例网址显示的是文件,而不是运行App

时间:2019-04-26 19:25:51

标签: amazon-web-services amazon-ec2 pm2

我已经在ec2实例中部署了react + node应用程序,并安装了pm2在后台运行该应用程序。 当我运行 npm运行build server -s build 时。 ec2实例正在运行并且可以完美访问应用程序,但是我安装了pm2并使用 pm2 start serve 来运行该应用程序 该应用程序成功运行 enter image description here

但是当我访问ec2实例URL时,我正在获取ec2用户的文件结构,而不是获取网站

enter image description here

昨天一切工作正常,但突然如此显示? 请检查并给我您宝贵的反馈意见

1 个答案:

答案 0 :(得分:2)

有很多构建和服务的方式。

pm2 serve执行静态文件服务。 命令是pm2 serve ./build <PORT> 并检查您是否在其中提供了文件夹路径[即./build在此处]。 确保您已经完成yarn build


方法1

我猜您是从./build目录提供它的。 它主要包含静态文件

因此,您可以做的是创建一个简单的快递服务器,该服务器可以为./build中的那些文件提供服务

将此文件添加到您的项目目录中:

server.js

const express = require("express");
const path = require("path");
const app = express();

app.use(express.static(path.join(__dirname, "build")));

app.get("/*", function(req, res) {
  res.sendFile(path.join(__dirname, "build", "index.html"));
});
const PORT =process.env.FRONT_PORT || 9000;
app.listen(PORT,()=>{
  console.log('listning at :' + PORT)
});

如您所见,在上面我已经使用过express.js,您也必须安装它(npm i express -S)。

现在,您只需转到项目目录,然后像这样启动您的应用程序: pm2 start server.js --name <NAME OF THE AP>

请确保在开始该Abve命令之前,使用yarn build进行构建,它将创建一个构建目录,并且我们正在server.js内使用它。


方法2

按照上述步骤操作,并同时添加server.js。 现在也可以使yarn build自动化。

现在在start.sh所在的位置创建一个server.js文件。

start.sh

#!/bin/bash
yarn build && node ./server.js

您可以通过pm2 start start.sh --name <APP NAME>运行它 它将构建并运行server.js。

*注意::最后一个过程,即在cpu或资源非常低的情况下(例如,如果您使用t.micro之类的东西,可能无法进行纱线成型。< / p>