1. 程式人生 > 實用技巧 >PM2實現Nodejs專案自動部署

PM2實現Nodejs專案自動部署

首先簡單說下思路:本地git倉庫與遠端倉庫關聯(github、碼雲等平臺),然後pm2按照指定配置登入伺服器,拉取遠端倉庫的程式碼更新,再執行一些指定的命令(如打包等)。

建立本地專案並關聯到遠端倉庫

本地新建名為web的專案,進入專案並建立一個簡單的Nodejs檔案app.js,

mkdir web && cd web
vi app.js

檔案內容編輯如下,完成後儲存退出:wq!。

// app.s

const http = require('http');

const homePage = `
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css
"> * { padding: 0; margin: 0; } body { padding: 30px 0; text-align: center; font-size: 16px; background-color: #333; } h1,h2 { color: #fff; } nav { margin-top: 20px; } a { color: #ccc; cursor: pointer; } a:hover { text-decoration: underline; } </style> </head> <body> <h1>Nodejs部署示例專案</h1> <h2>專案部署上線示例</h2> <nav> <ul> <li><a>列表</a></li> </ul> </nav> </body> </html> ` http.createServer((req,res) => { res.statusCode = 200; res.setHeader('Content-Type','text/html'); res.end(homePage); }).listen(3000, () => { console.log('Sever Running On 3000:'); })

把本地專案放到遠端倉庫,可選Github或者碼雲等平臺。首先檢視本地是否生成過.ssh目錄及目錄下是否有私鑰及公鑰檔案

ls~/.ssh

如果存在,跳到下一步。如果不存在id_rsa、id_rsa.pub檔案,需要先生成一下:

"youemail"填寫你的郵箱
ssh-keygen -t rsa -C"youremail"
  1. 檢視本地公鑰的內容並複製內容新增到遠端倉庫
cat ~/.ssh/id_rsa.pub

本地倉庫關聯遠端倉庫的其他操作這裡就不贅述。

伺服器從遠端倉庫拉取專案

伺服器環境:阿里雲的ecs,系統是Ubuntu 14.06

這一步後面是不需要手動操作的,但我們要做好配置,這裡可以先手動拉取遠端程式碼測試一下是否配置成功。

  1. 確保伺服器已安裝NodeJs、git、pm2,未安裝的話自行百度。
  2. 複製伺服器的公鑰並新增到遠端倉庫,操作步驟同本地的2、3、4步。
  3. 定位到使用者目錄,拉取遠端倉庫確保可以拉取成功,若成功的話這個專案目錄刪除即可。
xxxx為你遠端倉庫的專案地址
cd ~
git clone xxxx

專案中配置pm2自動部署檔案

在本地專案中新建配置檔案ecosystem.json,這裡為了方便理解添加了註釋,但json檔案不能有註釋,記得去掉。

{
    "apps":[
        {
            "name": "website", // 專案名稱
            "script": "app.js", // 入口檔案
            "env": {
                "COMMON_varIABLE": "true"
            },
            "env_production": {
                "NODE_ENV": "production" // 環境變數
            }
        }
    ],
    // 環境部署的配置,此處只以production為例
    "deploy": {
        "production": {
            // 登入伺服器的使用者名稱
            "user":"slevin",
            // 伺服器ip
            "host": ["47.75.191.199"],
            // 伺服器ssh登入埠,未修改的話一般預設為22
            "port": "22",
            // 指定拉取的分支
            "ref": "origin/master",
            // 遠端倉庫地址
            "repo": "[email protected]:mslevin/website.git",
            // 指定程式碼拉取到伺服器的目錄
            "path": "/www/website/production",
            "ssh_options": "StrictHostKeyChecking=no",
            "env": {
                "NODE_ENV": "production"
            }
        }
    }
}

伺服器相關配置

配置檔案中指定了存放專案的目錄/www/website/production,但可能並不存在,需要手動新建:

mkdir /www && cd www
mkdir website

由於pm2需要在website目錄中建立productions目錄,需要更改website的讀寫許可權

cd /www
sudo chmod 777 website

進入使用者目錄,並編輯.bashrc檔案,下面幾行都註釋掉

這步是為了防止部署的時候伺服器報錯找不到pm2命令
# If not running interactively, don't do anything
#case $- in
#   *i*) ;;
#      *) return;;
#esac

nginx做好埠轉發配置

廣州品牌設計公司https://www.houdianzi.com PPT模板下載大全https://redbox.wode007.com

執行部署

把本地專案所有的更新push到遠端倉庫,然後執行

pm2 deploy ecosystem.json production setup
pm2 deploy ecosystem.json production

如果沒有問題的話,本地開啟瀏覽器訪問對應ip:port就可以看到內容了。後面每次專案做了個更新之後, 同步到遠端倉庫,然後執行pm2 deploy ecosystem.json production即可。