环境要求
- oracle:版本 11g 及以上
- mysql:8.0 及以上
- docker:17.12.0 及以上
Docker 镜像构建(可选)
服务端镜像构建
在项目根目录下执行如下语句构建应用 Docker 镜像:
./mvnw -Pprod verify -DskipTests jib:dockerBuild
导出
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 目录下:
- SMARTTRAIN.sql 建表语句
- FACTORY.sql 工厂初始化数据
- EVALUATION_ERROR_TYPE.sql 考核错误类型初始化数据
- TRAIN_TYPE.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.yml 的
application.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