diff --git a/README.md b/README.md index 490212259..7f8c28896 100644 --- a/README.md +++ b/README.md @@ -18,5 +18,9 @@ 1.master.ts对应环境的主机host填写内网ip地址,新服务器host填写主机host地址 2.config/database.ts填写对应环境下的配置 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="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` diff --git a/game-server/config/servers.ts b/game-server/config/servers.ts index 5f3722e79..09cf6ae5a 100644 --- a/game-server/config/servers.ts +++ b/game-server/config/servers.ts @@ -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" } ], '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" } + { 'id': 'chat-server-1', 'host': '172.26.145.161', 'port': 6050, "args": " --inspect=9234" }, + { 'id': 'chat-server-2', 'host': '172.26.145.161', 'port': 6051, "args": " --inspect=9235" }, + { 'id': 'chat-server-3', 'host': '172.26.145.161', 'port': 6052, "args": " --inspect=9236" } ], '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': [ - { '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': [ { '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" } ], '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': [ - { '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" } + { 'id': 'guild-server-1', 'host': '172.26.145.161', 'port': 6057, "args": " --inspect=9239" }, + { 'id': 'guild-server-2', 'host': '172.26.145.161', 'port': 6058, "args": " --inspect=9240" } ], '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': [ - { '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': { @@ -266,39 +266,10 @@ module.exports = { }, 'distribute': { '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-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" } + { 'id': 'connector-server-4', 'host': '172.26.145.171', 'port': 9061, 'clientHost': '121.89.211.172', 'clientPort': 3050, 'frontend': true, "args": " --inspect=9237" }, ], 'activity': [ - { 'id': 'activity-server-2', 'host': '127.0.0.1', 'port': 6059, "args": " --inspect=9241" }, - ], - 'order': [ - { 'id': 'order-server-1', 'host': '127.0.0.1', 'port': 6060, "args": " --inspect=9242" }, + { 'id': 'activity-server-2', 'host': '172.26.145.171', 'port': 9062, "args": " --inspect=9241" }, ] } }; diff --git a/game-server/pm2DistributeConfig.js b/game-server/pm2DistributeConfig.js new file mode 100644 index 000000000..1942e7bf1 --- /dev/null +++ b/game-server/pm2DistributeConfig.js @@ -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'); + } +}); + + + + + diff --git a/game-server/pm2StarterDistribute.sh b/game-server/pm2StarterDistribute.sh new file mode 100755 index 000000000..d017a743b --- /dev/null +++ b/game-server/pm2StarterDistribute.sh @@ -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 启动游戏服务器