(一)开发环境

  • 本地服务器 Ubunt14.04
  • 远程服务器Ubuntu16.04
  • 发布软件PM 2

(二)发布介绍

  本地和我们的远程服务器,必须都安装有git,pm2,以及nodejs环境。实际上配置自动化发布本地代码就到远程服务器。省去了远程服务器的登录过程,如果项目小还不要紧,但是项目过大,不可能每个人都去登录服务器主机,而且中途发布的过程经过jit远程仓库以后,可以增加代码的安全性和规范性,这样是谁在何时何地修改的代码都有记录,也增加了项目的稳定性。所以这也是为什么推荐使用自动发布的原因。而我们之所以使用PM2软件,是因为他相对于forever有着更强大之处,见下图:

  下面再简述一下本地,git,服务器在发布时候的流程图,见下图:

(三)开始发布

1、配置本地和服务器git。这里我们使用的代码仓库为码云,因为码云服务器在国内,响应速度更快一些,关键是私人仓免费的多。gitub是要收钱滴。划重点,我找了很久她两的区别,就是收费问题。下面来看配置步骤:

  1.   生成当前机器的公钥私钥,如果之前有过就不用重复执行。‘这里修改为自己的邮箱’

    ssh-keygen -t rsa -b  -C 'g376482a@163.com'
  2. 配置git全局用户名和邮箱,这里的邮箱和上面定义一致:
      git config --global user.name"gede"
    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

2、配置好git就可以开始我们的自动部署了,在部署之前,我们先进行一步添加本地ssh到服务器的操作,这样就省区了每次发布部署代码都要频繁输入服务器密码的麻烦,步骤如下:

  1. 复制本地的id_rsa.pub公钥到服务器  。‘root@101.132.109.40’ -->"服务器用户名@服务器ip地址"

     ssh-copy-id -i .ssh/id_rsa.pub root@101.132.109.40
  2. 配置成功如下图:

3、自动化部署代码 

  1. 先看一下此次发布的目录结构:ecosystem.json为自动部署的配置文件,发布服务器,发布哪些代码都在这里进行配置。server.js为我们此次测试的小代码,也是node.js官方的测试文档代码。  
  2. 我们进行ecosystem.json文件的编写,代码和相关注释如下,自行修改即可:
     {
    "apps": [{
    "name": "ice", //对应Nginx上的配置
    "script": "server.js", //入口文件
    "env": {
    "COMON_VARIABLE": "true"
    },
    "env_production": {
    "NODE_ENV": "production"
    }
    }],
    "deploy": {
    "production": {
    "user": "root",
    "host": ["101.132.109.40"], //服务器ip地址
    "port": "22",     //登录端口
    "ref": "origin/master", //git仓库对应的项目目录
    "repo": "git@gitee.com:qjnugede/ice.git",
    "path": "/www/ice/production", //要部署到服务器哪个位置,如果没有会自动创建
    "ssh_options": "StrictHostKeyChecking=no",
    //构建在发布
    // "post-deploy": "npm install --registry=https://registry.npm.taobao.org && grunt build && pm2 startOrRestart ecosystem.json --env production",
    "pre-deploy-local":"echo 'Deploy Done!'", //提示发布进程
    "env": {
    "NODE_ENV": "production"
    }
    }}
    }
  3.  还是把server.js代码粘贴过来吧
     const http = require('http');
    
     const hostname = '127.0.0.1';
    const port = 3000; const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello finaish\n');
    }); server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
    });
  4. 到这里我们终于可以进行代码发布了。
  • 执行代码进行发布前的初始化配置,配置以后,以后代码发布就无需再执行此步。执行成功效果图如下:

      pm2 deploy ecosystem.json production setup
  • 如果没报错,ok直接部署我们的代码。
     pm2 deploy ecosystem.json production 

    如果报错继续往下看跳过此步骤,报错请看错误类型这里提供了 bash: pm2: command not found 的解决方法,报错图如下:

  • 解决方案:我们在安装node.js的时候也出现过这个错误,在我之前的博客Ubuntu下安装node.js提到过,大家可以回去看一下,当时我们处理的方法是在.bash_profile文件中添加我们的环境变量代码:
     export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nv

    配置好以后,系统会自动将变量添加到我们的系统总环境变量.bashrc里面,只不过被添加到了最后一行,这也是我们我们问题的出处。进入到root 目录,打开.bashrc找到关于node.js环境变量的代码,将其添加到第一行即可解决问题,最后文件如图:                  

  • 附一张服务器成功以后的测试图,测试之前现在服务器端停掉pm2的服务, 
    pm2 delete server

到这里我们的自动化部署教程就结束了。谢谢观看。如有问题请联系 g376482a@163.com

PM2自动发布本地项目到服务器的更多相关文章

  1. Jenkins构建本地项目到服务器上自动部署的方法

    博主原创,转载请注明. 最近在用Jenkins做项目的自动部署,由于项目需求,现在要在本地构建后再放到Tomcat里.以下是本地构建步骤: 名称填写好,下面的选项是可选的. 源码管理这里选择none. ...

  2. maven(17)-自动发布到远程linux服务器

     发布方式 手工方式:需要做一系列的工作,包括打WAR包,上传到服务器,重启服务器,删除旧文件等 自动方式:一条命令完成以上所有过程 服务器环境 centos7.3和tomcat8,关于cento ...

  3. Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器

    我们知道,docker能实现应用打包隔离,实现快速部署和迁移.如果我们开发应用使用了spring cloud + spring boot架构,那么,通过docker-maven-plugin实现快速构 ...

  4. win端git连接私服仓库+上传本地项目+从服务器下载文件到win

    win端git连接私服仓库: 1.win端 检查c:/Users/用户/.ssh/目录下是否有config文件(!!!没有任何后缀名).如果没有则新建config文件,然后修改添加如下内容: Host ...

  5. 从零开始部署发布Java项目到服务器的Docker中

    本以为很简单,由于没用过docker和java,本文将会阐述一路遇到的拦路虎. 首先,写好Java项目,本地跑通. 可能会遇到的问题: 1.jar包正常运行,war包404: 如何打包很多教程都有介绍 ...

  6. 配置Jenkins 实现自动发布maven项目至weblogic(svn+maven+weblogic12c)

    Jenkins安装完成之后,需要我们对其配置,然后才可以实现自动部署项目. 前提 防火墙开放weblogic的7001端口 Linux(CentOS):firewall-cmd --zone=publ ...

  7. Windows下配置Jenkins 实现自动发布maven项目至tomcat(svn+maven+tomcat)

    Jenkins安装完成之后,需要我们对其配置,然后才可以实现自动部署项目. 前提 防火墙开放tomcat的8080端口 Linux(CentOS):firewall-cmd --zone=public ...

  8. Git发布本地项目至仓库命令行操作流程

    1.初始化项目 git init 2.创建名称为 gh-pages 新分支(若直接发布至master分支,忽略此步) git checkout --orphan gh-pages 3.把所有内容加入本 ...

  9. docker快速部署本地项目到服务器(tomcat8+mysql8)

    目标是:将本地运行的spring项目,部署到服务器上 为什么使用docker? 环境隔离 服务器上,各种环境交杂,使用docker,能清楚的把各个项目进行隔离,不单维护的人员方便,也会省去很多维护这些 ...

随机推荐

  1. [转]提高 web 应用性能之 CSS 性能调优

    简介 Web 开发中经常会遇到性能的问题,尤其是 Web 2.0 的应用.CSS 代码是控制页面显示样式与效果的最直接“工具”,但是在性能调优时他们通常被 Web 开发工程师所忽略,而事实上不规范的 ...

  2. No overload for 'OnStartup' matches delegate 'System.Windows.StartupEventHandler'

    No overload for 'OnStartup' matches delegate 'System.Windows.StartupEvent ...

  3. 设置一个.exe文件开机启动

    运行"regedit",编辑注册表 HKEY_LOCAL_MACHINE -- SOFTWARE -- Microsoft -- Windows -- CurrentVersion ...

  4. Spring boot 学习 五:domain的定义

    一 public class City implements Serializable 实现了Sericalizable接口,只是一种标志.表示可以被序列化. java的ObjectOutputStr ...

  5. ENFP喜欢的职业

    外向(E)+直觉(N)+情感(F)+知觉(P). 1. 设计:设计本身很能满足ENFP对工作的各种要求,但是有个附加条件就是,这份工作不能让ENFP长时间的一个人工作,没机会和别人交流,也就是说有一个 ...

  6. 【248】◀▶IEW-Unit13

    Unit 13 Technology 流程图讲解 1.model1对应图片讲解 2.Model1范文分析 Model 1 The ice cream making process has five k ...

  7. css水平居中方式

    1. text-align:center 这种方式只适合于内联元素或者文字处于块元素当中是,给块元素设置这个,那么块元素当中的文字或者内联元素则居中.兼容各种浏览器 <div class=&qu ...

  8. 【转】eclipse修改workspace

    [转]eclipse修改workspace 以下方法选其中一种 1.进入 Window > Preferences > General > Startup and Shutdown ...

  9. Hibernate区分不同对象的方法

    1.关系数据库按主键区分不同记录. create table CUSTOMERS (ID int promary key not null, NAME varchar(15));     insert ...

  10. USB相关资料

    http://www.usb.org/developers/defined_class/#BaseClass00h http://blog.csdn.net/lizzywu/article/detai ...