如何在一台服务器上部署 nodejs api 和 vuejs 应用程序

how to deploy nodejs api and vuejs app in one server

我开发过 node rest api 和 vuejs web 应用程序, 我正在尝试将这两个项目部署到一个 运行 ubuntu 的 aws 服务器中。 两个应用程序都有不同的端口, domain 我尝试为 api 配置 api.example.com,为 vue app 配置 example.com。 在 SSH 中 运行 执行命令后,我可以 运行 这两个应用程序一次,但我需要它们永远 运行 它。 我做了什么,

  1. 单独部署到应用程序
  2. 应用可以通过端口访问

我需要他们访问

  1. api.example.com
  2. example.com

步骤是什么, 任何更改主机文件。

这就是我们从同一台服务器 运行 连接我们的 VueJS UI 和 ExpressJS REST API 的方式。

我们正在使用 PM2 管理我们的服务。

VueJS(开发环境,您可以在生产环境中添加相同的设置)

package.json 中添加 "start": "HOST='0.0.0.0' PORT=80 npm run dev",,其中 80 是 VueJS 正在侦听的端口,到 "scripts": {..} 数组。然后,在安装 PM2 之后,(对于开发人员)我们可以使用 cd /location/of/vue/root; sudo pm2 start npm run dev --name Vue -- start 启动 VueJS。 (确保 Apache 不是 运行ning)。

请注意,将 HOST 设置为 0.0.0.0 很重要。不要将其设置为 LocalHost 或您的服务器 IP 地址,否则您可能 运行 出现问题。

ExpressJS

/location/of/express/app.js 中添加类似于文件底部的内容: app.listen(process.env.PORT || 8081),其中 8081 是您的 REST API 应该监听的端口。然后我可以用 sudo pm2 start /location/of/express/app.js --name Express

开始

此时,VueJS 应该在 www.example.com(隐含端口 80)可用,REST API 将在 www.example.com:8081 可用。

如果您想让 api.example.com/ 指向 API,您需要确保您的 DNS 将 "api" 子域指向所需的端口,或者您可以必须如上所述将端口添加到 URL。

此外,您还可以通过 PM2 以及 pm2 logs APPNAME --lines 100 轻松跟踪日志。

我找到了另一种不使用 PM 在一台服务器上部署 vue 应用程序和 express/nodejs 的方法。这就是我所做的

  1. 使用 npm run build 命令构建你的 vue 代码。这将创建一个文件夹 dist,其中应包含 index.html 文件和 static 文件夹。
  2. dist 文件夹复制到您的服务器代码存储库中。在我的例子中,我创建了一个文件夹 public 并将 dist 文件夹移动到 public.
  3. app.js 文件中 module.exports=app 行之前,复制以下代码行

    //These 2 lines make sure that vue and express app are coming from the same server. app.use('/static', express.static(path.join(__dirname,"../public/dist/static/"))); app.get('/', function(req,res) { res.sendFile('index.html', { root: path.join(__dirname, '../public/dist/') }); });

第一行确保 /static 文件夹可访问,第二行将在 运行 节点服务器时提供 index.html 文件。组件之间的路由将由 vue 处理。