M2实现Nodejs项目自动部署的方法步骤


Posted in NodeJs onMay 05, 2019

PM2实现Nodejs项目自动部署

首先简单说下思路:本地git仓库与远程仓库关联(github、码云等平台),然后pm2按照指定配置登录服务器,拉取远程仓库的代码更新,再执行一些指定的命令(如打包等)。

创建本地项目并关联到远程仓库

本地新建名为web的项目,进入项目并创建一个简单的Nodejs文件app.js,

mkdir web && cd web
vi app.js

文件内容编辑如下,完成后保存退出:wq!。

// app.s

const http = require('http');

const homePage = `
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style type="text/css">
    * {
      padding: 0;
      margin: 0;
    }
    body {
      padding: 30px 0;
      text-align: center;
      font-size: 16px;
      background-color: #333;
    }
    h1,h2 {
      color: #fff;
    }
    nav {
      margin-top: 20px;
    }
    a {
      color: #ccc;
      cursor: pointer;
    }
    a:hover {
      text-decoration: underline;
    }
  </style>
</head>

<body>
  <h1>Nodejs部署示例项目</h1>
  <h2>项目部署上线示例</h2>
  <nav>
    <ul>
      <li><a>列表</a></li>
    </ul>
  </nav>
</body>

</html>
`

http.createServer((req,res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type','text/html');
  res.end(homePage);
}).listen(3000, () => {
  console.log('Sever Running On 3000:');
})

把本地项目放到远程仓库,可选Github或者码云等平台。首先查看本地是否生成过.ssh目录及目录下是否有私钥及公钥文件

ls ~/.ssh

如果存在,跳到下一步。如果不存在id_rsa、id_rsa.pub文件,需要先生成一下:

"youemail"填写你的邮箱

ssh-keygen -t rsa -C "youremail"

查看本地公钥的内容并复制内容添加到远程仓库

cat ~/.ssh/id_rsa.pub

本地仓库关联远程仓库的其他操作这里就不赘述。

服务器从远程仓库拉取项目

服务器环境:阿里云的ecs,系统是Ubuntu 14.06

这一步后面是不需要手动操作的,但我们要做好配置,这里可以先手动拉取远程代码测试一下是否配置成功。

确保服务器已安装NodeJs、git、pm2,未安装的话自行百度。

复制服务器的公钥并添加到远程仓库,操作步骤同本地的2、3、4步。

定位到用户目录,拉取远程仓库确保可以拉取成功,若成功的话这个项目目录删除即可。

xxxx为你远程仓库的项目地址

cd ~
git clone xxxx

项目中配置pm2自动部署文件

在本地项目中新建配置文件ecosystem.json,这里为了方便理解添加了注释,但json文件不能有注释,记得去掉。

{
  "apps":[
    {
      "name": "website", // 项目名称
      "script": "app.js", // 入口文件
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production" // 环境变量
      }
    }
  ],
  // 环境部署的配置,此处只以production为例
  "deploy": {
    "production": {
      // 登录服务器的用户名
      "user":"slevin",
      // 服务器ip
      "host": ["47.75.191.199"],
      // 服务器ssh登录端口,未修改的话一般默认为22
      "port": "22",
      // 指定拉取的分支
      "ref": "origin/master",
      // 远程仓库地址
      "repo": "git@gitee.com:mslevin/website.git",
      // 指定代码拉取到服务器的目录
      "path": "/www/website/production",
      "ssh_options": "StrictHostKeyChecking=no",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

服务器相关配置

配置文件中指定了存放项目的目录/www/website/production,但可能并不存在,需要手动新建:

mkdir /www && cd www
mkdir website

由于pm2需要在website目录中创建productions目录,需要更改website的读写权限

cd /www
sudo chmod 777 website

进入用户目录,并编辑.bashrc文件,下面几行都注释掉

这步是为了防止部署的时候服务器报错找不到pm2命令

# If not running interactively, don't do anything
#case $- in
#  *i*) ;;
#   *) return;;
#esac

nginx做好端口转发配置

执行部署

把本地项目所有的更新push到远程仓库,然后执行

pm2 deploy ecosystem.json production setup
pm2 deploy ecosystem.json production

如果没有问题的话,本地打开浏览器访问对应ip:port就可以看到内容了。

后面每次项目做了个更新之后, 同步到远程仓库,然后执行pm2 deploy ecosystem.json production即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs 后缀名判断限制代码
Mar 31 NodeJs
跟我学Nodejs(二)--- Node.js事件模块
May 21 NodeJs
NodeJS制作爬虫全过程(续)
Dec 22 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
Jan 05 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 #NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 #NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 #NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 #NodeJs
Nodejs实现用户注册功能
Apr 14 #NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 #NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 #NodeJs
You might like
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
php里array_work用法实例分析
2015/07/13 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
js常用正则表达式集锦
2019/05/17 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
Pyhton中防止SQL注入的方法
2015/02/05 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python调用C++程序的方法详解
2017/01/24 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
吃空饷专项治理工作实施方案
2014/03/04 职场文书
家长写给老师的建议书
2014/03/13 职场文书
主持人演讲稿
2014/05/13 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
国庆节标语大全
2014/10/08 职场文书
小学生成绩单评语
2014/12/31 职场文书