使用pm2部署項目提高工作效率

為什么要用pm2?

以前部署項目的方式

  1. 從github上下載

  2. 打包后通過ssh 或者FTP上傳到服務(wù)器,

  3. 在服務(wù)器上找到并解壓縮,放到相應(yīng)的文件夾

  4. 使用npm install 安裝依賴 以及編譯css 壓縮js文件等等

  5. 刪除壓縮包以及設(shè)置文件夾權(quán)限

  6. 運行項目,如果報錯

  7. 切換文件夾查看日志文件

  8. 在本地修改然后循環(huán)步驟2-7直到完美運行

    ....

增加一個新功能后者一行代碼

  重復(fù)1-8

使用pm2以后的部署方式,當所有配置完成后三行命令

  1. git push 推送到github或者碼云上
  2. pm2 deploy ecosystem.json production setup 第一次從github上拉取到服務(wù)器
  3. pm2 deploy ecosystem.json production 部署并運行 看到 success
  4. 如果報錯使用pm2 logs 重復(fù)1,3

增加一個新功能后者一行代碼

1. git push 

   2. pm2 deploy ecosystem.json production 

看到pm2 部署你的項目是不是很幸福,以前的工作方式簡直是在透支生命啊智蝠,不到可以提高幸福指數(shù)篇恒,還可以拯救生命。

步驟

1. 在服務(wù)器和本地創(chuàng)建密鑰
2. 安裝node.js pm2
3. 在github上建立倉庫
4. 使用密鑰配置服務(wù)器,本地,github三者無密碼登錄
5. 配置pm2 的部署配置文件

提問提問提問

pm2最原始形態(tài)應(yīng)該就是一個shell腳本,本來一個程序員2個小時就能完成的部署,他卻花費20個小時研究出來一個自動化部署的腳本,然后上傳到社區(qū),參考xxx漫畫

在本地和服務(wù)器創(chuàng)建密鑰

note: 
  • 至于說ssh秘鑰登錄原理自行搜索,本文關(guān)注點在于實現(xiàn)步驟

  • 需要在本地電腦和服務(wù)器上裝好git Bash(Mac系統(tǒng)沒用過,好像不用get也行,反正有個終端能執(zhí)行shell就行)

  • 需要在本地和服務(wù)器都要執(zhí)行一邊創(chuàng)建過程,創(chuàng)建過程都是一樣的

  • 檢查電腦中是否已經(jīng)存在ssh key ll -a ~/.ssh 如果現(xiàn)實不存在文件或文件夾則繼續(xù),否則可以跳過也可以重新生成一次(會覆蓋掉以前的ssh key文件)

1. 先在本地創(chuàng)建 ssh key

    **ssh-keygen -t rsa -b 4096 -C "郵箱地址"**
    然后不需要輸入密碼,直接回車回車(**否則會很麻煩**)
    檢查 cd ~ 賬戶下 ~/.ssh文件夾下是否多了3個文件
      ~/.ssh/id_rsa             私鑰
      ~/.ssh/id_rsa.pub         公鑰
      ~/.ssh/know_hosts    主機記錄,第一次登陸之后主機信息,當你敲yes之后會被記錄到這個文件

[站外圖片上傳中...(image-a78263-1533686425155)]

2. 將ssh key 加入代理

    eval $(ssh-agent -s)     啟動 ssh-agent
    ssh-add ~/.ssh/id_rsa  將私鑰加入代理中

3. 將公鑰添加到github上

         使用 cat ~/.ssh/id_rsa.pub   查看并復(fù)制公鑰
        登陸你的github賬戶>頭像下找到setttings > SSH >粘貼

4. 測試下是否配置成功

    ssh -T git@github.com
    
    好了已經(jīng)打通了,本地與GitHub之間的無密碼登錄了

服務(wù)器上的操作和本地一樣,在子賬號下使用如下命令,不要在root賬戶下操作

[站外圖片上傳中...(image-cbbc1b-1533686425155)]

  1. 最關(guān)鍵的一步就是需要在服務(wù)器上新建一個填寫public key的文件
    vim ~/.ssh/authorized_keys

     對vim使用不熟悉的同學(xué)可以自行搜索
    
  2. 然后使用
    cat ~/.ssh/id_rsa.pub 復(fù)制本地的public key 粘貼進去

在操作的過程中可以多開幾個git Bash 鏈接到服務(wù)器以防自己操作失誤又順手關(guān)閉,導(dǎo)致自己都進不去自己的服務(wù)器

打通服務(wù)器與github上的ssh key的鏈接

  1. 在服務(wù)器上執(zhí)行 cat ~/.ssh/id_rsa.pub

  2. 復(fù)制key粘貼到 你的github賬戶>頭像下找到setttings > SSH >新建key>粘貼

  3. 測試是否能用

      mkdir ~/test 
      cd test
      git clone 任意倉庫的ssh地址,是ssh地址
    

[站外圖片上傳中...(image-2ced1e-1533686425155)]

  1. 測試本地到服務(wù)器的鏈接
    ssh userName@xxxx.xxx.xxx.xxx

恭喜你,你已經(jīng)完成了 local <==>yourserver <==> you github 三者 ssh key 的互通

接下來就是配置node pm2 了

    我假設(shè)你的本地電腦和服務(wù)器的node,pm2 已經(jīng)安裝完成并能正常運行
  1. 在本地和github新建一個項目并設(shè)置好,本地項目與github的映射
  2. 在本地github項目根文件夾下
  3. new一個ecosystem.json文件

[站外圖片上傳中...(image-f85782-1533686425155)]

      {
  "apps":[
      {
          "name":"Website",  //項目名稱
          "script":"app.js", //入口文件
          "env":{
              "COMMON_VARIABLE": "true" 
          },
          "env_production" : {
              "NODE_ENV": "production"
            }
      }
  ],
  "deploy":{
      "production":{
          "user":"userName",       // 服務(wù)器登錄用戶名
          "host":["120.xxx.xxx.xxx"], //服務(wù)器ip
          "port":"22",           //ssh 端口如果沒改過為 22          
          "ref":"origin/master",
          "repo":"git@github.com:macheng2017/study.git", //git倉庫 項目ssh地址
          "path":"/www/website/production",//服務(wù)器部署地址 需要事先在服務(wù)器上將/www/website/ 新建出來
          "ssh_options":"StrictHostKeyChecking=no",
          "env":{
              "NODE_ENV":"production"
          }
      }
  }
}
  1. 以上面為模板,將加注釋部分修改為自己的參數(shù)
  2. 在服務(wù)器上新建
    sudo mkdir /www/
    sudo mkdir /www/website/

NOTE:

  1. 由于不是在用戶自己的home文件夾中新建文件所以需要sudo 提升權(quán)限
  2. 這里有個坑等你們踩過之后再說
  1. 測試,新建app.js 我們就以node.js官網(wǎng)上的示例
const http = require("http");

const hostname = "0.0.0.0";
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain");
  res.write('Hello world');
  res.end();
});
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  1. 使用

     pm2 deploy ecosystem.json production setup // 第一次部署
     //在本地執(zhí)行腳本會在服務(wù)器中
     pm2 deploy ecosystem.json production  運行
    

在跟著該教程做下去會有幾個坑

  1. 在第一次部署的時候,會遇到權(quán)限問題,還是因為使用的是子賬號新建的 /www/website/ 權(quán)限不夠 使用 chmod 777 website 修改權(quán)限即可

參考:

https://help.github.com/articles/connecting-to-github-with-ssh/
http://pm2.keymetrics.io/docs/usage/deployment/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扶欣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌千扶,老刑警劉巖料祠,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異县貌,居然都是意外死亡术陶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門煤痕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梧宫,“玉大人,你說我怎么就攤上這事摆碉√料唬” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵巷帝,是天一觀的道長忌卤。 經(jīng)常有香客問我,道長楞泼,這世上最難降的妖魔是什么驰徊? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任笤闯,我火速辦了婚禮,結(jié)果婚禮上棍厂,老公的妹妹穿的比我還像新娘颗味。我一直安慰自己,他們只是感情好牺弹,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布浦马。 她就那樣靜靜地躺著,像睡著了一般张漂。 火紅的嫁衣襯著肌膚如雪晶默。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天航攒,我揣著相機與錄音磺陡,去河邊找鬼。 笑死屎债,一個胖子當著我的面吹牛仅政,可吹牛的內(nèi)容都是我干的垢油。 我是一名探鬼主播盆驹,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滩愁!你這毒婦竟也來了躯喇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤硝枉,失蹤者是張志新(化名)和其女友劉穎廉丽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妻味,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡正压,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了责球。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焦履。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雏逾,靈堂內(nèi)的尸體忽然破棺而出嘉裤,到底是詐尸還是另有隱情,我是刑警寧澤栖博,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布屑宠,位于F島的核電站,受9級特大地震影響仇让,放射性物質(zhì)發(fā)生泄漏典奉。R本人自食惡果不足惜躺翻,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卫玖。 院中可真熱鬧获枝,春花似錦、人聲如沸骇笔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笨触。三九已至懦傍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芦劣,已是汗流浹背粗俱。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虚吟,地道東北人寸认。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像串慰,于是被迫代替她去往敵國和親偏塞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345