这里我不讲如何安装node、pm2的环境安装,只讲如何通过pm2一键部署,怎么通过nginx反向代理到pm2上。如果有需要可以看我的另一篇文章:https://www.jianshu.com/p/9034dd3101f1
一、准备工作
⚠️注:项目根目录上要创建app.js(express),监控端口号:9527
const express = require('express')
const history = require('connect-history-api-fallback')
const env = process.env.NODE_ENV || 'development'
const path = require('path')
const app = 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 })
})
const server = 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;
}
}
搞定,收工!就是这么简单。