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服务器

相关文章
相关标签/搜索