绿联NAS:搭建卷王问卷,开源可部署的AI一站式问卷考试评估平台

绿联NAS:搭建卷王问卷,开源可部署的AI一站式问卷考试评估平台

一、项目介绍

SurveyKing(中文名“卷王问卷”)是一款AI驱动的企业级开源问卷调查与在线考试系统。它由国人开发者团队打造,定位为 SurveyMonkey 等国际主流问卷平台的开源自托管替代方案,一个系统即可覆盖问卷调查、在线考试、360度评估、心理测评、投票评选等多种业务场景。

支持40+种题型,涵盖填空、选择、下拉、级联、矩阵、分页、签名、题组、图片/音频/视频多媒体题目等。题型配置精细度远超一般问卷平台——以单选填空为例,一个选项可设置多个填空,每个填空独立控制数据类型、数据范围和校验规则,还支持公式联动计算。

image

二、搭建教程

新手请参考:玩转绿联NAS:小白入坑之如何使用Docker compose搭建项目?

1、先在文件管理器docker文件夹中新建文件夹surveyking,然后在docker创建项目surveyking;

image

image

2、创建环境变量;

  • 本地电脑新建一个txt文件,并粘贴内容;
SURVEYKING_PORT=1991
MYSQL_ROOT_PASSWORD=请替换为强密码

image

  • 保存,更改拓展名为:.env

image

  • 上传到刚刚新建的surveyking目录;

image

3、粘贴docker compose;

# ============================================================
# SurveyKing(卷王问卷)Docker Compose 部署配置
# 适用环境:开发测试 / 生产单机部署
# 前置要求:需在同级目录准备 .env 文件定义环境变量
# ============================================================

services:
  # ----------------------------------------------------------
  # 服务1:MySQL 8.0 数据库(存放问卷、考试、用户等核心数据)
  # ----------------------------------------------------------
  mysql:
    image: mysql:8.0                                 # 使用官方 MySQL 8.0 镜像,稳定且性能优秀
    container_name: surveyking-mysql                # 固定容器名,便于容器间通信和日志定位
    restart: unless-stopped                         # 策略:除非手动停止,否则异常退出时自动重启(适合生产环境)

    # 容器启动时的 MySQL 服务参数(覆盖默认配置)
    command:
      - --character-set-server=utf8mb4              # 字符集设为 utf8mb4,完整支持 Unicode(含 Emoji 及生僻汉字)
      - --collation-server=utf8mb4_unicode_ci       # 排序规则设为 utf8mb4_unicode_ci,基于 Unicode 标准排序,多语言更准确

    environment:
      # 以下变量从 .env 文件读取,避免敏感信息硬编码在 compose 文件中
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}   # Root 密码(必填,请务必在 .env 中设置强密码)
      MYSQL_DATABASE: surveyking                    # 容器启动时自动创建的数据库名称(SurveyKing 默认连接此库)
      TZ: Asia/Shanghai                             # 设置数据库内部时区为东八区,确保时间戳与业务一致

    volumes:
      # 挂载自定义 MySQL 配置文件(只读),如需调整 SQL_MODE 或最大连接数,可在此目录添加 .cnf 文件
      - ./mysql/conf:/etc/mysql/conf.d:ro
      # 挂载数据存储目录(持久化),即使容器删除重建,已有数据也不会丢失
      - ./mysql/data:/var/lib/mysql

    # 健康检查(关键配置):确保数据库完全启动且可正常响应 ping 后再被其他服务依赖
    healthcheck:
      # 使用 mysqladmin ping 检测连通性;注意这里使用 $$ 转义环境变量,防止被 Compose 提前解析
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
      interval: 10s                                  # 每 10 秒执行一次健康检查
      timeout: 5s                                    # 单次检查超时时间为 5 秒
      retries: 12                                    # 连续失败 12 次(即 120 秒)后标记为不健康
      start_period: 30s                              # 容器启动后等待 30 秒再开始检查,避免初始化阶段资源竞争导致误判

  # ----------------------------------------------------------
  # 服务2:SurveyKing 主应用(问卷/考试/测评核心服务)
  # ----------------------------------------------------------
  surveyking:
    image: surveyking/surveyking:latest             # 使用官方最新稳定镜像(生产环境建议固定为具体版本号,如 v4.x.x)
    container_name: surveyking-app                  # 固定容器名,便于在日志和网络中定位
    restart: unless-stopped                         # 同 MySQL,保证服务高可用

    environment:
      SERVER_PORT: "1991"                           # 容器内部 Spring Boot 监听的端口(与镜像默认保持一致)
      # JVM 参数:初始堆 256M,最大堆 1G(可根据服务器实际内存调整,建议不超过容器内存限制的 60%)
      # -Dfile.encoding=UTF-8 强制文件编码,避免 Windows/Linux 环境下中文乱码
      JAVA_OPTS: "-Xms256m -Xmx1g -Dfile.encoding=UTF-8"
      TZ: Asia/Shanghai                             # 应用业务时区,影响日志时间、问卷发布时间等

    ports:
      # 宿主机端口映射:默认暴露 1991 端口,可通过 .env 中的 SURVEYKING_PORT 变量自定义宿主机端口
      # 例:若 SURVEYKING_PORT=8080,则宿主机访问 8080 映射到容器 1991
      - "${SURVEYKING_PORT:-1991}:1991"

    volumes:
      # 挂载应用配置目录(存放 application.yml 或自定义 properties),用于覆盖镜像内的默认配置
      - ./config:/app/config
      # 挂载内置 H2 数据库目录(若切换为 MySQL,此目录可存储部分缓存或迁移临时文件,建议保留)
      - ./db:/app/db
      # 挂载文件存储目录(核心目录):存放用户上传的图片、附件、Excel 导入文件、问卷导出 PDF/SPSS 等
      - ./files:/app/files
      # 挂载日志目录:持久化应用运行日志,便于问题排查和监控
      - ./logs:/app/logs

    # 启动顺序依赖:严格等待 MySQL 服务通过健康检查(service_healthy)后再启动
    # 这有效解决了“数据库未就绪导致应用启动连接失败”的问题
    depends_on:
      mysql:
        condition: service_healthy

image

4、点击立即部署,等待跑码;

image

5、点击完成;

image

6、使用http://NAS_IP:1991/setup进行初始化;

http://NAS_IP:1991/setup

7、系统初始化:我们内建mysql,所以直接选择mysql,下面内容自动带出,需要修改mysql的密码,密码是你的.env 中设置的密码;

image

image

image

image

8、下一步;

image

9、点击开始初始化,等待重启完成;

image

image

10、输入默认的账号密码进行登录;

账号:admin
密码:123456

image

11、后台管理界面;

image

image

image

image

12、外网使用记得修改默认密码,并设置好防火墙

image

image

三、参考文档

1、项目官网:https://surveyking.cn/

2、开源文档:https://surveyking.cn/open-source/quickstart/

3、GitHub地址:https://github.com/javahuang/SurveyKing

4、Gitee地址:https://gitee.com/surveyking/surveyking

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享