pm2部署node應用

背景:

  很早就知道了pm2的強大功能,部署,多進程部署,負載均衡等等,可是一直沒有取嘗試使用,每次寫完代碼就沒關心部署的事了。最近有空就想着把pm2的部署流程走一遍,順便整理出來。node

環境:

  1.本地:linux mint18(類ubuntu)linux

  2.服務器:阿里雲ubuntu16.04nginx

流程:

  1.購買服務器git

  2.登陸服務器,安裝node環境github

  3.上傳代碼到私有或者公共git倉庫web

  4.pm2從本地到服務器的發佈數據庫

  5.服務器端設置pm2開機自啓動npm

1.購買服務器,域名備案

  我沒有比較哪一個廠商的雲服務比較好,不過我本身用的是阿里雲的。json

2.登陸服務器,安裝node環境

  1)ssh root@120.77.156.181 ubuntu

    接着輸入密碼

  解釋:阿里雲服務器的默認端口是22,因此不用特意指定服務器端口

  2)添加用戶

    使用root用戶操做服務器是一件很危險的事,由於root有超級權限,極可能一不當心刪除了某個重要文件,因此這裏建議新增一個用戶來幫忙操做服務器,這個用戶須要擁有root的所用功能,只是在執行命令的時候須要加sudo。

    使用以下命令添加用戶:

    adduser  qqqq

    接着輸入兩次密碼

    給新增的用戶受權:

    gpasswd -a qqqq sudo  //做用的讓qqqq用戶經過sudo來擁有root的權限,而且須要輸入密碼

    sudo visudo

    添加:qqqq ALL=(ALL:ALL) ALL

    這樣就能夠經過ssh qqqq@120.77.156.181登陸服務器

    服務器端關閉root用戶的登陸:

    sudo vi  /etc/ssh/sshd_config

    找到以下設置,並修改yes爲no:

    PermitRootLogin no 

    保存文件後,重啓sshd:

    sudo service sshd restart    

  3)無密碼登陸服務器

    上面兩種登陸服務器的方式都須要輸入密碼,其實這不是必須的,只須要簡單的幾步就能夠實現無密碼登陸服務器。

    本地主機生成私鑰和公鑰:

    ssh-keygen rsa -b 4096 -c 「1594466572@qq.com」

    而後直接回車便可        

    此時本機用戶目錄下的.ssh文件夾下會生生成兩個文件(id_rsa和id_rsa.pub),前者是私鑰後者是公鑰,若是這兩個文件以前就已經存在,那就不必從新生成了

    本地主機開啓ssh代理:

    eval "$(ssh-agent -s)"

    將私鑰加入到代理中:

    ssh-add ~/.ssh/id_rsa

    進入服務器:ssh qqqq@120.77.156.181

    執行一樣的操做:ssh-keygen rsa -b 4096 -c 「1594466572@qq.com」 (這一句可要可不要,可是後面操做必定會用,因此就在這裏先執行了)

    而後在.ssh文件下新建文件:

    vi  authorized_keys    

    將本地主機的公鑰(id_rsa.pub)的內容複製到authorized_keys文件中

    修改authorized_keys文件的權限:

    sudo chmod 600  authorized_keys

    重啓ssh:

    sudo service ssh restart

  4)安裝nodejs環境

    安裝必要的工具:

    sudo apt-get install vim openssl build-essential libssl-dev wget curl git

    安裝nvm:

    wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

    安裝node,npm: 

    nvm install v6.11.1

    選擇nodejs版本:

    nvm use 6.11.1

    設置默認的nodejs版本:

    nvm alias default v6.11.1

    安裝pm2:

    npm install pm2 -g

 3.上傳代碼到git倉庫

  在github中新建一個倉庫,名爲pm2deploy

  接下來設置ssh,依次點擊setting->SSH and GPG keys->new SSH key,其中的key就是上面步驟中經過ssh-keygen命令生成的公鑰,title爲自定義,能夠隨便填,經過:

  cat ~./ssh/id_rsa.pub

  便可輸出id_rsa.pub的內容,複製到key中,而後點擊add ssh key便可

  在此添加兩個公鑰,一個是本地主機的,一個是遠程服務器的,添加以後,本地主機和服務器均可以經過git clone ssh@.....來下載倉庫的代碼了

4.pm2從本地主機發布

  1)pm2的ecosystem.js配置   

    在本地源碼目錄下輸入:

    pm2 ecosystem

    生成pm2的配置文件ecosystem.config.js: 

module.exports = {                                                                                                                                           
  /** 
   * Application configuration section
   * http://pm2.keymetrics.io/docs/usage/application-declaration/
   */
  apps : [ 

    // First application
    {   
      name      : 'API',
      script    : 'app.js',
      env: {
        COMMON_VARIABLE: 'true'
      },  
      env_production : { 
        NODE_ENV: 'production'
      }   
    },  

    // Second application
    {   
      name      : 'WEB',
      script    : 'web.js'
    }   
  ],  

  /** 
   * Deployment section
   * http://pm2.keymetrics.io/docs/usage/deployment/
   */
  deploy : { 
    production : { 
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    },  
    dev : { 
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/development',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env dev',
      env  : { 
        NODE_ENV: 'dev'
      }   
    }   
  }
};

  新建一個文件:    

 vim ecosystem.json  複製ecosystem.config.js的內容到ecosystem.json中,注意js與json的區別

  apps以數組的形式是爲了部署多應用準備的,這裏咱們只部署一個應用,能夠去掉第二個元素。script爲程序的入口文件,這裏改成你本身的入口文件便可。

  apps的配置介紹玩了,生下的是部署配置(deploy),部署配置包括production(生產環境)和dev(開發環境),這裏只介紹生產環境,開發環境相似(能夠先去掉開發環境)。

    "production":{
    "user":  "qqqq(登陸服務器的用戶名)", 
    "host": "120.77.156.181(服務器公網ip)",
    "ref": "git@開頭的倉庫地址",
    "repo": "/deploy/app/production",
    "post-deploy": "npm install --registry=https://registry.npm.taobao.org &&  pm2 startOrRestart ecosystem.json --env production",
    "env": {
      "NODE_ENV": "production"
    }
  }

  修改完後保存,而後執行pm2 deploy命令

 pm2 deploy ecosystem.json production setup

  繼續執行部署命令:

  pm2 deploy ecosystem.json production

  若是沒有問題,會有以下輸出(最後兩行):

 [PM2][WARN] Applications Movie not running, starting...

  [PM2] App [Movie] launched (1 instances)
  ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
  │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
  ├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
  │ Movie │ 0 │ fork │ 3722 │ online │ 0 │ 0s │ 4% │ 18.4 MB │ disabled │
  └──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
  Use `pm2 show <id|name>` to get more details about an app
  ○ hook test
  ○ successfully deployed origin/master
  --> Success

  至此,pm2的部署完畢,此時能夠經過120.77.156.181:port來訪問部署的應用了,這裏若是有域名,能夠經過nginx反向代理,設置域名訪問。

  2)pm2的一些命令:

    pm2 log 查看啓動日誌

    pm2 status 查看實例信息

    pm2 stop app 關閉名爲app的實例

    pm2 delete app 刪除名爲app的實例排名

5.服務器端設置pm2開機自啓動

  ubuntu系統兩個命令就能夠搞定:

  進入服務器,輸入以下命令:  

  pm2 save
  pm2 startup  

以上就是pm2部署node應用的流程,正常的應用還包括數據庫,以及服務器安全問題的配置,這裏略去沒寫。

相關文章
相關標籤/搜索