(一)开发环境

  • 本地服务器 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. linux 进程学习笔记-信号semaphore

    信号灯(信号量)不是进程通信手段,其是用于控制和协调在进程间通信过程中的共享资源访问,就如同互斥锁(两者的区别可以参考这里) 可以将简单地将信号灯想象成一个计数器,初始时计数器值为n(有n个资源可供使 ...

  2. OpenCV——PS 滤镜算法之极坐标变换到平面坐标

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  3. Ubuntu 16.04上编译SkyEye的测试程序

    一.首先确保Ubuntu系统上已经安装了Skyeye.skyeye-testsuite和arm-linux-gcc交叉编译工具链,如果没有安装请参考: 1.Skyeye的安装:http://www.c ...

  4. BZOJ_3165_[Heoi2013]Segment_线段树

    BZOJ_3165_[Heoi2013]Segment_线段树 Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数 ...

  5. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  6. redis设置密码和redis主从复制

    redis设置密码和redis主从复制 一.redis设置密码 1.Redis实用特性 安全性  主从复制(侦听器)事务处理 持久化机制 发布订阅消息 2.安全性:设置客户端连接后进行任何其他指定前需 ...

  7. python反复执行某个命令

    #! /usr/bin/env python #coding=utf-8 # 以需要的时间间隔执行某个命令    import time, os    def re_exe(cmd, inc = 60 ...

  8. boost库安装和使用

    1. 下载最新的boost库:http://www.boost.org/本文使用的是boost_1_66_0.tar.gz, 2. Boost库安装步骤: > 解压下载文件,例如下载文件在~/D ...

  9. mysql5.1的编译安装 ----针对第一次安装mysql的

    由于是第一次安装,不能确定你是否有安装编译和mysql所要依赖的插件,使用我是当做你最原始的安装环境.  1.安装mysql5.1的依赖包 yum install -y gcc gcc-c++ aut ...

  10. POJ3694(求割边)

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7943   Accepted: 2893 Descripti ...