PM2自動發佈本地項目到服務器

(一)開發環境

  • 本地服務器 Ubunt14.04
  • 遠程服務器Ubuntu16.04
  • 發佈軟件PM 2

(二)發佈介紹

   本地和咱們的遠程服務器,必須都安裝有git,pm2,以及nodejs環境。實際上配置自動化發佈本地代碼就到遠程服務器。省去了遠程服務器的登陸過程,若是項目小還沒關係,可是項目過大,不可能每一個人都去登陸服務器主機,並且中途發佈的過程通過jit遠程倉庫之後,能夠增長代碼的安全性和規範性,這樣是誰在什麼時候何地修改的代碼都有記錄,也增長了項目的穩定性。因此這也是爲何推薦使用自動發佈的緣由。而咱們之因此使用PM2軟件,是由於他相對於forever有着更強大之處,見下圖:html

  下面再簡述一下本地,git,服務器在發佈時候的流程圖,見下圖:node

(三)開始發佈git

一、配置本地和服務器git。這裏咱們使用的代碼倉庫爲碼雲,由於碼雲服務器在國內,響應速度更快一些,關鍵是私人倉免費的多。gitub是要收錢滴。劃重點,我找了好久她兩的區別,就是收費問題。下面來看配置步驟:npm

  1.   生成當前機器的公鑰私鑰,若是以前有過就不用重複執行。‘這裏修改成本身的郵箱’
    ssh-keygen -t rsa -b 4096 -C 'g376482a@163.com'

     

  2. 配置git全局用戶名和郵箱,這裏的郵箱和上面定義一致:
    1  git config --global user.name"gede"
    2  git config --global user.email"g376482a@163.com"

     

  3. 啓動ssh代理:
     eval "$(ssh-agent -s)"

     

  4. 切換到.ssh目錄下,查看複製id-rsa.pub文件內容。
  5. 打開本身碼雲對應的倉庫,添加ssh認證便可。
  6. 使用如下代碼測試是否配置成功:clone後面的爲本身倉庫的git地址。
    git clone git@gitee.com:qjnugede/ice.git

二、配置好git就能夠開始咱們的自動部署了,在部署以前,咱們先進行一步添加本地ssh到服務器的操做,這樣就省區了每次發佈部署代碼都要頻繁輸入服務器密碼的麻煩,步驟以下:json

  1. 複製本地的id_rsa.pub公鑰到服務器  。‘root@101.132.109.40’ -->"服務器用戶名@服務器ip地址"
     ssh-copy-id -i .ssh/id_rsa.pub root@101.132.109.40

     

  2. 配置成功以下圖:

三、自動化部署代碼 安全

  1. 先看一下這次發佈的目錄結構:ecosystem.json爲自動部署的配置文件,發佈服務器,發佈哪些代碼都在這裏進行配置。server.js爲咱們這次測試的小代碼,也是node.js官方的測試文檔代碼。  
  2. 咱們進行ecosystem.json文件的編寫,代碼和相關注釋以下,自行修改便可:
     1 {
     2     "apps": [{
     3         "name": "ice", //對應Nginx上的配置
     4         "script": "server.js", //入口文件
     5         "env": {
     6             "COMON_VARIABLE": "true"
     7         },
     8         "env_production": {
     9             "NODE_ENV": "production"
    10         }
    11      }],
    12     "deploy": {
    13         "production": {
    14             "user": "root", 
    15             "host": ["101.132.109.40"], //服務器ip地址
    16             "port": "22",            //登陸端口
    17             "ref": "origin/master",     //git倉庫對應的項目目錄
    18             "repo": "git@gitee.com:qjnugede/ice.git",
    19             "path": "/www/ice/production",  //要部署到服務器哪一個位置,若是沒有會自動建立
    20             "ssh_options": "StrictHostKeyChecking=no",
    21             //構建在發佈
    22             // "post-deploy": "npm install --registry=https://registry.npm.taobao.org && grunt build && pm2 startOrRestart ecosystem.json --env production",
    23        "pre-deploy-local":"echo 'Deploy Done!'",  //提示發佈進程
    24             "env": {
    25                 "NODE_ENV": "production"
    26             }
    27       }}
    28  }

     

  3.  仍是把server.js代碼粘貼過來吧
     1 const http = require('http');
     2 
     3 const hostname = '127.0.0.1';
     4 const port = 3000;
     5 
     6 const server = http.createServer((req, res) => {
     7   res.statusCode = 200;
     8   res.setHeader('Content-Type', 'text/plain');
     9   res.end('Hello finaish\n');
    10 });
    11 
    12 server.listen(port, hostname, () => {
    13   console.log(`Server running at http://${hostname}:${port}/`);
    14 });

     

  4. 到這裏咱們終於能夠進行代碼發佈了。
  • 執行代碼進行發佈前的初始化配置,配置之後,之後代碼發佈就無需再執行此步。執行成功效果圖以下:
    1  pm2 deploy ecosystem.json production setup

     

  • 若是沒報錯,ok直接部署咱們的代碼。
     pm2 deploy ecosystem.json production 

    若是報錯繼續往下看跳過此步驟,報錯請看錯誤類型這裏提供了 bash: pm2: command not found 的解決方法,報錯圖以下:
  • 解決方案:咱們在安裝node.js的時候也出現過這個錯誤,在我以前的博客Ubuntu下安裝node.js提到過,你們能夠回去看一下,當時咱們處理的方法是在.bash_profile文件中添加咱們的環境變量代碼:
    1 export NVM_DIR="$HOME/.nvm"
    2 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
    3 [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nv

    配置好之後,系統會自動將變量添加到咱們的系統總環境變量.bashrc裏面,只不過被添加到了最後一行,這也是咱們咱們問題的出處。進入到root 目錄,打開.bashrc找到關於node.js環境變量的代碼,將其添加到第一行便可解決問題,最後文件如圖:                  bash

  • 附一張服務器成功之後的測試圖,測試以前如今服務器端停掉pm2的服務, 
    pm2 delete server

 

 

到這裏咱們的自動化部署教程就結束了。謝謝觀看。若有問題請聯繫 g376482a@163.com服務器

相關文章
相關標籤/搜索