tduck:Docker 部署问卷表单系统
本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 11 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。
它是什么
国产开源表单/问卷系统(填表鸭),Java + MySQL。
前置条件
- 一台 Linux 服务器(1C1G 起步;Java 类应用建议 2C4G 以上);
- 已安装 Docker 与 Compose v2,执行
docker compose version有版本号输出; - 所有示例里的 IP / 域名 / 密码都是占位符,实际部署请替换成自己的。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh
# 目录约定:一个服务一个目录,后文的 ./data 均指栈目录内
mkdir -p /srv/docker/active/<stack> && cd /srv/docker/active/<stack>
镜像地址
tduckcloud/tduck-platform:latest
mysql:8.0
目录结构
/srv/docker/active/tduck/
├── docker-compose.yaml
├── .env
├── upload/ # 用户上传附件
└── mysql-data/
部署步骤
# docker-compose.yaml
services:
tduck-platform:
image: "tduckcloud/tduck-platform:latest"
container_name: tduck-platform
restart: always
ports:
- "8999:8999"
depends_on:
mysql:
condition: service_healthy
volumes:
- upload-volume:/application/BOOT-INF/lib/upload
- ./upload:/application/file
environment:
- JAVA_OPTS=-Duser.language=zh -XX:+UseG1GC
- TZ=Asia/Shanghai
- spring.datasource.url=jdbc:mysql://mysql:3306/tduck?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true
- spring.datasource.username=tduck
- spring.datasource.password=${TDUCK_DB_PASSWORD}
mysql:
image: mysql:8.0
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=tduck
- MYSQL_USER=tduck
- MYSQL_PASSWORD=${TDUCK_DB_PASSWORD}
- TZ=Asia/Shanghai
volumes:
- ./mysql-data:/var/lib/mysql
- ./init-db:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 10
volumes:
upload-volume:
docker compose up -d
# 访问 http://<SERVER_IP>:8999
关键配置
- 首次启动需要导入初始化 SQL(放
init-db/),否则报缺表; - 上传目录是
/application/file,卷要持久化; - 数据库连接串里的
mysql是服务名,不要写宿主 IP; - 上传文件大小限制在应用配置里改,不在 Nginx 一处改完就行。
注意事项
- MySQL 初始化脚本只在数据目录为空时执行,重装要先清
mysql-data; - 附件多了会撑爆磁盘,定期清理;
- 公网部署前改默认管理员密码。
备份与升级
# 1) 数据库
docker exec tduck-mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --single-transaction tduck' | gzip > "tduck-db-$(date +%F).sql.gz"
# 2) 上传附件
tar czf "tduck-upload-$(date +%F).tar.gz" ./upload
# 3) 升级
docker compose pull
docker compose up -d
- 数据库和附件必须成对备份,只恢复数据库会丢附件;
- 升级前确认新版是否需要数据库迁移脚本。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果