本篇分享一款问卷表单系统————Tduck填鸭表单,是国内首批基于Vue开源的问卷/表单收集工具。项目团队旨在让企事业单位能够低成本快速拥有一套独立部署的表单问卷系统,即时赋能业务。
我能想到的功能基本全都有,开源版本对于个人或大多数团队完全够用。
之前也分享过另一个问卷项目:卷王,也提供了Docker开源版本用着还不错(最近一次更新是4个月前),大家感兴趣可以都部署对比一下。
项目特点
系统采用无代码设计理念,使用者可以通过拖拽的方式创建问卷表单,所见即所得;与此同时也支持专业技术人员自行二次开发自定义组件,来满足企不同企业组织的个性化需求。系统采用SpringBoot+Vue+ElementUI技术栈,无需复杂学习即可快速上手,功能强大UI界面清新,通过简要部署就能够助力企业组织快速赋能业务。
支持 27+自定义组件 ,拖拽式快速生成表单问卷。
支持单行文本、多行文本、日期、下拉、单选、文件上传、排序、级联、轮播、一键定位、手机号验证、矩阵量表、子表单等组件。
支持通过文本批量导入表单组件,支持题目显隐逻辑设置。
表单数据,支持数据新增、编辑、导出、打印、预览和打包下载附件。
表单外观支持头图、背景图、背景颜色、按钮文字等配置。
报表支持对问题实时统计分析并以图形(柱状图、折线图、饼图)的形式展示输出和导出png图片。
提交后自定义文案、提交后自动跳转网址。
每个微信、账号、ip、设备、答题次数限制、支持设置允许填写时间、记录微信个人信息 。
支持发邮件、微信公众号模板推送提醒。
支持 数据同步Api(全量数据)、数据WebHook推送(可订阅事件:新增、修改、删除) 。
支持保存至模板中心,支持从模板中心选用模板创建表单问卷。
用户管理,新增用户、修改用户、删除用户。
文件存储自定义配置: 支持阿里云、七牛云、又拍云、本地、通用S3协议上传 。
支持 邮件、短信(阿里云、腾讯云、中昱维信)、微信公众号参数配置 。
支持回收中心,快速恢复问卷。
部署流程
简单粗暴
官方文档给出的部署方式。
如果你过去没有部署MySQL,3306和8999端口也并未被占用,只想开箱即用,那就直接SSH进入你的NAS或者服务器后台,输入指令。
cd /share/Container # 进入你常用的docker路径下
git clone https://github.com/TDuckCloud/tduck-platform.git # 下载项目文件
真正需要的也就这俩文件。
接着输入:
cd tduck-platform/docker
docker compose up -d
喝上一杯茶,静静等着部署成功即可。
不算太轻松的部署
说是不太轻松,但也还行吧,主要很多老哥可能看到数据库配置就头大。
这里我们以威联通 NAS为例进行演示 Docker Compose 部署流程。如果你是部署到VPS,也可以先执行上面的命令,把项目文件下载下来。
品牌NAS用户直接去GHUB把上面的.sql
文件下载下来,放在指定文件夹下。我惯例放在/share/Container/tduck/mysql/init-db
,这一步必须要做。
另外还有两个目录要准备/share/Container/tduck/mysql/data
,/share/Container/tduck/upload
。
打开Container Station 将以下代码按自己实际情况修改后粘贴进框内并创建新的应用程序。
这些代码已经在官方的基础上按照我自己的个人需求进行修改,我也进行了备注,服务器用户可以vim docker-compose.yml
进行调整:
version: '3.6' # 最新版该行可删除
services:
mysql:
image: mysql:8.0.36
container_name: tduck-mysql
networks:
- tduck-network
restart: always
environment:
- MYSQL_ROOT_PASSWORD=tduck@mysql # 可替换为你的新密码
- MYSQL_DATABASE=tduck # 可替换为你的新数据库名
- MYSQL_ROOT_HOST=%
- TZ=Asia/Shanghai
ports:
- "3303:3306" # 冒号左侧端口号可改
volumes:
- /share/Container/tduck/mysql/data:/var/lib/mysql # 冒号左侧替换为宿主机上 MySQL 数据存储的目录
- /share/Container/tduck/mysql/init-db:/docker-entrypoint-initdb.d # 同上
command: --default-authentication-plugin=caching_sha2_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
tduck-platform:
image: "tduckcloud/tduck-platform"
container_name: tduck-platform
networks:
- tduck-network
restart: always
ports:
- "8999:8999" # 冒号左侧端口号可改
volumes:
- /share/Container/tduck/upload:/application/BOOT-INF/lib/upload # 修改卷挂载路径,将冒号左侧替换为宿主机上存放上传文件的目录
environment:
- "JAVA_OPTS=-Duser.language=zh -XX:+UseG1GC"
- "TZ=Asia/Shanghai"
# 数据库连接配置:请确保数据库名和密码与 mysql 服务中的设置一致
- "spring.datasource.url=jdbc:mysql://mysql:3306/tduck?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&tinyInt1isBit=false&allowPublicKeyRetrieval=true"
- "spring.datasource.username=root"
- "spring.datasource.password=tduck@mysql" # 与上面 MYSQL_ROOT_PASSWORD 所设保持一致
links:
- mysql:mysql
depends_on:
mysql:
condition: service_healthy
networks:
tduck-network:
driver: bridge
如果你已经部署了MySQL服务,则建议部署代码如下:
version: '3.6' # 最新版该行可删除
services:
tduck-platform:
image: "tduckcloud/tduck-platform"
container_name: tduck-platform
restart: always
ports:
- "8999:8999" # 冒号左侧端口可修改
volumes:
- "/your/upload/path:/application/BOOT-INF/lib/upload" # 修改:将 /your/upload/path 替换为你希望用于存储上传文件的宿主机目录
environment:
- "JAVA_OPTS=-Duser.language=zh -XX:+UseG1GC"
- "TZ=Asia/Shanghai"
# 修改:数据库连接配置,指向已部署的 MySQL 实例
- "spring.datasource.url=jdbc:mysql://<your-mysql-host>:<your-mysql-port>/<your-database-name>?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&tinyInt1isBit=false&allowPublicKeyRetrieval=true"
# 修改:指定你的 MySQL 用户名
- "spring.datasource.username=<your-mysql-username>"
# 修改:指定你的 MySQL 密码
- "spring.datasource.password=<your-mysql-password>"
请将 your-mysql-host
、your-mysql-port
、your-database-name
替换为你实际 MySQL 的主机地址、端口和数据库名称。
将your-mysql-username
和your-mysql-password
替换为你 MySQL 实例的相应凭证。
使用
访问地址: NAS_IP:8999
默认用户名:admin@tduckcloud.com
,密码:123456
用起来没啥难度,大家自行体验。邮件配置、短信配置、接入公众号这些相关教程也都非常多了。
部署可能出现的问题
如果你确定以及肯定,上面的配置没问题,但是NAS_IP:8999访问无响应,建议多等一会儿,MySQL 的初始化可能没那么快。查看日志,MySQL 初始化完成后仍跑不起来,这时候重启整个服务即可。
tduck-mysql | 2025-02-25T07:45:51.317748Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
tduck-mysql | 2025-02-25T07:45:51.318056Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.36' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
碰到部署失败,建议检查这几项:
.sql
初始化脚本文件是否放入指定文件夹下,若没有请放置完毕后,删除data
下的所有内容,重新部署。数据库名、用户名、密码是否一致,端口号是否被占用,持久化挂载目录是否正确且是否有正确的读写权限
检查服务名与连接 URL,MySQL 服务在
docker-compose.yml
中的服务名是mysql
,tduck-platform 里使用的连接地址则是jdbc:mysql://mysql:3306/tduck...
。
评论区