这里我不讲如何安装node、pm2的环境安装,只讲如何通过pm2一键部署,怎么通过nginx反向代理到pm2上。如果有需要可以看我的另一篇文章:https://www.jianshu.com/p/9034dd3101f1

一、准备工作

⚠️注:项目根目录上要创建app.js(express),监控端口号:9527

constexpress = require('express')

consthistory = require('connect-history-api-fallback')

constenv = process.env.NODE_ENV || 'development'

constpath = require('path')

constapp = express()

app.use(history())

if(env !== 'development') {

app.use(express.static(path.join(__dirname, 'dist')))

}

// 错误处理

app.use((err, req, res, next) => {

res.status(442).send({ error: err.message })

})

constserver = app.listen(8086, () => {

console.log(`Express started in ${app.get('env')} mode on http://127.0.0.1:8086`)

})

根目录下创建ecosystem.json

{

"apps": [

{

"name": "项目名称",//pm2启动项目名称

"script": "app.js",//node启动程序

"env": {

"COMMON_VARIABLE": "true"

},

"env_production": {

"NODE_ENV": "production"

}

}

],

"deploy": {

"production": { //生产环境

"user": "root",//ssh登录名

"host": ["10.15.?.???"],//ssh host

"port":"22",//ssh 端口

"ref": "origin/stg",//git 分支

"repo": "",//git url地址

"path": "/data/www/website",//服务器部署目录

"ssh_options": "StrictHostKeyChecking=no",//ssh缓存是否开启

"post-deploy": "cnpm install && npm run build && pm2 startOrRestart ecosystem.json --env production",//git 部署完成后,启动项目的命令集

"env": {

"NODE_ENV": "production"

}

},

"dev":{//测试环境

"user": "root",

"host": ["10.15.?.???"],

"ref": "origin/stg",

"repo": "",

"path": "/data/www/website—test",

"ssh_options": "StrictHostKeyChecking=no",

"post-deploy": "cnpm install && npm run build && pm2 startOrRestart ecosystem.json --env production",

"env": {

"NODE_ENV": "production"

}

}

}

}

==注意:package.json中的devDependencies中的依赖放到dependencies中==

二、服务器站点目录加载git

1、进入站点目录/data/www/website,执行一下命令,拉去stg分支到source/目录下

git clone-b stg git@********/***.git source/

2、在本地项目目录下执行一下命令,执行命令前保证git全部提交完成,本地没有更改、删除、新增的文件

//发布到测试环境

pm2 deploy ecosystem.json dev steup

//上线到正式环境

pm2 deploy ecosystem.json production steup

等待执行完成
3、查看pm2的服务列表

pm2 list

4、nginx反向代理

server {

listen 80;

server_name Your Domain;

location / {

proxy_pass http://127.0.0.1:9527;

}

}

搞定,收工!就是这么简单。