使用pm2實現nuxt.js的平滑重啟
阿新 • • 發佈:2018-12-20
環境依賴
- 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