這里我不講如何安裝node、pm2的環(huán)境安裝,只講如何通過pm2一鍵部署,怎么通過nginx反向代理到pm2上。如果有需要可以看我的另一篇文章:http://m.itdecent.cn/p/9034dd3101f1
一、準(zhǔn)備工作
??注:項目根目錄上要創(chuàng)建app.js(express),監(jiān)控端口號: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`)
})
根目錄下創(chuàng)建ecosystem.json
{
"apps": [
{
"name": "項目名稱",//pm2啟動項目名稱
"script": "app.js",//node啟動程序
"env": {
"COMMON_VARIABLE": "true"
},
"env_production" : {
"NODE_ENV": "production"
}
}
],
"deploy": {
"production": { //生產(chǎn)環(huán)境
"user": "root",//ssh登錄名
"host": ["10.15.?.???"],//ssh host
"port":"22",//ssh 端口
"ref": "origin/stg",//git 分支
"repo": "",//git url地址
"path": "/data/www/website",//服務(wù)器部署目錄
"ssh_options": "StrictHostKeyChecking=no",//ssh緩存是否開啟
"post-deploy" : "cnpm install && npm run build && pm2 startOrRestart ecosystem.json --env production",//git 部署完成后,啟動項目的命令集
"env" : {
"NODE_ENV": "production"
}
},
"dev":{//測試環(huán)境
"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中==
二、服務(wù)器站點目錄加載git
1、進(jìn)入站點目錄/data/www/website,執(zhí)行一下命令,拉去stg分支到source/目錄下
git clone -b stg git@********/***.git source/
2、在本地項目目錄下執(zhí)行一下命令,執(zhí)行命令前保證git全部提交完成,本地沒有更改、刪除、新增的文件
//發(fā)布到測試環(huán)境
pm2 deploy ecosystem.json dev steup
//上線到正式環(huán)境
pm2 deploy ecosystem.json production steup
等待執(zhí)行完成
3、查看pm2的服務(wù)列表
pm2 list
4、nginx反向代理
server {
listen 80;
server_name Your Domain;
location / {
proxy_pass http://127.0.0.1:9527;
}
}
搞定,收工!就是這么簡單。