说明:为便于非正式环境的部署,或正式环境初期无分布式要求时的快速部署,特简化此文档用于指导本框架的安装。
后期仍可基于此次的部署结果,继续参考完整部署文档进行多节点部署。
一、部署前准备:
1、域名
需要为路由单独使用一个域名(可以是二级域名,也可以使用IP+端口),例如uim-router.domain.com;
需要为网关单独使用一个域名(可以是二级域名,也可以使用IP+端口),例如uim-socket1.domain.com;
2、系统环境
准备至少一个redis(v5.0+)实例和一个mysql(v5.5+)实例;
路由与网关软件环境均需要安装nodejs v12+,操作系统建议使用centos7/8,网络环境需要能够与用户端进行互访;
已有nodejs运行环境可跳过,如版本不对或未安装,下方命令使用docker,同时以贴近手工部署为例,可供参考:
-------------------------------------------
/*创建数据库(用于记录接口日志)并执行以下语句*/
CREATE TABLE `request_api_log` (
`req_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'api请求日志主键',
`app_id` int(11) DEFAULT NULL COMMENT '应用编号',
`api_id` varchar(255) DEFAULT NULL COMMENT 'api编号',
`account_id` int(11) DEFAULT NULL COMMENT '用户编号',
`token` char(32) DEFAULT NULL COMMENT '用户会话',
`session_id` int(11) DEFAULT NULL COMMENT '用户会话',
`args` longtext COMMENT 'api内部参数',
`req_time` int(11) DEFAULT NULL COMMENT '请求开始时间',
`code` tinyint(4) DEFAULT NULL COMMENT '返回码',
`result` longtext COMMENT '返回json',
`api_execute_time` int(11) DEFAULT NULL COMMENT 'api执行时间(单位:毫秒)',
`input_length` int(11) DEFAULT NULL COMMENT '输入参数总长度',
`result_length` int(11) DEFAULT NULL COMMENT '输出结果总长度',
`client_ip` char(50) DEFAULT NULL COMMENT '客户端ip',
`client_uuid` char(32) DEFAULT NULL COMMENT '客户端唯一标识',
`client_id` bigint(20) DEFAULT NULL COMMENT '客户端唯一标识',
`catch_event` tinyint(1) DEFAULT NULL COMMENT '抓取事件:0=未开启,1=捕获中,2=未触发事件,3=触发事件',
`base_execute_time` int(11) DEFAULT NULL COMMENT '基路由消耗时间(统一权限校验等)',
`socket_server_id` int(11) DEFAULT NULL COMMENT '发起请求服务器编号',
`api_server_id` int(11) DEFAULT NULL COMMENT '处理请求服务器编号',
`engineering_id` int(11) DEFAULT NULL COMMENT '所属工程',
`req_time_ms` bigint(20) DEFAULT NULL COMMENT '请求开始时间',
`api_time_ms` bigint(20) DEFAULT NULL COMMENT 'api消费时间',
`ret_time_ms` bigint(20) DEFAULT NULL COMMENT 'api返回时间',
`cbk_time_ms` bigint(20) DEFAULT NULL COMMENT '执行回调时间',
`socket_req_index` int(11) DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
PRIMARY KEY (`req_id`),
UNIQUE KEY `req_index` (`socket_req_index`,`req_time_ms`)
) ENGINE=InnoDB AUTO_INCREMENT=330 DEFAULT CHARSET=utf8mb4
-------------------------------------------
# 下载nodejs编译包和uim源码包到指定目录
mkdir /data/yourpath/ -pv
cd /data/yourpath/
wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz
wget https://open-src.uim.site/src/uim-v1.1.0.tar.xz
# 安装docker并开启服务
yum install docker -y
systemctl start docker
systemctl enable docker
# 使用最新的centos精简版镜像创建空的容器环境(可根据自身情况修改或去除v和p参数)
docker run --name uim-nodejs-test -tid -v /data/yourpath:/home/data -p 80:80 -p 443:443 centos /usr/sbin/init
docker exec -ti uim-nodejs-test bash
# 复制nodejs编译包到容器/home/目录并解压(下载地址:)
cp /home/data/node-v12.18.3-linux-x64.tar.xz /home/node-v12.18.3-linux-x64.tar.xz
cd /home/
tar xf node-v12.18.3-linux-x64.tar.xz
ln -s /home/node-v12.18.3-linux-x64/bin/node /usr/bin/node
ln -s /home/node-v12.18.3-linux-x64/bin/npm /usr/bin/npm
ln -s /home/node-v12.18.3-linux-x64/bin/npx /usr/bin/npx
# 建议使用淘宝或其他国内源:npm --registry https://registry.npm.taobao.org info underscore
# 安装forever
npm install forever -g
ln -s /home/node-v12.18.3-linux-x64/bin/forever /usr/bin/forever
# 将uim v1.1.0运行包解压到/home/data/目录(下载地址:)
cd /home/data
tar xf uim-v1.1.0.tar.xz
cd ./uim-v1.1.0/
# 修改uim-router(路由)配置文件
cd ./socket-router
vi ./env.config.js
# 修改4~24行中关于socket_router_id、listen_port、https证书以及redis、mysql的连接信息。修改提示:
# socket_router_id使用1即可
# 监听端口可自定义
# https填入证书实际路径(secureOptions保持注释即可,无特殊情况不必指定SSL/TLS协议版本,如无证书请将key与cert保持注释状态);
# 此处redis为分布式框架控制台交换命令时专用,简易部署时可共用其他redis
# 此处mysql为记录接口日志时专用,简易部署时可与业务层使用同一数据库
# 其他项如无特殊要求则不必修改
# 修改网关列表
vi .env/console_deploy.socket_server_list.socket_router_1.js
# 将本可用区的socket-server添加到此js数组(socket_server_id、host需要与下方socket-server的配置相对应)
# 挂载应用列表(部署时可跳过此步骤,在需要挂载时参考文档末尾的手动挂载项目/应用)
vi .env/console_deploy.app_list.socket_router_1.js
# 使用forever启动路由服务
forever start -l /home/data/log-router socket-router.js
# 修改uim-server(网关)配置文件
cd ../socket-server
vi ./env.config.js
# 修改4~17行中关于socket_router_id、socket_server_id、listen_port、https证书以及redis的连接信息。修改提示:
# socket_router_id与前面部署的uim-router相对应
# socket_server_id使用1即可(如果有多台则往后递增)
# socket_server_host为先前准备的域名(socket-router中的网关列表与此相对应)
# 监听端口可自定义
# https填入证书实际路径(secureOptions保持注释即可,无特殊情况不必指定SSL/TLS协议版本,如无证书请将key与cert保持注释状态);
# 此处redis配置与router中相同
# 其他项如无特殊要求则不必修改
# 挂载项目列表(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.project_list.socket_router_1.js
# 挂载应用列表(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.app_list.socket_router_1.js
# 挂载接口列表(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.api_list.project_{项目编号}.js
# 挂载接口队列(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.redis_list.project_{项目编号}.js
# 使用forever启动网关服务
forever start -l /home/data/log-server socket-server.js
# 修改uim-consumer(消费主控)配置文件
cd ../consumer
vi ./env.config.js
# 修改4~10行中关于socket_router_id、consumer_id以及redis的连接信息。修改提示:
# socket_router_id与前面部署的uim-router相对应
# consumer_id使用1即可(如果有多台则往后递增)
# 此处redis配置与router中相同
# 其他项如无特殊要求则不必修改
# 挂载项目列表(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.project_list.consumer_1.js
# 挂载消费机列表(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.api_server_list.consumer_{主控编号}.project_{项目编号}.js
# 挂载接口列表(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.api_list.project_{项目编号}.js
# 挂载接口队列(部署时可跳过此步骤,在需要挂载时参考手动挂载项目/应用的说明)
vi .env/console_deploy.redis_list.consumer_{主控编号}.project_{项目编号}.js
# 使用forever启动消费主控服务
forever start -l /home/data/log-consumer consumer.js
# 至此uim v1.1.0分布式接口网关部署完成,当有其他应用需采用uim v1.1.0进行分布式部署时,只需要将项目、应用、redis和消费机进行挂载即可,无须再另外部署。
# 挂载应用/项目信息和消费节点的操作说明:
# uim v1.1.0源码包中不包含Uim部署管理控制台,因此不支持自动化运维和动态挂载,如需要增加或修改挂载时,请分别手动更新router、socket和consumer下.env目录中以"console_deploy"开头的js文件,修改后使用forever重启相关进程即可(如需动态挂载和自动化运维请另外参考在线文档)。
-------------------------------------------