使用pm2自動化部署node專案

lentoo發表於1970-01-01

1、pm2簡介

pm2(process manager)是一個程式管理工具,維護一個程式列表,可以用它來管理你的node程式,負責所有正在執行的程式,並檢視node程式的狀態,也支援效能監控,負載均衡等功能。

1.1、使用pm2管理的node程式的好處

  1. 監聽檔案變化,自動重啟程式
  2. 支援效能監控
  3. 負載均衡
  4. 程式崩潰自動重啟
  5. 伺服器重新啟動時自動重新啟動
  6. 自動化部署專案

2、pm2安裝與使用

2.1、全域性安裝

npm install pm2 -g 
複製程式碼

2.2、常用命令

  • 啟動一個node程式
        pm2 start start.js
    複製程式碼

使用pm2自動化部署node專案

  • 啟動程式並指定應用的程式名
        pm2 start app.js --name application1
    複製程式碼
  • 叢集模式啟動
        // -i 表示 number-instances 例項數量
        // max 表示 PM2將自動檢測可用CPU的數量 可以自己指定數量
        pm2 start start.js -i max
    複製程式碼

使用pm2自動化部署node專案

  • 新增程式監視
    // 在檔案改變的時候會重新啟動程式
    pm2 start app.js --name start --watch
複製程式碼

使用pm2自動化部署node專案

  • 列出所有程式

        pm2 list
        pm2 ls // 簡寫
    複製程式碼
  • 從程式列表中刪除程式

        // pm2 delete [appname] | id
        pm2 delete app  // 指定程式名刪除
        pm2 delete 0    // 指定程式id刪除
    複製程式碼
  • 刪除程式列表中所有程式

        pm2 delete all
    複製程式碼
  • 檢視某個程式具體情況

        pm2 describe app
    複製程式碼

使用pm2自動化部署node專案

  • 檢視程式的資源消耗情況
        pm2 monit
    複製程式碼

使用pm2自動化部署node專案

  • 重啟程式

        pm2 restart app // 重啟指定名稱的程式
        pm2 restart all // 重啟所有程式
    複製程式碼
  • 檢視程式日誌

        pm2 logs app    // 檢視該名稱程式的日誌
        pm2 logs all    // 檢視所有程式的日誌
    複製程式碼
  • 設定pm2開機自啟

開啟啟動設定,此處是CentOS系統,其他系統替換最後一個選項(可選項:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)

    pm2 startup centos 
複製程式碼

然後按照提示需要輸入的命令進行輸入

最後儲存設定

pm2 save
複製程式碼

3、通過pm2配置檔案來自動部署專案

確保伺服器安裝了pm2,沒有安裝的話先安裝

npm install pm2 -g
複製程式碼

3.1 在專案根目錄下新建一個 deploy.yaml 檔案

# deploy.yaml
apps:
  - script: ./start.js       # 入口檔案
    name: 'app'              # 程式名稱
    env:                     # 環境變數
      COMMON_VARIABLE: true
    env_production:
      NODE_ENV: production

deploy:                     # 部署指令碼
  production:               # 生產環境
    user: lentoo            # 伺服器的使用者名稱
    host: 192.168.2.166     # 伺服器的ip地址
    port: 22                # ssh埠
    ref: origin/master      # 要拉取的git分支
    ssh_options: StrictHostKeyChecking=no # SSH 公鑰檢查
    repo: https://github.com/**.git # 遠端倉庫地址
    path: /home              # 拉取到伺服器某個目錄下
    pre-deploy: git fetch --all # 部署前執行
    post-deploy: npm install &&  pm2 reload deploy.yaml --env production # 部署後執行
    env:
      NODE_ENV: production
複製程式碼

3.2、配置git的ssh免密認證

  1. 在伺服器中生成rsa公鑰和私鑰,當前是 centos7 下進行

  2. 前提伺服器要安裝git,沒有安裝的先安裝git,已安裝的跳過

        yum –y install git
    複製程式碼
  3. 生成祕鑰

        ssh-keygen -t rsa -C "xxx@xxx.com"
    複製程式碼

    在~/.ssh目錄下有 id_rsa和 id_rsa.pub兩個檔案,其中id_rsa.pub檔案裡存放的即是公鑰key。

  4. 登入到GitHub,點選右上方的頭像,選擇settings ,點選Add SSH key,把id_rsa.pub的內容複製到裡面即可。

使用pm2自動化部署node專案

3.3 使用pm2部署專案

每次部署前先將本地的程式碼提交到遠端git倉庫

  • 首次部署
pm2 deploy deploy.yaml production setup 
複製程式碼

部署完成後,既可登陸伺服器檢視配置的目錄下是否從git上拉取了專案

  • 再次部署
pm2 deploy deploy.yaml production upddate
複製程式碼

3.4 該部署流程同樣適用前端專案

如vue-cli的專案,自動部署到伺服器,自動執行npm run build 命令,生成的dist目錄,指定到nginx的靜態檔案目錄下。

4、可能會遇到的坑

  • 在window系統下 vscode的命令列程式,以及powershell執行部署的命令時,出現部署失敗
pm2 deploy deploy.yaml production setup 
複製程式碼

使用pm2自動化部署node專案
解決方案:使用git命令列來執行

公眾號

歡迎關注我的公眾號“碼上開發”,每天分享最新技術資訊。關注獲取最新資源

使用pm2自動化部署node專案

相關文章