天天看點

如何使用pm2自動部署Next.js項目

先在伺服器上實作遠端git的免密登陸權限

生成一組SSH密鑰

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -C "[email protected]"           

複制

将新生産的私鑰生效

ssh-agent bash && ssh-add  ~/.ssh/id_rsaexit           

複制

将下面指令輸出的公鑰複制,并配置到遠端服務

cat ~/.ssh/id_rsa.pub           

複制

實作本地到遠端git的免密登陸權限

這個步驟也可以參考上面的教程

實作本地免密登陸遠端

centos

伺服器

在使用pm2之前,我們還有一些準備工作。

我們需要将通過上面教程生成的id_rsa.pub來實作本地免密登陸遠端

Centos

伺服器

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

複制

username:使用者名

127.X.X.X:你的遠端ip位址

執行後會輸入一次密碼,然後顯示下面資訊,說明配置好了

id_rsa.pub                                    100%  402    10.2KB/s   00:00           

複制

pm2簡介

pm2(process manager)是一個程序管理工具,維護一個程序清單,可以用它來管理你的node程序,負責所有正在運作的程序,并檢視node程序的狀态,也支援性能監控,負載均衡等功能。

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

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

安裝 pm2

npm install -g pm2           

複制

使用

在伺服器上建立項目檔案夾

為了友善管理,我們在建立一個檔案夾

/opt/app/halo-xue-react-next

(路徑建議自定義,這裡隻是友善示範),進入檔案夾,将需要部署的項目 clone 到目前目錄。

mkdir /opt/app/halo-xue-react-next           

複制

執行了上面的操作後,接下來我們就需要在本地進行操作了

ecosystem.json

然後,我們在本機需要部署的項目中建立檔案

ecosystem.json

,并寫入如下内容。

{    "apps" : [{        "name"      : "halo blog",        "script"    : "server.js",  // 啟動檔案位置,需要修改        "env": {            "COMMON_VARIABLE": "true"        },        "env_production" : {            "NODE_ENV": "production"        }    }],    "deploy" : {            "production" : {                "user" : "username",   // 伺服器使用者名,需要修改                "host" : ["123.x.x.x"],  // 伺服器位址,需要修改                "ref"  : "origin/master",  // 項目branch,視情況修改                "repo" : "[email protected]", // 項目位址,需要修改                 "path" : "/opt/app/halo-xue-react-next", // 目前項目位置,需要修改                "pre-setup" : "rm -rf /opt/app/halo-xue-react-next/source", //需要修改                "post-deploy" : "npm install && npm run build && pm2 startOrRestart ecosystem.json --env production",   // 可以不修改,建議使用 cnpm 安裝                "ssh_options": "StrictHostKeyChecking=no",                "env"  : {                    "NODE_ENV": "production"            }        }    }}            

複制

更多配置參考官網:http://pm2.keymetrics.io/docs/usage/deployment/

送出

ecosystem.json

git add ecosystem.jsongit commit -m "Deploy: add ecosystem.json"git push origin master           

複制

部署pm2配置

在存在

ecosystem.json

檔案的目錄下執行下面指令。

pm2 deploy ecosystem.json production setup           

複制

成功的話,會列印如下資訊。

如何使用pm2自動部署Next.js項目

這一步,如果重複執行會提示:

fatal: 目标路徑 '/opt/app/react-next-xue/source' 已經存在,并且不是一個空目錄。

這就隻需要将這個目錄删除就可以了。 本為有一個很簡單的方案:

"pre-setup" : "rm -rf /opt/app/halo-xue-react-next/source"

這會在每次部署的時候删除source

使用pm2自動部署

在存在

ecosystem.json

檔案的目錄下執行下面指令。

pm2 deploy ecosystem.json production           

複制

成功的話,會列印如下資訊。

如何使用pm2自動部署Next.js項目