先在伺服器上實作遠端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
伺服器
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程式的好處
- 監聽檔案變化,自動重新開機程式
- 支援性能監控
- 負載均衡
- 程式崩潰自動重新開機
- 伺服器重新啟動時自動重新啟動
- 自動化部署項目
安裝 pm2
npm install -g pm2
複制
使用
在伺服器上建立項目檔案夾
為了友善管理,我們在建立一個檔案夾
/opt/app/halo-xue-react-next
(路徑建議自定義,這裡隻是友善示範),進入檔案夾,将需要部署的項目 clone 到目前目錄。
mkdir /opt/app/halo-xue-react-next
複制
執行了上面的操作後,接下來我們就需要在本地進行操作了
ecosystem.json
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
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
複制
成功的話,會列印如下資訊。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwIjNx8CX39CXy8CXycXZpZVZnFWbp9zZuBnLwIGM2QzYlVjYmFTOlN2NwE2YwcjM0YjMwMWN1QWYlR2LcljM2cDNxkzLcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
這一步,如果重複執行會提示:
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
複制
成功的話,會列印如下資訊。