绿联NAS:搭建TDuck填鸭,一个企业级开源表单系统与问卷考试工具
一、项目介绍
TDuck填鸭表单:企业级开源表单系统与问卷考试工具:
支持问卷调查、在线表单、考试测评、投票评选、流程审批等业务场景。
支持私有化部署和源码交付,帮助组织快速构建数字化数据采集应用。
image二、运行环境要求 (Prerequisites)
操作系统:CentOS / Ubuntu / Debian / macOS / Windows
Java 环境:JDK 1.8 (核心依赖,不支持 JDK 11/17+)
数据库:MySQL 5.7 或以上 (需要支持 JSON 字段类型)
缓存服务:无额外中间件依赖 (社区版使用 Ehcache 本地缓存,自动管理登录 Token 和验证码,不需要安装 Redis)
三、绿联docker compose教程
请参考:玩转绿联NAS:小白入坑之如何使用Docker compose搭建项目?-蓝小白的知识笔记
四、搭建步骤
1、下载源码:TduckX 3.6 更新 · TDUCK/tduck-platform – Gitee.com;
2、下载的源码中找到tduck-v5.sql,并重命名为tduck.sql,路径:tduck-platform-Tduckxdockerinit-db;
3、打开绿联docker,创建项目,粘贴docker compose文件;
services:
# ---------- MySQL 数据库服务 ----------
mysql:
# 使用 MySQL 官方 8.0 版本镜像(稳定且支持常用认证)
image: mysql:8
# 固定容器名称,方便内部网络通信
container_name: tduck-mysql
# 容器异常退出后自动重启(除非手动停止)
restart: always
# 环境变量:用于初始化数据库
environment:
# root 用户密码(请根据实际情况修改,但需与下方一致)
- MYSQL_ROOT_PASSWORD=tduck@mysql
# 容器启动时自动创建的数据库名
- MYSQL_DATABASE=tduck
# 允许 root 从任意主机连接(% 代表任意 IP)
- MYSQL_ROOT_HOST=%
# 设置容器时区为上海
- TZ=Asia/Shanghai
# 端口映射:宿主机端口:容器端口(左侧可修改,避免冲突)
ports:
- "3306:3306"
# 数据卷挂载(使用相对路径,位于 docker-compose.yml 同级)
volumes:
# MySQL 数据文件持久化到 ./mysql/data
- ./mysql/data:/var/lib/mysql
# 初始化 SQL 脚本目录:首次启动时自动执行 .sql 文件
# 注意:如果 ./mysql/data 已存在,则不会再次执行
- ./init-db:/docker-entrypoint-initdb.d
# 以 root 用户运行容器内进程(解决宿主机文件权限不足问题)
# 如果宿主机文件权限正确(如 chmod 644),可移除此行
user: root
# 注释:MySQL 8.4 已废弃 default-authentication-plugin 参数,
# 故不再添加 command,使用默认配置即可。
# ---------- Tduck 调查问卷平台主服务 ----------
tduck-platform:
# 使用 Tduck 官方后端镜像
image: "tduckcloud/tduck-platform"
# 固定容器名称
container_name: tduck-platform
# 自动重启
restart: always
# 端口映射:宿主机 8999 → 容器内 8999(后端 API 端口)
ports:
- "8999:8999"
# 挂载卷:持久化用户上传的文件
volumes:
- ./upload:/application/BOOT-INF/lib/upload
# 环境变量:覆盖 Spring Boot 配置
environment:
# JVM 参数:语言=中文,启用 G1 垃圾回收器
- "JAVA_OPTS=-Duser.language=zh -XX:+UseG1GC"
# 容器时区
- "TZ=Asia/Shanghai"
# 数据库连接 URL(使用服务名 mysql 作为主机名,Docker DNS 自动解析)
# 添加 allowPublicKeyRetrieval=true 解决 MySQL 8 认证问题
- "spring.datasource.url=jdbc:mysql://mysql:3306/tduck?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&tinyInt1isBit=false&allowPublicKeyRetrieval=true"
# 数据库用户名
- "spring.datasource.username=root"
# 数据库密码(必须与上方 MySQL 设置一致)
- "spring.datasource.password=tduck@mysql"
# 启动依赖:确保 MySQL 先启动
depends_on:
- mysql
# 卷声明(本文件使用相对路径绑定挂载,无需在顶层 volumes 中预先声明)
# 但如果您想使用 Docker 命名卷,可以在此添加,但相对路径更便于迁移。
image4、点击立即部署,等待部署完成;
image5、部署成功后,把tduck.sql上传到init-db这个文件夹中;
image6、回到docker,进入 MySQL 容器的终端
打开绿联 NAS 桌面上的 Docker 应用。
在左侧菜单点击 容器,在列表中找到 tduck-mysql。
点击容器名称进入详情页,然后点击上方的 终端 标签页。
image点击 连接(或“启动终端”),此时你会进入容器内部的命令行界面。
image
image将 ./init-db 目录挂载到了容器内的 /docker-entrypoint-initdb.d,所以你上传的 tduck.sql 文件就在容器内的这个路径下。
你可以在终端中输入以下命令确认文件是否存在:
ls -la /docker-entrypoint-initdb.d/
image
image
在容器终端中,直接执行以下命令,将 SQL 文件导入到 tduck 数据库中(密码是 tduck@mysql):
mysql -u root -ptduck@mysql tduck < /docker-entrypoint-initdb.d/tduck.sql
image
执行后,终端会显示 SQL 执行的过程(一堆 CREATE TABLE 和 INSERT 的日志),如果没有报错,说明导入成功了。
验证表是否创建成功,继续在终端中输入:
mysql -u root -ptduck@mysql -e "USE tduck; SHOW TABLES;"
image
7、重启整个项目;
image8、等待重启完成后,在浏览器访问 http://你的NAS_IP:8999,用默认账号 admin@tduckcloud.com / 密码 123456 登录即可;
image
image
image9、此时就完成了,各位可以愉快的玩耍了。
五、参考文档
1、官网:https://www.tduckcloud.com;
2、文档:https://doc.tduckcloud.com/openSource/deploy/dockerDeploy.html
3、项目:https://gitee.com/TDuckApp/tduck-platform
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
