PM2部署Nuxt2.0 的问题

来源:10-4 部署发布电影网站并连接线上 MongoDB

慕虎6697118

2019-03-14

老师您好!
我在部署过Nuxt2.0过程中遇到了以下问题:
1. 部署脚本中的post-deploy的值为:yarn && yarn run start 时,首次部署正常,修改代码再次执行 pm2 deploy ecosystem.json production 时,显示 post-deploy hook failed .
2. 部署脚本中的post-deploy的值为:yarn && pm2 startOrRestart ecosystem.json --env production 时,首次部署正常,修改代码再次部署时 pm2 logs 报错: ERROR Server resources are not available!

问题:

  1. 如何在部署时让PM2判断如果进程已存在的情况下自动构建后重启进程?
  2. 假设正式项目中需要部署一个测试环境和一个正式环境,那么ecosystem.json应该如何配置呢?

图片描述

图片描述

已补充图片

20190318补充
图片描述

图片描述

新增问题描述:
在部署测试环境时(假设测试环境为perdeploy分支),部署成功后如何区分测试环境与正式环境呢?有尝试过在测试环境的部署脚本添加参数,但是无效。
请问老师,正确的方式是什么呢?

20190320 更新:
删除apps数组里的name 字段,并在deploy中的测试环境脚本添加 --name 'XX’
实测发现:部署测试环境成功,服务器返回了新增的一个实例,但名称显示为入口文件名称
请问老师,这个地方怎么传值才对呢?
图片描述

写回答

5回答

Scott

2019-03-31

不用试 name 了应该是不支持的。


可以换一种变通的办法,就是创建两份 ecosystem.json,比如


ecosystem-prod.json

ecosystem-test.json


两个配置文件里,分别配置两个不同的应用名字,发布到服务器的不同目录,用这种方式试试呢

0
1
慕虎6697118
谢谢老师!最终是用这种方式解决的。
2019-05-06
共1条回复

Scott

2019-03-23

哦哦我的锅,post-deploy 里面是不能这样传的。

看到文档是没看到这个配置项

https://pm2.io/doc/en/runtime/guide/easy-deploy-with-ssh/


你试试把 name 分别传入到 perdeploy 里面,覆盖下试试


"name": "xxxTest"

0
1
慕虎6697118
老师您好,还是不太明白您说的意思,在哪里将 name 字段传入呢?
2019-03-25
共1条回复

Scott

2019-03-20

把 = 拿掉试试,改成 --name xxxTest 和 --name xxxProd


如果还没生效,可以把 apps 里面的 name: 这一行删掉试试,看是不是它的优先级高于命令行里面的 name 优先级

0
1
慕虎6697118
老师好,注释apps 里面的name 后部署可新增实例,但名称好像没有起作用,只是显示了入口文件的名称,这个地方该如何传值才对呢?
2019-03-20
共1条回复

Scott

2019-03-17

pm2 再次启动需要用 restart,感觉你的命令没有跟课程保持一致哈,比如


pm2 startOrRestart ecosystem.yaml --env production


实际上真正起作用的是 startOrRestart 这个指令,如果存在已有的服务,它会尝试把它重启

0
2
慕虎6697118
已补图,麻烦老师有空看一下,谢谢~!
2019-03-18
共2条回复

Scott

2019-03-14

可以把 ecosystem.json 和项目的 package.json 完整贴出来我看下哈

第二个问题只需要配置多个部署任务就好了,不同的任务启动不同的脚本,部署到不同的服务器,或者同一个服务器的不同目录就好了

0
2
慕虎6697118
老师,请问部署多个任务时,是在deploy里面多加一个字段,写出类似production 一样对应的字段就可以么?
2019-03-16
共2条回复

Node.js项目线上服务器部署与发布

阿里云部署Node.js+MongoDB+Nginx的应用项目,打通全栈

1747 学习 · 448 问题

查看课程