Nuxt + Typescript最佳实践6:使用pm2运行nu

2020-05-25  本文已影响0人  kruz

nuxtjs是nodejs服务器渲染项目,部署在linux服务器才能最好的发挥它的作用,这里介绍下如何用pm2发布。

我们直接使用npm run start这种方式运行的时候占用了窗口进程,也不行进行别的交互了,如果按住了Ctrl + C 就退出了nodejs服务, 当然也可以用nohup直接让他在后台运行,不过这个都不如pm2方便。pm2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。

步骤

首先你需要执行build打包, 不管你是客户端打包还是服务器打包。
一般是:

yarn build  #最终执行的是 nuxt build

编译后多出了一个 .nuxt文件夹,是编译后的文件

+--components
+--dist 
+--mixins
+--views
+-- App.js
// +-- 等等

记住这个文件夹很重要就完了。

编译完成之后,服务端运行:

yarn start  #实际上执行: node server/index.js

实际上编译完成之后,服务端运行只需要下面几个文件夹了,如果创建docker只需要这几个文件夹的内容即可。

.nuxt   #编译后的vue代码,路由等
node_modules  #依赖
server   #服务端入口
static    #静态资源目录
nuxt.config.js #配置
package.json #命令所在配置

当然我们不能直接执行,要用pm2来执行。
就一句话

pm2 start  npm --name '项目名' -- run start --watch

运行并自动重启。

看看pm2的命令, 额,真的是多,不过常用的就几个:

参数说明

所以我们为了方便标记我们需要给项目一个名字,然后项目可以自动重启。所以只需要这样写既可。

pm2 start  npm --name '项目名' -- run start --watch

为了配合自动发布,脚本可以联合起来写


cd /data/mydemo #进入项目目录
git checkout .  #丢弃修改
git checkout master   #切换到分支
git pull  #拉取最新代码
yarn  && yarn project1-build  #更新,执行编译
#检查是不是已经启动过,启动过就重新启动, 没启动就启动
# 获取他的pid,如果存在就是一个正整数, 判断它存在就可以重启了
pm2 pid mydemo
if [[ `echo $?` =~ ^-?[0-9]+$  ]]; then
    pm2 restart mydemo 
    exit
fi
pm2 start npm --name mydemo -- run start --watch

如何平滑更新?

上面的发布方式,pm2重启可以做到用户无感知,但是重启之前有个编译的过程,编译的时候会删掉dist文件夹,这样就可能导致一些文件路径失效,导致网站无法的可能性。

1.编译到新目录,一次重启

每次编译文件到新文件夹,编译完成后修改pm2的启动路径,这样重启不会导致长时间不能服务状态。

2.nginx负载均衡

如果是部署在多台服务器,利用负载均衡,一台服务器停止nodejs服务后,重新编译启动。也可以达到目录。
参考 不停机更新:基于 PM2

上一篇 下一篇

猜你喜欢

热点阅读