1. 程式人生 > >使用pm2實現nuxt.js的平滑重啟

使用pm2實現nuxt.js的平滑重啟

環境依賴

  • 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