PM2 自動化部署項目 之 (Vue SSR)

背景

常規部署項目比較傳統的方式通過上傳工具直接上傳文件替換服務器文件, 也可以通過Xftp 方式來更新/發佈指定站點。隨着項目複雜度的增強,開發技術等手段增多。一些部署方式顯得有點力不從心,且操作過程,失誤率很難把控。
本章將基於現在比較流行的一套開發模式(如: VUE + SSR) 輸出的項目來了解如何通過PM2 來實現自動化部署我們的站點項目。

== 必須說的一點是:本章重點不在PM2 相關知識,其相關知識及原理將在後續章節中介紹。 這裏我假設你對PM2已經有了基本的瞭解==
如果不瞭解可以先跳到這篇文章瞭解其內關於pm2的相關簡介: vue 服務端部署

另外: 我這裏用的是阿里雲 CentOS 7.4 64位

PM2 簡介

pm2(process manager)是一個進程管理工具,維護一個進程列表,可以用它來管理你的node進程,負責所有正在運行的進程,並查看node進程的狀態,也支持性能監控,負載均衡等功能。

使用pm2管理的node程序的好處

MP2自動部署實踐

pm2 自動部署主要流程我概括爲如下幾點:

  • 服務端SSH關聯部署項目的git 倉庫 (無密獲取git倉庫代碼)
  • 本地機器SSH關聯到遠程服務器 (無密連接部署服務器)
  • 通過pm2 在項目根目錄下生成 ecosystem.config 部署相關配置文件
  • 本地提交代碼至git 倉庫並通過pm2 命令實現自動部署

下面我開始針對如上幾點一一分析講解

服務端SSH關聯部署項目的git 倉庫

我們都知道,開發過程中我們需要從git 倉庫中先clone 代碼到本地。git clone/pull/push 有個特點: https 模式下每次獲取代碼都需要校驗賬號及密碼。 這比較麻煩,所以我們可以通過SSH 方式來建立本地與git 倉庫之間公/私鑰鑑權驗證來解決這個問題。 即通過:ssh-keygen 命令生成公鑰/私鑰文件。 具體的生成過程看這篇文章 Git SSH 之 公鑰/私鑰

==這裏我假設你已經知道如何生成SSH KEY ==

生成ssh key 後, 可以通過如下命令來輸出公鑰到命令控制檯:

cat ~/.ssh/id_rsa.pub

然後複製粘貼到github 添加公鑰-> 公鑰 即可。 這裏我用的是碼雲 gitee, 用起來都是一樣的,只是它運行個人擁有多個私人項目。
圖1 生成ssh key
在這裏插入圖片描述
圖2: 輸出公鑰到命令行:

在這裏插入圖片描述

本地機器SSH關聯到遠程服務器

這裏簡單補一下 ssh key 的工作原理
在這裏插入圖片描述
: ssh key通過ssh-keygen命令生成公鑰文件和私玥文件,私玥存本地,不告訴其他人。把公鑰放到需要認證的服務器。然後通過ssh登錄,會進行公私鑰認證。匹配成功即實現無密碼登錄。

  • 本機生成ssh key 命令:

// 一路 ‘回車‘ 到生成即可
ssh-keygen -t rsa  -C "[email protected]"  (xxxx 爲自己在git中註冊的郵箱)

  • 如何快速將本地生成的id_rsa.pub(公鑰) 拷貝到遠程服務器指定鍵值內

本地通過 cmd 命令行:

// ~ : 表示公鑰路徑, 直接這麼寫就行, 系統會識別並查找到這個路徑
// root:爲你遠程服務器登錄名
// @xxxxx:後面的xxx 爲你遠程服務器的對公IP

scp ~/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys

如上命令輸入回車後,如果成功通過ssh 連接遠程服務器發現不在提示輸入密碼, 直接連接成功。(如: ssh [email protected]

圖3: 拷貝公鑰至遠程服務器在這裏插入圖片描述

通過pm2 在項目根目錄下生成 ecosystem.config 部署相關配置文件

  • cmd 定位到項目根下 輸入(請確保已全局安裝了 pm2):
pm2 ecosystem

根目錄下自動創建 ecosystem.config.js 文件。
內容如下:

module.exports = {
  apps : [{
    name: 'package.json 對應name', //也可自己起一個
    script: 'public',  // 這裏你的build 輸出目錄

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    // 環境變量
    env: {  
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],
 // 重點
  deploy : {
    production : {
      user : 'root',  // 遠程服務器登錄名
      host : 'xx.xx.222.131',  // 遠程服務器對公 IP
      ref  : 'origin/master', // 部署的分支
      repo : '[email protected]:chenzhizhuo/projectName.git',  // 這裏是你的ssh 倉庫地址
      path : '/root/projects/production', // 項目部署的路徑(也是git clone 路徑)
      // 如果你需要在部署服務器上build 可以添加 & npm run build 命令 (我是本地構建好一起提交到git,減輕服務端內存不足等問題)
      'post-deploy' : 'npm install && pm2 reload pm2.yml --env production'  // 這裏pm2 遠程部署指令  (pm2.yml 爲pm2的啓動配置文件)
    }
  }
};

這裏順便貼一下我的 pm2.yml 文件源碼:

apps:
  - script: ./server/server.js // 服務端啓動及數據/模板生成等邏輯實現
    name: vue_xxxx_mobile // 這裏最好對應你的package.json 中的name名稱
    env_production:
      NODE_ENV: production  // 啓動後服務端注入的環境變量
      HOST: localhost // 本地ip/localhost
      PORT: 7788  // 啓動服務監聽的端口

本地提交代碼至git 倉庫並通過pm2 命令實現自動部署

注: 建議通過git base 來執行pm2 部署相關命令。 其它工具部分會出現位置異常。

  • 部署前請確保你已提交了本地修改到git 倉庫
  • 自動部署命令:

// 首次部署先執行該命令(拉去git 代碼)
pm2 deploy ecosystem.config.js production setup 

//  非首次/首次上一命令已執行完 則執行改命令(真正執行 ecosystem.config中的 post-deploy命令)
//   執行命令每次部署服務器都會拉取最新git 代碼然後依次執行 ecosystem.config中的 post-deploy命令
pm2 deploy ecosystem.config.js production(再次部署:執行安裝及pm2啓動)

注: 因爲我的項目是本地打包好一起將打包文件build 到git, 所以不需要再部署服務器重新build 。

  • 自動部署過程可能遇到的錯誤
    錯誤如:git clone 沒有權限; deploy Host key verification failed
    在這裏插入圖片描述
    解決辦法 (重點)
    此問題主要是在遠程服務器中,並未將http://github.com加入known_hosts。
    在服務器端通過如下命令設置:
    如果代碼是放在碼雲上面 則 應該將 gitee.com 加入known_host,在服務器通過如下命令設置:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
ssh-keyscan -t rsa gitee.com >> ~/.ssh/known_hosts   // 碼雲gitHub

注: 如上兩個命令在遠程服務器上執行; 執行完成後可以嘗試重啓一下你服務器,重啓後再執行一次部署命令。

圖4 : 自動部署成功:
在這裏插入圖片描述

到這裏pm2 自動化部署項目就告一段落了。 後續會繼續分享文章開頭提到的pm2 好處/有點 的其它項分享~
文章中如有錯誤的地方,可回覆留言一起討論。 謝謝!

最後, *如果覺得本文章對你有幫助,記得點贊支持喲! *

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章