服务端配置与运行

本文介绍远程监考服务端集成示例源码说明。

项目框架

  • 基于主流的Java8 + Springboot2搭建框架。

  • 基于Mybatis plus作为Repository层选型。

  • 基于SpringSecurity + JWT实现权限控制。

项目部署

前提条件

  • 已完成控制台配置相关操作。

  • 如果您需要通过源码构建并部署AppServer,请确保环境中已安装jdk8。

创建数据库

当配置好DB后,手工创建数据库表。以MySQL为例,建表语句为:

CREATE TABLE `cheat_config` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `exam_id` varchar(256) NOT NULL COMMENT '考试ID',
  `data` text NOT NULL COMMENT '具体配置,JSON串',
  `creator` varchar(256) DEFAULT NULL COMMENT '创建者',
  `created_at` datetime NOT NULL COMMENT '创建时间',
  `updated_at` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `exam_id` (`exam_id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB;

CREATE TABLE `cheat_record` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `exam_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '考试ID',
  `room_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '考场id',
  `user_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '考生id',
  `detect_type` varchar(256) NOT NULL COMMENT '检测类型',
  `detect_time` datetime NOT NULL COMMENT '检测时间',
  `is_main_monitor` varchar(256) NOT NULL COMMENT '考生主机位/副机位',
  `extra_info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '额外信息存储',
  `created_at` datetime NOT NULL COMMENT '创建时间',
  `updated_at` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_exam_id` (`exam_id`),
  KEY `idx_create_at` (`created_at`),
  KEY `idx_room_id` (`room_id`) USING BTREE
) ENGINE=InnoDB;


CREATE TABLE `exam_room_infos` (
  `id` varchar(256) NOT NULL,
  `name` varchar(256) DEFAULT NULL,
  `exam_id` varchar(256) DEFAULT NULL,
  `status` bigint DEFAULT NULL,
  `audio_status` bigint DEFAULT NULL,
  `im_group_id` varchar(256) DEFAULT NULL,
  `create_teacher` varchar(256) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB;

CREATE TABLE `examinations` (
  `id` varchar(256) NOT NULL,
  `name` varchar(256) DEFAULT NULL,
  `start_time` datetime DEFAULT NULL,
  `end_time` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB

参数说明

  • cheat_config表: 存储作弊配置

  • cheat_record表:记录考生的作弊信息

  • exam_room_infos表:存储考场信息

  • examinations表:存储考试信息

具体字段

具体字段可参考代码对应的各个实体:

  • com.aliyuncs.aui.entity.CheatConfigEntity

  • com.aliyuncs.aui.entity.CheatRecordEntity

  • com.aliyuncs.aui.entity.RoomInfoEntity

  • com.aliyuncs.aui.entity.ExamEntity

部署方式

  • 方式一(推荐):通过源码部署。

    本示例主要通过源码构建并部署AppServer。根据源码的说明文档配置并执行,详细信息,请参见AUI Kits远程监考AppServer

  • 方式二:如果熟悉函数计算,也可以使用Serverless平台快速部署,参见快速创建函数

重要

在首次部署服务器时,请务必编辑代码文件code/src/main/java/com/aliyuncs/aui/common/utils/JwtUtils.java,给属性SECRET随机设置一个字符串。

项目参数配置

  1. 下载远程监考源码至服务器。

  2. 打开源码Server\Java\code\src\main\resources目录下的application.yml文件,配置相关参数。

    参数配置信息

    说明

    # pop配置。需要配置账号的AccessKey ID和AccessKey Secret,用于调用IM及live相关服务
     biz:
      openapi:
        access:
          key: "*********"
          secret: "*********"

    调用阿里云IM及Live相关服务API时,您需要使用AccessKey完成身份验证。AccessKey包括AccessKey ID和AccessKey Secret。具体如下:

    • AccessKey ID:用于标识用户。

    • AccessKey Secret:用于验证用户的密钥。AccessKey Secret必须保密。

    更多信息,请参见创建AccessKey

    # 新IM相关配置 
      new_im:
        appId: "********"
        appKey: "********"
        appSign: "********"

    直播动消息应用ID,请参见控制台开通与配置中的创建直播互动消息应用获取。

    # 配置推拉流信息
      live_stream:
        push_url: push.*****.vip
        pull_url: pull.*****.vip
        push_auth_key: zJl4******
        pull_auth_key: mDZs********
        app_name: live
        auth_expires: 604800
    • push_url: WebRTC(超低延时RTS2.0)推流域名

    • pull_url: WebRTC(超低延时RTS2.0)播放域名

    • push_auth_key: 推流域名的鉴权主KEY,具体详见配置URL鉴权

    • pull_auth_key: 播流域名的鉴权主KEY,具体详见配置URL鉴权

    • app_name: 旁路转推后直播流地址中的AppName,默认为live,可自定义。

      说明

      若您需要为转推后的流绑定转码、录制、截图等模板,需要设置该AppName与模板中的AppName一致才会生效。

    # ram及upload用于考生端本地录制功能上传视频的功能,需要使用就配置
      ram:
        access_key_id: LTAI5*********
        access_key_secret: NLgHO********
      upload:
        role_arn: acs:ram::*******
        region: cn-shanghai
        bucket: *****
        base_path: /***

    请参阅使用STS临时访问凭证访问OSS使用STS临时授权方案上传视频文档创建RAM用户、角色,配置相关参数。

    • access_key_id:RAM用户ID。

    • access_key_secret:RAM用户访问密钥。

    • role_arn:RAM角色。

    • region:Bucket所在区域,如 oss-cn-shanghai。

    • bucket:OSS Bucket名。

    • base_path:上传至OSS Bucket的基础路径,如 /record/local/ ,注意和考生客户端配置项保持一致。

    # 配置允许跨域的请求域名
    http:
      cors:
        host: "*"

    Web端使用该服务时请正确设置CORS,以允许跨域请求。

项目打包和运行

打包

  1. 使用IDEA自带的Maven打包,jar在target目录下。

  2. Server\Java\code路径下使用以下命令执行打包操作。

    mvn package -DskipTests
  3. target目录下的jar包发送到服务器。

    scp xxx.jar root@ip:/root

运行项目

在jar包所在目录下打开终端。

  1. 终端运行,日志打印到终端。

    java -jar ***.jar
  2. 后台运行,将日志打印输出到nohup.out文件。

    nohup java -jar ***.jar &
  3. 查看是否启动成功。

    访问对应接口,显示如下,说明AppServer启动成功。

    image