不止一个人在微信公众号给我发送 tduck ,所以老苏决定再研究下 docker 版
之前老苏已写过基于 CentOS 的安装方法
 
没有找到官方的镜像,不过你可以试试👇
这是一个多合一的镜像,用于体验还是可以的,安装说明可以在参考文档部分找到,但是似乎并不支持设置自己的邮箱、微信公众号等,所以也就没办法用自己的账号登录了。
构建镜像 
如果你不想自己构建,可以跳过,直接阅读下一章节
 
管方提供的 dockerfile 需要用户自己将后端编译的 tduck-api.jar 拷贝到 docker 目录,将前端打包后的 dist 里的文件拷贝到 docker/front 目录,这得把老苏之前写的搭建的环境操作再重做一遍,着实有点麻烦,老苏更希望实现从源代码直接编译打包镜像,总体思路继承了 YesPlayMusic,把前后端打进一个镜像,这样比较方便 nginx 做前后端分流处理
Dockerfile 分为了三个部分,其中 前端构建 和 后端构建 是可以独立使用的,前端构建 可以生成  dist,而 后端构建能生成 tduck-api.jar 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 FROM  node:16.5  as build-frontLABEL  maintainer=laosu<wbsu2003@gmail.com> WORKDIR  /app COPY  /tduck-front/package.json ./ RUN  npm install -g cnpm --registry=https://registry.npm.taobao.org COPY  /tduck-front/. ./ RUN  cnpm install RUN  cnpm run build FROM  maven:3.6 .0 -jdk-11 -slim AS build_endCOPY  . ./ RUN  mvn -f /tduck-platform/pom.xml clean package -DskipTests FROM  openjdk:11 -jre-slimRUN  sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \     && apt-get clean \     && apt-get update \     && apt-get install -y supervisor nginx 	 COPY  --from=build_end ./nginx.conf /etc/nginx/nginx.conf COPY  --from=build_end ./supervisord.conf /etc/supervisord.conf COPY  --from=build-front /app/dist/ /usr/share/nginx/html COPY  --from=build_end /tduck-platform/tduck-api/target/tduck-api.jar /usr/local/lib/tduck-api.jar EXPOSE  80 ENTRYPOINT  ["supervisord" ,"-c" ,"/etc/supervisord.conf" ] 
nginx 设置文件 nginx.conf 用的是官方的,只修改了 proxy_pass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 worker_processes   1 ;events  {    worker_connections   1024 ; } http  {    include        mime.types;     default_type   application/octet-stream;     sendfile         on ;     keepalive_timeout   65 ;     server  {         listen        80 ;         server_name   form.tec-do.com;         root  /usr/share/nginx/html;         location  / {                        root    /usr/share/nginx/html; 	        try_files  $uri $args  $uri $args / /index.html;             index   index.html index.htm;         }         location  /tduck-api/ {             proxy_set_header  Host $http_host ;             proxy_set_header  X-Real-IP $remote_addr ;             proxy_set_header  REMOTE-HOST $remote_addr ;             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for ;             proxy_pass  http://127.0.0.1:8999/tduck-api/;         }                                         } } 
supervisord.conf 文件是新增用来控制进程的,前端 app 是运行在 nginx 上的静态页面,后端 tduck_api 基于 jar 包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [include] files  = /etc/supervisor/conf.d/*.conf[program:app] command =nginx -g "daemon off;" [program:api] command =java -Dfile.encoding=UTF-8  -jar /usr/local/lib/tduck-api.jarautostart =true autorestart =false startretries =3 user =root[supervisord] nodaemon =true logfile =/tmp/supervisord.logpidfile =/tmp/supervisord.pidloglevel =debuglogfile_maxbytes =10 MB[supervisorctl] 
docker-compose.yaml 基于官方的修改而成,因为做了前后端二合一,所以去掉了 tduck-front,但是新增了邮件环境变量,只是默认并没有启用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 version:  '3.6' services:   tduck-app:      environment:               -  SPRING_DATASOURCE_URL=$SPRING_DATASOURCE_URL        -  SPRING_DATASOURCE_USERNAME=$SPRING_DATASOURCE_NAME        -  SPRING_DATASOURCE_PASSWORD=$MYSQL_ROOT_PASSWORD        -  SPRING_REDIS_DATABASE=0        -  SPRING_REDIS_HOST=$REDIS_HOST        -  SPRING_REDIS_PORT=$REDIS_PORT        -  AJ_CAPTCHA_ENABLE=false  	                                                                           image:  "wbsu2003/tduck"      ports:        -  23569 :80      restart:  always    tduck-redis:      image:  redis:6.2.1      ports:        -  36379 :6379      volumes:        -  redis_data:/data    redis-commander:      container_name:  redis-commander      hostname:  redis-commander      image:  rediscommander/redis-commander:latest      restart:  always      environment:        -  REDIS_HOSTS=local:$REDIS_HOST:$REDIS_PORT      ports:        -  "28083:8081"    tduck-mysql:      image:  mysql:8      restart:  always      environment:        -  MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD        -  MYSQL_DATABASE=$MYSQL_DATABASE      ports:        -  43033 :3306      volumes:        -  mysql_data3:/var/lib/mysql        -  ./tduck-platform/docker/init-db:/docker-entrypoint-initdb.d:ro      command:  --default-authentication-plugin=mysql_native_password  volumes:   mysql_data3:    nginx_log:    redis_data:  
.env 文件,用的官方标准的,只配置了 mysql 和 redis
1 2 3 4 5 6 MYSQL_DATABASE =tduckMYSQL_ROOT_PASSWORD =abc123123SPRING_DATASOURCE_URL =jdbc:mysql://tduck-mysql/tduck?serverTimezone=Asia/ShanghaiSPRING_DATASOURCE_NAME =rootREDIS_HOST =tduck-redisREDIS_PORT =6379 
构建镜像和容器运行的基本命令如下👇
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 mkdir  tduckcd  tduckgit clone  https://gitee.com/TDuckApp/tduck-platform.git git clone  https://gitee.com/TDuckApp/tduck-front.git docker build -t wbsu2003/tduck:v1 . docker exec  --user root -it tduck /bin/bash docker-compose up -d docker-compose down 
目录结构👇
安装运行 
在群晖 docker 目录中新建子目录 tduck 
下载 https://github.com/wbsu2003/Dockerfile/raw/main/tduck/tduck.zip  文件,如果 github 抽风了,可以从镜像站点下载 https://hub.fastgit.org/wbsu2003/Dockerfile/raw/main/tduck/tduck.zip  
将 tduck.zip 上传到 tduck 目录再解压
尽量不要在电脑上先解压再上传,因为 .env 默认是看不到的,需要打开显示隐藏文件,需避免拷贝文件丢失导致一键启动出错
 
 
 
__MACOSX 和 tduck.zip 可以删掉,不删也无所谓的
老苏常用的SSH 客户端主要是 Finalshell 和 PuTTY
 
1 2 3 4 5 cd  /volume2/docker/tduckdocker-compose up -d 
第一次执行会有拉取镜像的动作
 
如果最终 4 个容器都是 done ,表示创建成功!
 
在 docker 容器中能看到👇下面 4 个容器正在运行
在浏览器中输入 http://群晖IP:23569,就能看到主界面
点右上角的 登录,因为没设置微信扫码,所以一直是转圈的
系统有个默认的账号 test@tduck.com,密码:12345678
官网有点坑,写的默认账号是 test@tduckapp.com
 
邮件注册 如果你需要自己注册账号,比较简单的方法是增加邮件的支持。
需要去掉 docker-compose.yaml 中红框中 3 行前面的 # 号注释 
 
请按你自己的邮箱设置进行填写
 
1 2 3 MAIL_HOST =smtp.88 .comMAIL_USERNAME =wbsu2003@88 .comMAIL_PASSWORD =<用于登录第三方邮件客户端的专用密码>
任何时候,删除操作还是要慎重
 
1 2 3 4 5 6 7 8 9 10 11 docker-compose down docker-compose up -d docker-compose stop docker-compose restart 
选择用邮箱注册
顺利的话很快就会收到注册验证码
填入验证码
登录成功后的主界面
进入模板中心,创建空白模板
可以拖拽进行设计
如果你拖不动,是因为组件在线的上方
拖到下方才行
预览一下
参考文档 
tduck-platform: Tduck-填鸭收集器是一款开源的表单在线收集系统,后台基于SpringBoot+MybatisPlus+MySql+Redis,前端基于Vue ElementUI开发,功能强大,界面美观。keywords:问卷/表单/信息收集https://gitee.com/TDuckApp/tduck-platform 
Tduck填鸭https://doc.tduckapp.com/ 
java - How to dockerize maven project? and how many ways to accomplish it? - Stack Overflowhttps://stackoverflow.com/questions/27767264/how-to-dockerize-maven-project-and-how-many-ways-to-accomplish-it 
使用Docker运行Tduck | 戴戴的Linuxhttps://daishenghui.club/2021/06/30/categories/Linux/%E4%BD%BF%E7%94%A8Docker%E8%BF%90%E8%A1%8CTduck/#%E5%8D%8A%E5%B0%8F%E7%99%BD%E7%AF%87