sg-exam:从克隆到跑通的在线考试平台完整部署教程
【免费下载链接】sg-exam基于Spring Boot搭建的新一代教学管理平台,提供权限管理、考试、问卷、练习等功能项目地址: https://gitcode.com/gh_mirrors/sg/sg-exam
sg-exam 是一个基于 Spring Boot 与 Vue 构建的教学管理平台,提供课程、在线考试、题库、问卷与成绩管理,支持单选、多选、判断、简答及音视频题型,自带多租户与权限体系。本文带你完成一次完整部署:环境检查、克隆代码、本地或 Docker 两种方式启动,并解读最常改的几个配置项。
sg-exam 能做什么:从课程到成绩的一体化考试平台
一句话定位:它把「建课程 → 出题组卷 → 在线考试 → 阅卷出分」串成了一条完整链路,并配套了三个前端:
- Web 前端(
frontend/sg-exam-web):学员端,在线考试、课程学习、个性化练习; - H5 客户端(
frontend/sg-exam-mobile):移动端精简版,专注考试参与; - 后台管理系统(
frontend/sg-exam-admin):管理端,课程、考试、题库、成绩全链条管理,外加单位、用户、角色、菜单等系统配置。
它适合谁?想搭一套内部培训考核系统、题库练习平台或问卷系统的团队;也适合学习 Spring Boot 多模块工程 + Vue 前后端分离架构的开发者。
启动前先备好:必选 4 项、可选 2 项
| 依赖 | 版本 | 必选/可选 | 说明 |
|---|---|---|---|
| JDK | 17 | 必选 | 后端编译与运行均要求 17(Dockerfile 安装的是java-17-openjdk,build.gradle 指定VERSION_17) |
| Gradle | 用自带 wrapper | 必选 | 无需单独安装,直接用仓库根目录的./gradlew |
| Node.js + yarn | 仓库未提供,请查看 frontend/sg-exam-admin/package.json 确认 | 必选(构建前端时) | 只部署后端接口可不装 |
| Redis | 任意主流版本 | 必选 | dev 配置默认连本机127.0.0.1:6379,docker-compose.yml 已内嵌redis:latest |
| MySQL | 5.7.27 | 可选 | 仅 docker 配置需要;dev 配置走 H2 文件库,docker-compose.yml 已内嵌 |
| MinIO | 任意版本 | 可选 | 默认的附件/图片存储,docker-compose.yml 已内嵌 |
| Docker + Compose | 任意较新版本 | 容器化部署时必选 | 本地开发模式可不用 |
一个容易踩的坑:sg-exam-mobile构建时注入了NODE_OPTIONS=--openssl-legacy-provider(见 setup.sh),如果你单独构建 H5 端,也要带上这个环境变量,仓库未提供对 Node 的具体版本要求,请查看 frontend/sg-exam-mobile/package.json 确认。
三步完成首次启动
第一步:克隆仓库
git clone https://gitcode.com/gh_mirrors/sg/sg-exam你应看到:进入目录后,sg-api、sg-common、sg-user-service、sg-exam-service等后端模块,frontend/下三个前端,以及存放部署配置的config-repo/都在。
第二步:构建
后端只构建一个可执行产物,在仓库根目录执行:
./gradlew build -x test你应看到:sg-user-service/build/libs/目录下生成可执行 jar——Dockerfile 打包镜像时取的就是这个路径。
前端用一条脚本构建三个站(内部对各端执行yarn build):
./setup.sh -build_f你应看到:frontend/sg-exam-web/dist、frontend/sg-exam-admin/dist、frontend/sg-exam-mobile/dist三个目录生成。
第三步:启动(二选一)
方式 A:本地开发模式(H2 内存库,免装 MySQL)
java -jar sg-user-service/build/libs/sg-user-service-0.0.15.jar \ --spring.profiles.active=dev \ --spring.config.additional-location=file:./config-repo/application.yml,file:./config-repo/sg-user-service.yml这条命令的含义:激活dev配置(用 H2 文件库替代 MySQL),并把 config-repo/ 下的两份 YAML 纳入 Spring 配置——与 sg-exam.env 中SPRING_CONFIG_LOCATION的写法一致。你应看到:服务在8080 端口启动,上下文路径是/sg-user-service;数据库自动初始化自 config-repo/h2/schema-h2.sql,H2 控制台开在/h2,数据落在本地data/h2/目录。
方式 B:Docker 一键部署(MySQL + Redis + MinIO + 应用全套)
前端构建完成后,执行:
./setup.sh -build它完成「后端构建 + 打sg-exam:latest镜像」,然后再启动:
./setup.sh -start你应看到:docker ps里出现mysql-service、redis-service、minio-service、sg-exam四个容器。MySQL 首次启动会自动执行 config-repo/mysql/init.sql 建库建表。
部署前最常改的 5 个配置项
以下配置项都集中在 config-repo/sg-user-service.yml 和 config-repo/sg-exam.env 两个文件里。
1. 配置文件切换:spring.profiles.activesg-user-service.yml里有多段 profile:dev段用 H2 文件库,docker段用 MySQL。改它等于切换数据库,改错会出现「连库失败」或「表不存在」。
2. MySQL / Redis 连接:SG_DB_USER_HOST、SG_REDIS_USER_HOST(env 文件)容器网络内默认值是服务名mysql-service/redis-service。如果换成外部数据库,把这两个值改成对应 IP,同时改SG_DB_USER_PASSWORD(默认123456,对应 compose 里的MYSQL_ROOT_PASSWORD)。不改它、却换了库的位置,启动时数据源连接会被拒绝。
3.MINIO_ACCESS_DOMAIN(env 文件)这是前端访问附件的地址,官方注释明确写了「比较重要」:部署到服务器后要改成「服务器 IP 或域名 + 端口」,且不能以斜杠结尾。不改它,页面上的课程图片、附件下载会 404。
4.ATTACH_DEFAULT_STORAGE_TYPE(env 文件)2= MinIO,1= 七牛云。换成 1 就必须同时填QINIU_*一组配置,否则附件上传失败。
5. 端口:server.port与 docker 端口映射后端默认 8080、路径前缀/sg-user-service;Docker 部署时应用容器同时映射 80(nginx 出前端)和 8080(后端)。宿主机端口被占用时,改 docker-compose.yml 中sg-exam服务的- "80:80"一行即可,例如改成- "8081:80"。
💡 另外,sg-exam.env 里的JAVA_OPTS默认-Xmx512m,生产环境请按机器内存上调。
部署成功长什么样:验证与排错
验证服务是否可用
- 后端:浏览器访问
http://localhost:8080/sg-user-service,能收到接口响应即代表 Java 服务活着; - 前端(Docker 模式):访问
http://localhost(nginx 默认出 Web 学员端); - MinIO 控制台(Docker 模式):
http://localhost:9090,账号admin/admin123456(见 docker-compose.yml),能登录说明存储就绪; - 容器状态:
docker ps四个容器均为Up。
常见问题速答
- 启动报数据库连接失败:90% 是 env 文件里的 host 写成了
127.0.0.1。Docker 网络内必须用mysql-service/redis-service服务名。 - 页面图片、附件加载 404:改
MINIO_ACCESS_DOMAIN为实际访问地址,注意去掉结尾斜杠。 - 80 端口冲突:按上文改 docker-compose 端口映射,并同步调整
MINIO_ACCESS_DOMAIN的端口部分。 - 本地开发想清空数据重来:dev 模式数据在
data/h2/目录,每次启动会重新执行 schema 脚本,具体行为以 sg-user-service.yml 的sql.init段为准。
跑通之后,继续深入这几处
- 启动入口:sg-user-service/src/main/java/com/github/tangyi/UserServiceApplication.java;
- 表结构与业务含义:docs/数据库设计文档.md、config-repo/mysql/init.sql;
- 版本演进记录:CHANGELOG.md。
【免费下载链接】sg-exam基于Spring Boot搭建的新一代教学管理平台,提供权限管理、考试、问卷、练习等功能项目地址: https://gitcode.com/gh_mirrors/sg/sg-exam
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考