分布式:分布式部署脚本
This commit is contained in:
@@ -18,5 +18,9 @@
|
|||||||
1.master.ts对应环境的主机host填写内网ip地址,新服务器host填写主机host地址
|
1.master.ts对应环境的主机host填写内网ip地址,新服务器host填写主机host地址
|
||||||
2.config/database.ts填写对应环境下的配置
|
2.config/database.ts填写对应环境下的配置
|
||||||
3.新服务器执行命令(host为主机内网ip)
|
3.新服务器执行命令(host为主机内网ip)
|
||||||
`npm run build`
|
4.id绝不能重复
|
||||||
|
5.connector服务的clientPort端口需暴露,必须加frontend=true
|
||||||
|
6.扩容脚本./pm2StarterDistribute.sh
|
||||||
|
7.手输命令示例如下:
|
||||||
`pm2 start ./dist/app.js --name="activity-server-2" -x -- env=dev id=activity-server-2 host=172.26.145.171 port=9061 serverType=activity`
|
`pm2 start ./dist/app.js --name="activity-server-2" -x -- env=dev id=activity-server-2 host=172.26.145.171 port=9061 serverType=activity`
|
||||||
|
`pm2 start ./dist/app.js --name="connector-server-4" -x -- env=dev id=connector-server-4 host=172.26.145.171 port=9062 clientHost=121.89.211.172 clientPort=3050 serverType=connector frontend=true`
|
||||||
|
|||||||
@@ -148,15 +148,15 @@ module.exports = {
|
|||||||
{ 'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true, "args": " --inspect=9238" }
|
{ 'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true, "args": " --inspect=9238" }
|
||||||
],
|
],
|
||||||
'chat': [
|
'chat': [
|
||||||
{ 'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050, "args": " --inspect=9234" },
|
{ 'id': 'chat-server-1', 'host': '172.26.145.161', 'port': 6050, "args": " --inspect=9234" },
|
||||||
{ 'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051, "args": " --inspect=9235" },
|
{ 'id': 'chat-server-2', 'host': '172.26.145.161', 'port': 6051, "args": " --inspect=9235" },
|
||||||
{ 'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052, "args": " --inspect=9236" }
|
{ 'id': 'chat-server-3', 'host': '172.26.145.161', 'port': 6052, "args": " --inspect=9236" }
|
||||||
],
|
],
|
||||||
'role': [
|
'role': [
|
||||||
{ 'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053, "args": " --inspect=9231" }
|
{ 'id': 'role-server-1', 'host': '172.26.145.161', 'port': 6053, "args": " --inspect=9231" }
|
||||||
],
|
],
|
||||||
'battle': [
|
'battle': [
|
||||||
{ 'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054, "args": " --inspect=9230" }
|
{ 'id': 'battle-server-1', 'host': '172.26.145.161', 'port': 6054, "args": " --inspect=9230" }
|
||||||
],
|
],
|
||||||
'gate': [
|
'gate': [
|
||||||
{ 'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true, "args": " --inspect=9227" },
|
{ 'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true, "args": " --inspect=9227" },
|
||||||
@@ -173,17 +173,17 @@ module.exports = {
|
|||||||
{ 'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055, "args": " --inspect=9232" }
|
{ 'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055, "args": " --inspect=9232" }
|
||||||
],
|
],
|
||||||
'systimer': [
|
'systimer': [
|
||||||
{ 'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233" }
|
{ 'id': 'systimer-server-1', 'host': '172.26.145.161', 'port': 6056, "args": " --inspect=9233" }
|
||||||
],
|
],
|
||||||
'guild': [
|
'guild': [
|
||||||
{ 'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239" },
|
{ 'id': 'guild-server-1', 'host': '172.26.145.161', 'port': 6057, "args": " --inspect=9239" },
|
||||||
{ 'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240" }
|
{ 'id': 'guild-server-2', 'host': '172.26.145.161', 'port': 6058, "args": " --inspect=9240" }
|
||||||
],
|
],
|
||||||
'activity': [
|
'activity': [
|
||||||
{ 'id': 'activity-server-1', 'host': '127.0.0.1', 'port': 6059, "args": " --inspect=9241" },
|
{ 'id': 'activity-server-1', 'host': '172.26.145.161', 'port': 6059, "args": " --inspect=9241" },
|
||||||
],
|
],
|
||||||
'order': [
|
'order': [
|
||||||
{ 'id': 'order-server-1', 'host': '127.0.0.1', 'port': 6060, "args": " --inspect=9242" },
|
{ 'id': 'order-server-1', 'host': '172.26.145.161', 'port': 6060, "args": " --inspect=9242" },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'isbn': {
|
'isbn': {
|
||||||
@@ -266,39 +266,10 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
'distribute': {
|
'distribute': {
|
||||||
'connector': [
|
'connector': [
|
||||||
{ 'id': 'connector-server-1', 'port': 4050, 'clientHost': '121.89.211.172', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true, "args": " --inspect=9237" },
|
{ 'id': 'connector-server-4', 'host': '172.26.145.171', 'port': 9061, 'clientHost': '121.89.211.172', 'clientPort': 3050, 'frontend': true, "args": " --inspect=9237" },
|
||||||
{ 'id': 'connector-server-2', 'port': 4051, 'clientHost': '121.89.211.172', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true, "args": " --inspect=9229" },
|
|
||||||
{ 'id': 'connector-server-3', 'port': 4052, 'clientHost': '121.89.211.172', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true, "args": " --inspect=9238" }
|
|
||||||
],
|
|
||||||
'chat': [
|
|
||||||
{ 'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050, "args": " --inspect=9234" },
|
|
||||||
{ 'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051, "args": " --inspect=9235" },
|
|
||||||
{ 'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052, "args": " --inspect=9236" }
|
|
||||||
],
|
|
||||||
'role': [
|
|
||||||
{ 'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053, "args": " --inspect=9231" }
|
|
||||||
],
|
|
||||||
'battle': [
|
|
||||||
{ 'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054, "args": " --inspect=9230" }
|
|
||||||
],
|
|
||||||
'gate': [
|
|
||||||
{ 'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': '121.89.211.172', 'clientPort': 3014, 'frontend': true, "args": " --inspect=9227" },
|
|
||||||
],
|
|
||||||
'gm': [
|
|
||||||
{ 'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055, "args": " --inspect=9232" }
|
|
||||||
],
|
|
||||||
'systimer': [
|
|
||||||
{ 'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233" }
|
|
||||||
],
|
|
||||||
'guild': [
|
|
||||||
{ 'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239" },
|
|
||||||
{ 'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240" }
|
|
||||||
],
|
],
|
||||||
'activity': [
|
'activity': [
|
||||||
{ 'id': 'activity-server-2', 'host': '127.0.0.1', 'port': 6059, "args": " --inspect=9241" },
|
{ 'id': 'activity-server-2', 'host': '172.26.145.171', 'port': 9062, "args": " --inspect=9241" },
|
||||||
],
|
|
||||||
'order': [
|
|
||||||
{ 'id': 'order-server-1', 'host': '127.0.0.1', 'port': 6060, "args": " --inspect=9242" },
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
/**
|
||||||
|
* Created by superzhan on 2018/3/19.
|
||||||
|
*
|
||||||
|
* 根据pomelo 的 servers.json 生成 pm2 启动文件
|
||||||
|
*/
|
||||||
|
|
||||||
|
//服务器端 工程代码的目录
|
||||||
|
var cwd = './';
|
||||||
|
|
||||||
|
//项目的运行环境
|
||||||
|
// var config = require('./config.json');
|
||||||
|
var masterEnvType = process.argv[2];//主机环境
|
||||||
|
var distributeEnvType = process.argv[3];//分布式环境
|
||||||
|
console.log('masterEnvType is:', masterEnvType);
|
||||||
|
console.log('distributeEnvType is:', distributeEnvType);
|
||||||
|
|
||||||
|
//配置文件的输出目录
|
||||||
|
var outputFilePath = './pomeloPm2Start.json';
|
||||||
|
|
||||||
|
var masterJsonFile = require('./config/master.ts');
|
||||||
|
var serversJosnFile = require('./config/servers.ts');
|
||||||
|
|
||||||
|
//模板数据
|
||||||
|
var processConfigType = {
|
||||||
|
"name": "",
|
||||||
|
"script": "./dist/app.js",
|
||||||
|
"args": [],
|
||||||
|
"watch": false,
|
||||||
|
"out_file": "./logs/app.log",
|
||||||
|
"error_file": "./logs/err.log",
|
||||||
|
"cwd": "",
|
||||||
|
"merge_logs": true,
|
||||||
|
"exec_mode": "fork_mode",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//最后的结果数据
|
||||||
|
var resultJson = {};
|
||||||
|
resultJson.apps = new Array();
|
||||||
|
|
||||||
|
|
||||||
|
var clone = function (origin) {
|
||||||
|
if (!origin) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var obj = {};
|
||||||
|
for (var f in origin) {
|
||||||
|
obj[f] = origin[f];
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
var masterConfig = masterJsonFile[masterEnvType];
|
||||||
|
var serversConfig = serversJosnFile[distributeEnvType];
|
||||||
|
|
||||||
|
//生成master 的配置
|
||||||
|
// var pm2Master = clone(processConfigType);
|
||||||
|
// pm2Master.name = "master";
|
||||||
|
// pm2Master.args = new Array();
|
||||||
|
// pm2Master.args.push('serverType=master');
|
||||||
|
// pm2Master.args.push('id=' + masterConfig.id);
|
||||||
|
// pm2Master.args.push('host=' + masterConfig.host);
|
||||||
|
// pm2Master.args.push('port=' + masterConfig.port);
|
||||||
|
// pm2Master.args.push('env=' + envType);
|
||||||
|
// pm2Master.args.push('mode=stand-alone');
|
||||||
|
// pm2Master.cwd = cwd;
|
||||||
|
// pm2Master.out_file = './logs/' + masterConfig.id + "_app.log";
|
||||||
|
// pm2Master.error_file = './logs/' + masterConfig.id + '_error.log';
|
||||||
|
// resultJson.apps.push(pm2Master);
|
||||||
|
|
||||||
|
//生成当个服务器的配置
|
||||||
|
for (serverType in serversConfig) {
|
||||||
|
var servers = serversConfig[serverType];
|
||||||
|
for (var i = 0; i < servers.length; ++i) {
|
||||||
|
var singleServer = servers[i];
|
||||||
|
|
||||||
|
var appPm2Config = clone(processConfigType);
|
||||||
|
appPm2Config.name = singleServer.id;
|
||||||
|
appPm2Config.args = new Array();
|
||||||
|
appPm2Config.args.push('env=' + masterEnvType);
|
||||||
|
appPm2Config.args.push('id=' + singleServer.id);
|
||||||
|
appPm2Config.args.push('port=' + singleServer.port);
|
||||||
|
appPm2Config.args.push('host=' + singleServer.host);
|
||||||
|
appPm2Config.args.push('serverType=' + serverType);
|
||||||
|
|
||||||
|
if (singleServer.frontend != null) {
|
||||||
|
appPm2Config.args.push('frontend=' + singleServer.frontend);
|
||||||
|
appPm2Config.args.push('clientPort=' + singleServer.clientPort);
|
||||||
|
appPm2Config.args.push('clientHost=' + singleServer.clientHost);
|
||||||
|
}
|
||||||
|
|
||||||
|
appPm2Config.cwd = cwd;
|
||||||
|
appPm2Config.out_file = './logs/' + singleServer.id + '_app.log';
|
||||||
|
appPm2Config.error_file = './logs/' + singleServer.id + '_error.log';
|
||||||
|
|
||||||
|
resultJson.apps.push(appPm2Config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//生成结果数据
|
||||||
|
var resultFileStr = JSON.stringify(resultJson);
|
||||||
|
//console.log(resultFileStr);
|
||||||
|
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
fs.writeFile(outputFilePath, resultFileStr, function (err) {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
} else {
|
||||||
|
console.log('finish genereate Server pm2 config');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#/bin/bash
|
||||||
|
if [ $# != 2 ] ; then
|
||||||
|
echo "需要2个参数"
|
||||||
|
echo "例如 ./pm2StarterDistribute.sh dev distribute"
|
||||||
|
echo "参数1 主机环境 master.json中的类型 例如:dev"
|
||||||
|
echo "参数2 新物理机启动的servers servers.ts中的类型 例如:distribute"
|
||||||
|
echo "关于参数配置,详见README描述"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
npm install #安装依赖库
|
||||||
|
npm run build
|
||||||
|
node pm2DistributeConfig.js ${1} ${2} #使用pm2来做进程管理,生成进程配置文件
|
||||||
|
pm2 start pomeloPm2Start.json #pm2 启动游戏服务器
|
||||||
Reference in New Issue
Block a user