uim v1.1.0 简单部署文档

    说明:为便于非正式环境的部署,或正式环境初期无分布式要求时的快速部署,特简化此文档用于指导本框架的安装。
    后期仍可基于此次的部署结果,继续参考完整部署文档进行多节点部署。
    一、部署前准备:
    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重启相关进程即可(如需动态挂载和自动化运维请另外参考在线文档)。
    -------------------------------------------