PM2實現(xiàn)Nodejs項目自動部署

PM2實現(xiàn)Nodejs項目自動部署

首先簡單說下思路:本地git倉庫與遠(yuǎn)程倉庫關(guān)聯(lián)(github、碼云等平臺)汹粤,然后pm2按照指定配置登錄服務(wù)器,拉取遠(yuǎn)程倉庫的代碼更新,再執(zhí)行一些指定的命令(如打包等)湘纵。

創(chuàng)建本地項目并關(guān)聯(lián)到遠(yuǎn)程倉庫

  1. 本地新建名為web的項目,進(jìn)入項目并創(chuàng)建一個簡單的Nodejs文件app.js滤淳,
mkdir web && cd web
vi app.js

文件內(nèi)容編輯如下梧喷,完成后保存退出: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:');
})
  1. 把本地項目放到遠(yuǎn)程倉庫脖咐,可選Github或者碼云等平臺铺敌。首先查看本地是否生成過.ssh目錄及目錄下是否有私鑰及公鑰文件
ls ~/.ssh
  1. 如果存在,跳到下一步屁擅。如果不存在id_rsa偿凭、id_rsa.pub文件,需要先生成一下:

"youemail"填寫你的郵箱

ssh-keygen -t rsa -C "youremail"
  1. 查看本地公鑰的內(nèi)容并復(fù)制內(nèi)容添加到遠(yuǎn)程倉庫
cat ~/.ssh/id_rsa.pub
  1. 本地倉庫關(guān)聯(lián)遠(yuǎn)程倉庫的其他操作這里就不贅述派歌。

服務(wù)器從遠(yuǎn)程倉庫拉取項目

服務(wù)器環(huán)境:阿里云的ecs弯囊,系統(tǒng)是Ubuntu 14.06

這一步后面是不需要手動操作的,但我們要做好配置胶果,這里可以先手動拉取遠(yuǎn)程代碼測試一下是否配置成功匾嘱。

  1. 確保服務(wù)器已安裝NodeJs、git早抠、pm2,未安裝的話自行百度霎烙。
  2. 復(fù)制服務(wù)器的公鑰并添加到遠(yuǎn)程倉庫,操作步驟同本地的2、3悬垃、4步游昼。
  3. 定位到用戶目錄,拉取遠(yuǎn)程倉庫確钡脸溃可以拉取成功,若成功的話這個項目目錄刪除即可酱床。

xxxx為你遠(yuǎn)程倉庫的項目地址

cd ~
git clone xxxx

項目中配置pm2自動部署文件

在本地項目中新建配置文件ecosystem.json,這里為了方便理解添加了注釋趟佃,但json文件不能有注釋扇谣,記得去掉。

{
    "apps":[
        {
            "name": "website", // 項目名稱
            "script": "app.js", // 入口文件
            "env": {
                "COMMON_VARIABLE": "true"
            },
            "env_production": {
                "NODE_ENV": "production" // 環(huán)境變量
            }
        }
    ],
    // 環(huán)境部署的配置闲昭,此處只以production為例
    "deploy": {
        "production": {
            // 登錄服務(wù)器的用戶名
            "user":"slevin",
            // 服務(wù)器ip
            "host": ["47.75.191.199"],
            // 服務(wù)器ssh登錄端口罐寨,未修改的話一般默認(rèn)為22
            "port": "22",
            // 指定拉取的分支
            "ref": "origin/master",
            // 遠(yuǎn)程倉庫地址
            "repo": "git@gitee.com:mslevin/website.git",
            // 指定代碼拉取到服務(wù)器的目錄
            "path": "/www/website/production",
            "ssh_options": "StrictHostKeyChecking=no",
            "env": {
                "NODE_ENV": "production"
            }
        }
    }
}

服務(wù)器相關(guān)配置

  1. 配置文件中指定了存放項目的目錄/www/website/production,但可能并不存在序矩,需要手動新建:
mkdir /www && cd www
mkdir website

由于pm2需要在website目錄中創(chuàng)建productions目錄鸯绿,需要更改website的讀寫權(quán)限

cd /www
sudo chmod 777 website
  1. 進(jìn)入用戶目錄,并編輯.bashrc文件簸淀,下面幾行都注釋掉

這步是為了防止部署的時候服務(wù)器報錯找不到pm2命令

# If not running interactively, don't do anything
#case $- in
#   *i*) ;;
#      *) return;;
#esac
  1. nginx做好端口轉(zhuǎn)發(fā)配置

執(zhí)行部署

  1. 把本地項目所有的更新push到遠(yuǎn)程倉庫瓶蝴,然后執(zhí)行
pm2 deploy ecosystem.json production setup
pm2 deploy ecosystem.json production

如果沒有問題的話,本地打開瀏覽器訪問對應(yīng)ip:port就可以看到內(nèi)容了租幕。
后面每次項目做了個更新之后舷手, 同步到遠(yuǎn)程倉庫,然后執(zhí)行pm2 deploy ecosystem.json production即可劲绪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男窟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贾富,更是在濱河造成了極大的恐慌歉眷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颤枪,死亡現(xiàn)場離奇詭異汗捡,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盅藻,“玉大人,你說我怎么就攤上這事台囱〉荩” “怎么了读整?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咱娶。 經(jīng)常有香客問我米间,道長强品,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任屈糊,我火速辦了婚禮的榛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逻锐。我一直安慰自己夫晌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布昧诱。 她就那樣靜靜地躺著晓淀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盏档。 梳的紋絲不亂的頭發(fā)上凶掰,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音蜈亩,去河邊找鬼懦窘。 笑死,一個胖子當(dāng)著我的面吹牛稚配,可吹牛的內(nèi)容都是我干的畅涂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼药有,長吁一口氣:“原來是場噩夢啊……” “哼毅戈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起愤惰,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤苇经,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宦言,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扇单,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年奠旺,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜘澜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡响疚,死狀恐怖鄙信,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忿晕,我是刑警寧澤装诡,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響鸦采,放射性物質(zhì)發(fā)生泄漏宾巍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一渔伯、第九天 我趴在偏房一處隱蔽的房頂上張望顶霞。 院中可真熱鬧,春花似錦锣吼、人聲如沸选浑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲜侥。三九已至,卻和暖如春诸典,著一層夾襖步出監(jiān)牢的瞬間描函,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工狐粱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舀寓,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓肌蜻,卻偏偏與公主長得像互墓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蒋搜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容