ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SurveyKing开源问卷考试系统部署:Docker与Jar包实战指南

SurveyKing开源问卷考试系统部署:Docker与Jar包实战指南 SurveyKing 是一个开源问卷考试系统在中文社区里通常也被叫做“卷王”。它把问卷收集、在线考试、题库刷题和 AI 智能试卷统一到同一套系统里适合做培训考核、课堂测验、市场调研、满意度收集这类需要私有化部署的场景。这篇文章从空机状态开始先讲清它运行依赖哪些组件然后分别给出 Docker Compose 和 Jar 包两种安装方式再带着你走通问卷、考试、刷题和 AI 出题四条主流程最后整理高频问题排查路径和生产环境建议。文章不假设你已经配好任何环境所有命令都从零开始。1. 先理解 SurveyKing 是什么以及它适合哪类场景1.1 它解决的核心问题SurveyKing 解决的是两件事收集结构化数据以及验证掌握程度。团队做培训效果评估需要一份问卷收集学员反馈做新人转正考核需要一套在线考试流程日常学习还需要一个能反复练习的题库。过去这些场景往往要分别采购或开发表单工具、考试工具和刷题工具数据分散管理成本高。SurveyKing 把问卷、考试、刷题三种形态放在同一个系统里底层共享题目管理、参与链接和数据统计能力减少同时维护多个工具的负担。它和普通表单工具最大的区别是“考试能力”。普通问卷只能收集答案SurveyKing 可以设置考试时长、自动判分、成绩导出并且把题目沉淀成题库反复使用。这是它比较适合教育、培训和组织内部考核的原因。1.2 功能模块拆解功能模块能做什么典型使用场景问卷收集创建调查问卷支持单选、多选、填空、矩阵等题型生成链接或二维码满意度调研、需求收集、活动报名在线考试组卷、限时、自动判分、成绩导出员工考核、在线测验、认证考试题库刷题维护题目仓库支持分类、标签、练习模式备考刷题、培训复习AI 智能试卷输入主题和要求按设定生成题目或试卷草稿快速组卷、降低出题成本AI 智能试卷是近几个版本比较受关注的功能。它的价值在于降低出题成本过去一份 30 题试卷需要人工编写很久现在输入主题、题量和难度AI 先生成草稿再由出题人审校。但要清醒认识一点AI 生成的内容不等于答案正确正式考试前必须人工校对题干、选项和答案。1.3 运行链路与部署形态从部署角度看SurveyKing 是一个典型的 Web 应用。浏览器访问管理端和答卷端后端进程处理题目、答卷、成绩等业务逻辑MySQL 保存业务数据Redis 承担会话、缓存以及考试过程中的临时状态。Docker 部署时这些组件以容器形式运行Jar 包手动部署时就是多个进程。排错时这条链路非常关键浏览器 - 后端端口 - 数据库 - Redis。界面打不开先查后端进程和端口能登录但保存不了数据先查 MySQL考试过程中状态异常先查 Redis 是否存活。什么时候不建议直接用这个系统如果业务流程重度定制比如多级审批、复杂计分规则、与企业现有账号中心深度集成通用问卷考试系统只能作为起点二次开发成本要提前评估。它能解决通用问题但不能指望开箱即用满足所有业务规则。2. 部署前先把方案、依赖和版本确认清楚2.1 部署方式怎么选部署方式适合场景优点注意事项Docker Compose学习验证、测试环境、中小型内部系统环境一致、升级方便、依赖组件一起管理需要 Docker 基础数据卷要长期保存Jar 包手动部署已有 Java 运维体系、需要精细控制便于结合 systemd、监控、安全加固需要自己准备 JDK、MySQL、Redis源码编译二次开发场景可以修改源码需要完整的前端构建工具链周期最长学习环境推荐 Docker Compose几分钟就能把 MySQL、Redis 和后端一起拉起来。生产环境如果团队已有成熟的进程管理和监控体系Jar 包方式更容易融入现有规范。2.2 依赖组件清单不管用哪种方式几个核心依赖绕不开。组件作用说明JDK运行后端版本要求以项目 release 说明为准不要凭经验直接选MySQL持久化业务数据建议 5.7 或 8.0建库必须用 utf8mb4Redis会话、缓存、考试临时状态建议 6 或 7生产环境必须设密码Nginx可选反向代理用于 HTTPS 终结和域名转发容易踩的坑是 JDK 版本。很多服务器默认装了 OpenJDK 8如果项目要求 JDK 17启动时会直接报UnsupportedClassVersionError。这时候不要怀疑安装包有问题先确认当前 JDK 版本。2.3 从哪获取安装资源源码和发行包一般在 Gitee 或 GitHub 的官方仓库。Docker 镜像地址、发行包下载链接和版本号都应以仓库 README 或 release 页面为准。不要使用第三方转载的安装包防止被植入后门。不同版本之间的配置项可能不同文章里的示例只能作为理解框架。落地时一定要对照自己下载的版本确认环境变量名、端口号和配置项是否一致这是整个部署过程最容易出错的地方。3. Docker Compose 部署从空机到登录页3.1 准备目录结构先在服务器上创建项目目录把所有数据卷集中管理方便备份和清理。mkdir -p /opt/surveyking/{mysql-data,redis-data,surveyking-data} cd /opt/surveyking三个目录分别保存 MySQL 数据文件、Redis 持久化数据、SurveyKing 运行产生的业务数据。把它们放在宿主机上是为了容器重建后数据不丢失这是容器部署最基本的一条原则。3.2 编写 docker-compose.ymlversion: 3.8 services: mysql: image: mysql:8.0 container_name: surveyking-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: {你的数据库root密码} MYSQL_DATABASE: surveyking MYSQL_USER: surveyking MYSQL_PASSWORD: {你的业务账号密码} command: - --character-set-serverutf8mb4 - --collation-serverutf8mb4_unicode_ci volumes: - ./mysql-data:/var/lib/mysql ports: - 3306:3306 redis: image: redis:7 container_name: surveyking-redis restart: unless-stopped command: redis-server --requirepass {你的Redis密码} volumes: - ./redis-data:/data ports: - 6379:6379 surveyking: image: {官方发布的SurveyKing镜像地址} container_name: surveyking-server restart: unless-stopped depends_on: - mysql - redis environment: SERVER_PORT: 8080 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/surveyking?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai SPRING_DATASOURCE_USERNAME: surveyking SPRING_DATASOURCE_PASSWORD: {你的业务账号密码} SPRING_REDIS_HOST: redis SPRING_REDIS_PORT: 6379 SPRING_REDIS_PASSWORD: {你的Redis密码} ports: - 8080:8080 volumes: - ./surveyking-data:/app/data这里的image占位必须替换成官方仓库发布的镜像地址不能照抄。depends_on只控制容器启动顺序不保证 MySQL 已经就绪严格场景下还需要加healthcheck。环境变量在不同版本的官方镜像里命名可能不同最稳妥的方式是打开官方 docker-compose.yml 作为基准再对照调整。注意拿示例直接启动后连不上数据库是容器部署最高频的问题。问题往往不在数据库本身而是环境变量名和官方版本不一致导致后端仍然用了默认配置。3.3 启动、看日志、验证docker compose up -d docker compose ps docker compose logs -f surveyking第一次启动需要初始化数据库表结构耗时可能比较长。看到Started或Tomcat started on port之类的日志再访问http://服务器IP:8080。curl -I http://127.0.0.1:8080不要看到容器变成Up就认为服务可用容器进程活着但 Spring 启动失败的情况很常见。如果本机能打开但外部访问不了优先检查云服务器安全组和宿主机防火墙是否放行 8080 端口。4. Jar 包手动部署适合生产环境的另一种选择4.1 准备 JDK 和数据库先确认 JDK 版本满足要求。java -version然后创建数据库。字符集必须选 utf8mb4否则中文和特殊字符容易出现乱码甚至报Incorrect string value错误。CREATE DATABASE IF NOT EXISTS surveyking DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;创建业务账号不要在后端配置里直接用 root。给业务账号最小必要权限即使配置泄露也能减小影响面。CREATE USER surveyking% IDENTIFIED BY {你的业务账号密码}; GRANT ALL PRIVILEGES ON surveyking.* TO surveyking%; FLUSH PRIVILEGES;4.2 使用外置配置文件Spring Boot 项目的配置加载顺序里命令行参数优先级最高然后是外部配置文件最后是 jar 内的默认配置。生产环境推荐把application.yml放在 jar 同级目录或config子目录避免每次改配置都要重新打 jar。server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/surveyking?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: surveyking password: {你的业务账号密码} redis: host: 127.0.0.1 port: 6379 password: {你的Redis密码} database: 0数据库连接串里的serverTimezoneAsia/Shanghai建议保留否则容易出现时间偏差 8 小时的问题。MySQL 驱动类名在不同版本差异不大但如果启动时报驱动类找不到说明 MySQL Connector 版本和数据库版本不匹配需要按官方说明调整。4.3 启动与进程管理前台启动适合第一次验证java -jar /opt/surveyking/surveyking.jar --spring.config.locationfile:/opt/surveyking/application.yml确认正常后再改成后台启动。nohup是最朴素的方式只适合临时场景nohup java -jar /opt/surveyking/surveyking.jar --spring.config.locationfile:/opt/surveyking/application.yml /opt/surveyking/surveyking.log 21 生产环境建议用 systemd 管理进程。这样服务崩溃会自动拉起也能用journalctl统一看日志。[Unit] DescriptionSurveyKing Afternetwork.target mysqld.service redis.service [Service] Usersurveyking WorkingDirectory/opt/surveyking ExecStart/usr/bin/java -jar /opt/surveyking/surveyking.jar --spring.config.locationfile:/opt/surveyking/application.yml Restarton-failure RestartSec10 [Install] WantedBymulti-user.target启用 systemd 服务systemctl daemon-reload systemctl enable surveyking systemctl start surveyking systemctl status surveyking5. 第一次登录后把四条核心业务链路都走通5.1 初始化管理员账号第一次启动后系统通常会引导创建管理员或者在登录页显示默认账号。这一步不要靠猜看两个地方启动日志和官方 README。登录后的第一件事是修改默认密码。如果版本存在默认账号且没有修改任何知道默认口令的人都能进入管理后台这是刚部署完最容易忽略的安全问题。5.2 问卷收集如何走通问卷流程可以按这个顺序操作新建问卷填写标题和说明。添加题目按需选择单选、多选、填空、矩阵等题型。设置问卷属性是否匿名、是否限制提交次数、是否有回收截止时间。发布问卷系统生成链接和二维码。用浏览器无痕窗口或手机访问链接以普通用户身份提交一份测试数据。回到管理端查看回收数量、题目统计并尝试导出原始数据。最容易漏掉的一步是用非管理员身份实际提交一次。很多问卷系统在预览模式下不写库只有正式链接提交的数据才会进入统计。如果测试完发现统计面板是空的先检查填的是不是发布后的正式链接。5.3 在线考试如何走通考试流程比问卷多出组卷、判分和成绩管理几个环节维护题库或直接录入题目。创建考试设置考试时间、考试时长、是否限时、成绩公布策略。组卷可以选择手动选题、随机抽题或按题型数量抽取。发布考试把链接或二维码发给考生。考生答题客观题自动判分主观题进入人工批阅。查看成绩报表并导出。考试场景要特别注意浏览器兼容性和异常恢复。如果是组织正式考试先让 5 到 10 个人做一次并发测试确认答卷提交不会丢失。考试中途断网、刷新页面、误关浏览器这些情况建议在测试环境分别模拟一遍。5.4 题库刷题怎么配置刷题和考试的区别在于目的考试要判分刷题要反馈。SurveyKing 的题库可以给题目设置分类和标签练习模式里学员可以按标签刷题做完后查看答案和解析。配置时不要把题目一次性全部塞进一个分类。按知识点、章节或难度拆分刷题体验会好很多。如果题目数量大批量导入比逐条录入更高效导入前先做一个模板文件避免字段格式不对造成大量失败。5.5 AI 智能试卷的正确使用方式AI 智能试卷的大致流程是输入试卷主题、题型、题量、难度等要求系统调用 AI 生成题目或整卷草稿之后由人工校验修改。这里要强调一条使用底线不要直接把 AI 生成的内容发布成正式考试。出题是知识型任务模型可能产出错误表述、重复题干或不符合教学大纲的题目。建议用法是让 AI 生成初稿人来做学科审核和格式校验。生成结果保存后也要复查题干中的数字、单位和选项是否自洽。6. 关键参数速查端口、数据库、Redis、文件和 AI 服务6.1 常用参数一览参数默认值参考作用注意事项server.port8080HTTP 监听端口修改后访问地址同步变化spring.datasource.url本地 MySQL数据库连接地址需要包含编码和时区参数spring.datasource.username业务账号数据库账号不要使用 rootspring.datasource.password业务密码数据库密码生产环境用环境变量注入spring.redis.host127.0.0.1Redis 地址Docker 部署时填服务名spring.redis.port6379Redis 端口不要暴露到公网spring.redis.password空Redis 密码生产环境必须设置multipart 文件大小限制视版本而定控制上传图片和附件大小超出后上传报错需要调整AI 服务相关配置按版本提供出题功能的服务地址和密钥Key 要放在安全位置这些参数在官方文档中都有说明。下面这张表的价值是帮你建立“查参数的位置意识”连接不上数据库就去查 datasource 三项登录状态丢失就去查 redis 配置上传失败就去查 multipart 限制。6.2 修改配置后如何确认生效修改配置后必须重启服务。Spring Boot 加载外部配置的优先级大致是命令行参数高于外部配置文件外部配置文件高于 jar 内默认配置。如果改完不生效先确认你改的文件是不是真正被加载的文件。可以这样检查ps -ef | grep java docker compose exec surveyking env | grep SPRING“明明改了配置但没变化”通常有两种原因改错了文件或者服务没有重启成功。确认时先看进程启动时间再看日志开头加载的配置路径。7. 常见问题排查从现象倒推根因7.1 排错顺序部署和日常使用中遇到问题不要急着重装或改动代码按这个顺序排查看后端日志先确认有没有异常堆栈。验证 MySQL、Redis 是否可达账号密码是否正确。验证端口和防火墙。验证当前生效的配置是不是你修改的那份。大部分启动失败问题在前两步就能定位。日志里出现Communications link failure是数据库连不上出现Unable to connect to Redis是 Redis 连不上出现Access denied是账号权限不对。现象和日志关键字一一对应比盲目重
返回列表