环境要求

  • oracle:版本 11g 及以上
  • mysql:8.0 及以上
  • docker:17.12.0 及以上

Docker 镜像构建(可选)

服务端镜像构建

在项目根目录下执行如下语句构建应用 Docker 镜像:

  1. ./mvnw -Pprod verify -DskipTests jib:dockerBuild

导出

  1. docker save smarttrain > smarttrain.tar

或直接执行下面语句导出 Tar 文件:

./mvnw -Pprod verify -DskipTests jib:buildTar

在项目编译的 target 目录下便能找到对应版本的 Tar 文件。

客户端镜像构建:

在项目根目录下执行如下语句构建应用 Docker 镜像:

docker build . -t smart-train-web

导出

docker save smart-train-web > smart-train-web.tar

开始-导入

在未使用 Docker 仓库的情况下,我们直接导入 Image 文件:

镜像的地址为当前目录的 images 文件夹,基于当前说明文件地址,则前端镜像导入指令为:

docker load -i images/smart-train-web.tar

后端导入指令为:

docker load -i images/smarttrain.tar

使用 docker image ls 查看导入镜像为如下,TAG 为当前镜像版本号,则为成功:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
smart-train-web     latest              62ff51dfed1f        3 hours ago         667MB
smarttrain          latest              03b22b8f799a        3 hours ago         289MB

服务端启动

配置文件

后端部署文件位于当前目录的 api 下:

  • app.yml :服务端应用部署配置

镜像版本设置:

默认 docker-compose 文件内使用镜像不带版本号,即使用 latest 版本;

如需修改特定版本,修改镜像名为:镜像名:版本号,如下:

image: smarttrain:1.1.0

关于环境变量的解释:

系统启动时会受环境变量影响,环境变量的配置地方比较多: docker 部署文档中的环境变量相当于系统环境变量,变量名都为大写和下滑线组成;这里仅列出一些必须的配置;系统变量会优先生效; 除了 docker 部署文档列出的环境变量外,还可以通过配置文件去修改环境变量,完整的配置文件放在 api/config 目录下,application.yml 为基础配置文档,application-*.yml 不同配置文档配合 SPRING_PROFILES_ACTIVE 环境变量使用;

docker 部署文档环境变量解释:

  • _JAVA_OPTIONS:jvm 启动参数,Xmx:最大内存使用;Xms:最小内存使用;
  • SPRING_PROFILES_ACTIVE:当前激活的配置文档;
    可选值:swagger:开启 api 文档;prod:正式环境启动;dev:测试环境启动;no-liquibase:不使用 liquibase 管理数据库版本,这意味着不使用自动建表,修改表等操作;tls:https 部署;

    不同配置文档可组合使用,比如:prod, swagger, no-liquibase 代表 prod 环境启动,开启 swagger 文档,不需要自动建表

  • MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED:是否启用 PROMETHEUS 指标监控接口

  • SPRING_JPA_DATABASE_PLATFORM:数据库平台使用的方言版本
  • SPRING_JPA_DATABASE:数据库连接使用的数据库类型
  • SPRING_DATASOURCE_URL:数据库连接地址
  • SPRING_DATASOURCE_USERNAME:数据库用户名
  • SPRING_DATASOURCE_PASSWORD:数据库密码
  • SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE:数据库连接池最大连接数
  • APPLICATION_LOGIN_TYPE:授权类型,默认:local,可选值:local,uac

文件映射解释:

要修改映射到不同地方,只需改动前面的地址到宿主机的相应位置

  • ~/volumes/smartTrain/file/:/upload/ # 映射上传文件到宿主机
  • ~/volumes/smartTrain/config/:/config/ # 需要额外配置覆盖默认配置的,可以在宿主机映射位置放置配置文件
  • ~/volumes/smartTrain/logs/:/logs/ # 映射日志文件到宿主机
  • /etc/localtime:/etc/localtime:ro # 保持容器时区于宿主机一致

端口映射解释:

应用默认启动端口为:8080

部署文档默认配置为:8080:8080 宿主机:8080 映射容器内部 8080 端口;

如果想要修改外部对外端口,则只需修改前面的端口号;例如:

9999:8080

则外部访问地址变为:宿主机 ip:9999

数据库配置:

后台 prod 环境 默认使用 mysql 镜像数据库,支持 oracle 远程数据库

  • mysql.yml :mysql 数据库配置文件

    数据库的配置文件默认会挂载在宿主机根目录的 volumes 目录下:~/volumes/smartTrain/mysql/:/var/lib/mysql/


  • 可以通过环境变量设置数据库 root 密码,或者添加用户;
    默认数据库开放端口:3306

DEMO:使用 oracle 数据库时 app.yml 环境变量配置如下:

- _JAVA_OPTIONS=-Xmx2048m -Xms256m # jvm 启动参数,Xmx:最大内存使用;Xms:最小内存使用
# swagger:开启 api 文档;prod:正式环境启动;dev:测试环境启动;no-liquibase:不使用 liquibase 管理数据库版本,这意味着不使用自动建表,修改表等操作;
- SPRING_PROFILES_ACTIVE=prod,swagger
- MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED=true # 启用 PROMETHEUS 指标监控接口
- SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.Oracle10gDialect
- SPRING_JPA_DATABASE=ORACLE
- SPRING_DATASOURCE_URL=jdbc:oracle:thin:@101.132.190.28:1521:xe
- SPRING_DATASOURCE_USERNAME=smarttraindev
- SPRING_DATASOURCE_PASSWORD=smarttraindev
- SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE=2 # 数据库连接池最大连接数
#      - APPLICATION_LOGIN_TYPE=  # 授权类型,默认:local,可选值:local, uac
- JHIPSTER_SLEEP=30 # 留出时间让其他服务在应用程序启动之前

oracle 不使用自动建表语句时需要手动执行建表语句,语句脚本放在 sql 目录下:

语音配置:

语音会按当前配置的 application.api-type 类型生效 可选的类型值包括:

  • baidu-api(百度语音)
  • asr-tts-api(内部语音)
  • alibaba-api(阿里语音)

如需实现其它语音解析,需实现接口:

/**
 * 音频和文字转换接口
 *
 * @author zeral
 * @date 2019/09/21
 */
public interface AudioTextTransform {
    /**
     * 音频字节流转文字
     *
     * @param attachment 附件信息
     * @return 识别的文本
     */
    String audioToText(Attachment attachment);

    /**
     * 文字转音频
     *
     * @param text 需要转换的文本
     * @return Attachment 附件信息
     * @throws BadRequestAlertException 请求异常错误
     */
    Attachment textToAudio(String text) throws BadRequestAlertException;
}

完整的配置属性如下:

  • 内部语音:见 api/config/application-prod.ymlapplication.asr-tts-api 配置
    完整配置如下: ``` /**
    • 语音地址,必填 / base-url: /*
    • 产品标识,必填 */ product-id:

/**

  • api 唯一标识,必填 */ api-key:

/**

  • 指定第⼀路语⾔模型 */ res: airobot

language:zh-CN

/**

  • ⾳频类型,不⽀持ogg vorbis,只⽀持ogg speex
  • ogg, wav,mp3,flv,amr,opus,adpcm */ audio-type: wav

/**

  • ⾳频数据采样率,推荐使⽤16000; (ogg⽀持
  • 8000,16000;wav⽀持8000,16000;mp3⽀持
  • 16000,22050,44100;amr⽀持8000) */ sample-rate: 16000

/**

  • 声道 */ channel: 1

/**

  • ⾳频数据每采样点⼤⼩ */ sample-bytes: 2

/**

  • 指定发⾳⼈
  • 可选值:gqlanf、xijunma、kaolaf */ voice-id: lucyfa

speed: 1f

text-type: text


- 百度语音:见 [api/config/application-dev.yml](api/config/application-dev.yml) 的 `application.baidu-api` 配置
<br />完整配置如下:

/**

  • 产品唯一标识,必填 / appId: /*
  • api 唯一标识,必填 / api-key: /*
  • api 密钥,必填 */ secret-key:

connection-timeout-in-millis: 2000

socket-timeout-in-millis: 60000

/**

  • 语音模型 Id */ dev-pid: 1536

/**

  • 采样率 */ rate: 16000

/**

  • 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件 */ audio-type: wav ```
  • 阿里语音
    alibaba-api:
    # 语音识别key
    audio-key: aS2KlVvio6QgVI8K
    # 语音合成key
    text-key: aS2KlVvio6QgVI8K
    # 认证token
    token: a84743d6a22d40ad9afc02fd3f6d026f
    # 若为外网置为空
    url: ws://nls-gateway.cn-shanghai-internal.aliyuncs.com:80/ws/v1
    

启动

在当前目录执行启动后端服务:

docker-compose -f api/app.yml up -d

使用 docker container ls 便看到如下信息:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
17263e575449        smarttrain          "sh -c 'chmod +x /en…"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp              smarttrain-app
50dcae3fa880        mysql:8.0.16        "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   smarttrain-mysql

使用 docker logs {容器 ID} -f 查看 smarttrain 后端服务日志:

看到如下信息表示启动成功:

----------------------------------------------------------
    Application 'smartTrain' is running! Access URLs:
    Local:         http://localhost:8080/
    External:     http://172.23.0.3:8080/
    Profile(s):     [prod, swagger]
----------------------------------------------------------

访问 http://localhost:8080/ 便可查看后端服务监控页面。

客户端启动

配置文件

前端配置文件为当前目录下的:docker-compose-web.yml 文件:

  • 默认开放端口为 4000,如需修改前端暴露给外部端口,则只需修改前面的端口号;例如:
    4010:4000
    则外部访问地址变为:宿主机 ip:4010
  • 前端默认使用和后端同一网络环境,并使用后端接口作为请求地址:

如果前后不在同一网络环境下,请修改为后端容器 ip:端口号

environment:
  - API_URL=http://smarttrain-app:8080
  # uaa 或 uac 地址,如果地址有变
  # - BASE_URL=http://t-uaa.mega-insight.com

启动

在当前目录执行启动前端服务:

docker-compose -f docker-compose-web.yml up -d

使用 docker container ls 查看容器启动状况:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
50dcae3fa880        mysql:8.0.16        "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   smarttrain-mysql

查看 docker 日志 docker logs {容器 ID} -f 看到如下信息表示启动成功:

> smartrain@1.0.0 start /usr/src/smart-train
> nuxt start
ℹ Listening on: http://172.23.0.4:4000/

访问 http://localhost:4000 便可查看前端页面。

默认初始化测试账号及密码(开发环境适用)

  • 助教:assistant/assistant
  • 讲师:teacher/teacher
  • 学员:student/student
  • 智训管理员:train_manager/train_manager
  • 审核者:reviewer/reviewer
  • 超级管理员:admin/admin

更多账号可以使用超级管理员登录后端监控页面添加用户。

关于网络

默认情况下,后端服务会创建自己的网络为 api_backend,并使用桥接模式;

前端服务共享后端网络,请通过环境变量 API_URL 请求后端服务:

API_URL=http://smarttrain-app:8080

更多

前端服务使用 pm2 守护管理前端服务:

查看前端服务监控情况:

docker exec -it smart-train-web pm2 monit

查看项目详情:

docker exec -it smart-train-web pm2 show smart-train

指标监控

后端服务默认开启了指标监控端口 /management/prometheus,并开启了超级管理员认证;

你可以使用 api/monitor/monitoring.yml docker 配置启动指标收集和监控。

查看后台服务版本及构件信息

可以使用 spring boot 监控接口查看:

http://后台地址:端口号/management/info