使用pm2实现nuxt.js的平滑重启

本文介绍了如何利用pm2在Linux环境下平滑管理并重启nuxt.js项目,通过修改nuxt.config.js的端口号,配合nginx进行反代切换,实现项目的自动部署和无缝更新。并提供了一个自启脚本来自动化此过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境依赖

  • nuxt.js
  • pm2
  • nginx
  • linux

原理

使用pm2来管理nuxt,启动两个不同端口的项目,再利用nginx切换反代端口
具体流程

  • 修改对应的项目文件
  • 修改nuxt.config.js代理的端口号(在配置项中写port,就可以修改端口号,不需要用官网上说的那套)
  • 编译项目
  • 由pm2启动新的进程
  • 切换nginx代理的端口号
  • pm2关闭旧进程
以上操作如果全由人工操作,相当的繁琐,因此我写了一个自启脚本

代码如下

# 初始化变量
#
 oldPort=3000
 newPort=3001
#
 cd /usr/diy/project/node/school/
#
# # 判断需要使用的端口
 result=$(grep "3001" nuxt.config.js)
 if [ -n "$result" ]; then
#       找到3001端口
        oldPort=3001
        newPort=3000
        fi

#               # 修改端口号
        echo "原node端口号为:$oldPort,修改为$newPort"
        sed -i "s/$oldPort/$newPort/g" nuxt.config.js
#
#               # 重新编译项目
        echo "正在编译项目..."
        result=$(npm run build)
#               # echo "$result"
#               echo "------"
#               #result=$(grep "ERR" "$result")
#               #echo "$result"
#       if [ -n "$result"]; then
        if [[ $result =~ "ERR" ]]; then
#               # 编译失败
                echo "--$result编译错误,请手动编译查看错误"
#
        else
#                               # app name
                name="school-$newPort"
        # 判断是否使用该端口启动pm2
        result=$(pm2 list | grep "$name")
        if [ -z "$result" ]; then
                echo "初次启用pm2,app name:$name"
                # 没有使用过该端口
                pm2 -n $name start ./node_modules/nuxt/bin/nuxt -- start
        else
                echo "重启pm2,app name:$name"
                # 使用过该端口
                pm2 start $name
        fi
        echo "更换nginx代理端口,原端口:$oldPort,修改为:$newPort"
        sed -i "s/$oldPort/$newPort/g" /usr/diy/runtime/nginx/conf/vue.conf
        echo "重启nginx"
        nginx -s reload
        echo "停止旧pm2 app name:school-$oldPort"
        pm2 stop "school-$oldPort"

fi
#
#

目前使用3001和3000端口来回切换
其中pm2启动命令为pm2 -n name start ./node_modules/nuxt/bin/nuxt – start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值