本篇来介绍一个功能最强大的调查问卷系统和考试系统:卷王。项目开源免费,支持NAS上通过Docker一键部署,
笔者在搭建之后进行体验,的确很强,卷王名不虚传!
无论是题型、问题设置、问题校验、逻辑设置、数据导出等,相比主流商业调查问卷系统,开源卷王都毫不逊色。
开源卷王= 调查问卷系统 + 在线考试系统 + 题库刷题系统 + 投票系统 + 公开查询系统 +成绩单查询系统
此外,卷王还支持如 答案唯一设置、多问卷数据关联、视频题、图片选择题、答题完自定义提示语、答题完自定义跳转链接、考试完根据分数动态显示提示语、公式计算等等,超多功能,等你发现。基于 MIT license,任何人、任何组织、任何行业都可以使用卷王轻松实现 问卷调查、投票、考试、测评、公开查询等场景。
功能概览
支持 20 多种题型,如填空、选择、下拉、级联、矩阵、分页、签名、题组、上传、横向填空等
多种创建问卷方式,Excel 导入问卷、文本导入问卷、在线编辑器编辑问卷
多种问卷设置,支持白名单答卷、公开查询、答卷限制等
数据,支持问卷数据新增、编辑、标记、导出、打印、预览和打包下载附件
报表,支持对问题实时统计分析并以图形(条形图、柱形图、扇形图)、表格的形式展示输出和导出
安装部署简单(最快 1 分钟部署),支持一键 windows 部署、一键 docker 部署、前后端分离部署、单 jar 部署、二级目录部署
响应式布局,所有页面完美适配电脑端和移动端(包含问卷编辑、设置、答卷)
支持多人协作管理问卷
后端支持多种数据库,可支持所有带有 jdbc 驱动的关系型数据库
安全、可靠、稳定、高性能的后端 API 服务
支持完善的 RBAC 权限控制
支持可视化配置问卷跳转和显示逻辑,以及通过公式实现自定义逻辑(卷王的逻辑设置比目前主流商业调查问卷系统强大的多)
部署流程
本文以威联通NAS为例,通过Docker Compose进行部署,其他平台部署基本通用。
首先准备一个文件夹,作为项目的安装目录,我这里命名为surveyking,具体路径为:
/share/Container/surveyking。
打开你所在平台的Docker管理工具,创建新的Docker应用。将以下代码修改后粘贴进框内进行创建。
version: '3.9' # 最新版Docker Compose该行可删除
services:
surveyking:
image: surveyking/surveyking
container_name: surveyking
volumes:
- /share/Container/surveyking/files:/app/files # 文件目录,存储上传的文件,冒号左侧改成自己的,下同
- /share/Container/surveyking/logs:/app/logs # 运行日志
- /share/Container/surveyking/db:/app/db # 数据库文件
ports:
- 5090:1991 # 冒号左侧可改
restart: alwaysDocker 一键部署使用的是内置的 H2 数据库,相比 MySQL 的好处是无需额外配置或安装数据库,部署更为简单和快速。关于 MySQL 数据库运行,我放在文末,大家需要的自取。
此时,web输入NAS_IP:5090便可成功访问并使用。初始界面如下。
用户名:admin,密码:123456
部分展示
可以创建问卷、在线考试项目,并且支持本地多种格式导入。
新建问卷,可以看到如介绍所说,可添加的项相当丰富,目之所及几乎都可以进行编辑。
问卷设置界面,感觉能满足绝大多数人的需求。创建好的问卷还可以通过链接或二维码的形式进行投放。
更让人惊喜的是他的组织管理系统,细致入微。
设置还提供了一个行业字典方便用户使用,当然我们也可以针对需求创建个性化字典。
反向代理
问卷和考试系统大概率需要用到外网访问,NAS上建议使用Lucky进行反向代理。可以参考往期教程。反代神器,懒人利器!Docker网络工具Lucky部署使用流程记录
MySQL(可选,普通用户不建议)
已经部署MySQL
version: '3.9' # 最新版Docker Compose该行可删除
services:
surveyking:
image: surveyking/surveyking
container_name: surveyking
volumes:
- /share/Container/surveyking/files:/app/files # 文件目录,存储上传的文件,冒号左侧改成自己的,下同
- /share/Container/surveyking/logs:/app/logs # 运行日志
ports:
- 5090:1991 # 冒号左侧可改
environment:
- PROFILE=mysql # 使用外部 MySQL 数据库
- MYSQL_USER=surveyking # 数据库用户名
- MYSQL_PASS=surveyking # 数据库密码
- DB_URL=jdbc:mysql://172.x.x.x:xxxx/surveyking?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8
restart: always172.x.x.x:xxxx,冒号左侧部分替换成你数据库所在服务器的IP,冒号右侧部分替换成数据库服务的端口号。
未部署MySQL
version: '3.9' # 最新版Docker Compose该行可删除
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
- MYSQL_ROOT_PASSWORD=root_password # MySQL 根用户密码
- MYSQL_DATABASE=surveyking # 创建数据库
- MYSQL_USER=surveyking # 新建用户
- MYSQL_PASSWORD=surveyking # 新建用户密码
volumes:
- /share/Container/mysql/data:/var/lib/mysql # 持久化存储
ports:
- 3306:3306 # 默认 MySQL 端口
restart: always
surveyking:
image: surveyking/surveyking
container_name: surveyking
volumes:
- /share/Container/surveyking/files:/app/files # 文件目录,存储上传的文件,冒号左侧改成自己的,下同
- /share/Container/surveyking/logs:/app/logs # 运行日志
ports:
- 5090:1991 # 冒号左侧可改
environment:
- PROFILE=mysql # 使用外部 MySQL 数据库
- MYSQL_USER=surveyking # 数据库用户名
- MYSQL_PASS=surveyking # 数据库密码
- DB_URL=jdbc:mysql://172.x.x.x:xxxx/surveyking?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8
depends_on:
- mysql # 确保 MySQL 服务先启动
restart: always 