Tduck 填鸭,超友好的开源问卷收集系统 — 附部署文档

开源表单系统部署文档

目前支持部署方式

  • 通过jar包快速安装
  • 通过docker文件快速安装

一、本地运行

开发环境本地运行 正式环境请参考部署教程!

  1. 项目运行所需环境:

    • MySQL5.7或以上(opens new window)
    • JDK1.8或以上(opens new window)
    • Maven(opens new window)
    • Nodejs(opens new window)
  2. 创建一个tduck的数据库,并执行项目目录下doc/tduck.sql文件

  3. 启动后端服务

    拉取后端代码

    git clone https://gitee.com/TDuckApp/tduck-platform.git

    打开命令行,输入以下命令

    mvn clean install -DskipTests
    cd tduck-platform/tduck-api
    mvn clean package -DskipTests
    java -Dfile.encoding=UTF-8 -jar tduck-api.jar
    
    
  4. 启动前端项目

    拉取前端代码

    git clone https://gitee.com/TDuckApp/tduck-front.git

  5. 打开命令行,输入以下命令

    npm install -g cnpm --registry=https://registry.npm.taobao.org
    cd tduck-front
    cnpm install
    cnpm run serve
    
    

    此时,浏览器打开,输入网址http://localhost:8888, 进入页面

二、线上部署

#后端部署

mvn clean install -DskipTests

cd tduck-platform/tduck-api

mvn clean package -DskipTests

nohup java -Dfile.encoding=UTF-8 -jar tduck-api.jar &

nohup意为后台不挂断运行,与是否账号退出无关

#前端部署

拉取前端代码 进入tduck-front目录执行命令 试用cnpm或者yarn都可以 推荐使用yarn yarn命令

npm install -g yarn
yarn install 
yarn run build

cnpm 命令

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install 
cnpm run build

构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js***.cssindex.html 等静态文件。

通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是项目的入口页面。

#nginx配置

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  localhost;

       location / {
          # 静态文件地址
            root   /usr/share/nginx/html/tduck;
        try_files $uri $uri/ /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;
        # 改为你后端接口地址   http://xxxx/tduck-api/
        proxy_pass http://localhost:8999/tduck-api/;
    }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

三、后端项目配置

#必要配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: #数据库地址
    username:  #用户名
    password: #密码
  redis:
    database: 1
    host: #地址
    port: #端口
    password:    # 密码(默认为空)

#文件存储配置

不配置文件存储系统中上传文件无法使用

oss:
  ossType: #oss类型 0:阿里云 1:七牛云
  endpoint: 
  accessKeyId: 
  accessKeySecret: 
  bucketName: 
  domain: 

#微信公众号配置

不配置在使用微信公众号相关功能时会抛出异常(登录,微信通知,微信中分享信息定义等),可以申请微信测试公众号

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

wx:
  mp:
    configs:
      - appId: 
        secret: 
        token: 
        aesKey:

输入图片说明

如图所示 把对应参数appId等配置到项目中,然后启动项目,本地可以使用内网穿透 微信接口配置信息 url填入 外网可访问地址/tduck-api/wx/mp/portal/你的appId token可自行定义 需要与项目中token相同

如果提示配置失败请仔细检查项目中参数是否配置正确

#邮箱配置

具体配置去对应邮箱客户端设置中查看 我这里以88完美邮箱为例

经测试 163等邮箱对发送次数上限比较低 目前88邮箱限制还比较低

enter image description here
mail:
  host: smtp.88.com #邮箱服务提供者
  username: tduck 
  password: 12345678

四、文件存储配置

项目目前支持 七牛云oss 阿里云oss 又拍云 本地存储方式存储文件

  1. Oss存储(以七牛云为例)

      oss:
        ossType: 1 # 0:阿里云 1:七牛云 2:又拍云 3:本地存储
        endpoint: # 阿里云需配置
        accessKeyId: # 平台认证参数 需要去对应oss提供平台获取
        accessKeySecret: # 平台认证参数 需要去对应oss提供平台获取
        bucketName: tduck-cloud #oss存储桶名 
        domain: https://qiniu.smileyi.top #oss可供访问的域名
    
    

2.本地存储 使用项目本身对外提供文件访问

  oss:
    ossType: 3 # 3表示使用本地存储
    endpoint:  
    accessKeyId:
    accessKeySecret: 
    bucketName: 
    domain: http://localhost:8999/tduck-api/u/  #对外访问的地址 使用后端项目部署的ip+端口 后面可以固定 
    upload-folder: C:\temp #文件存放的位置
    access-path-pattern: /u/**  # 文件访问路径前缀 这里更改domain也需要更改

五、前端项目配置

tduck-front 项目中 src目录下

  • .env.development 开发环境配置
  • .env.production 正式环境配置
# 页面标题
VUE_APP_TITLE = 填鸭测试环境
# 接口请求地址,会设置到 axios 的 baseURL 参数上
VUE_APP_API_ROOT = /tduck-api
# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
VUE_APP_DEBUG_TOOL =
# 高德地图key
VUE_APP_MAP_KEY = f2200337d0d08538e78729572749882d
# 微信功能开关 开启设置 ON,关闭设置 OFF
VUE_APP_WX = ON

六、接口安全配置

为了保证接口调用的安全性,防止恶意请求接口,项目对接口进行了签名验证,接口请求时对参数进行排序加密计算签名,后端对签名进行校验,如果校验失败,则提示非法请求。

项目配置如下

platform:
  sign:
    enable: true # 是否启用签名校验 关闭之后所有请求无需校验 本地调试方便可以设置false
    secret: 916lWh2WMcbSWiHv # 签名秘钥
    ignore-urls:   # 签名校验忽略的地址
      - /tduck-api/webjars/** 
      - /tduck-api/swagger/**

#实现部分

前端:/src/api/index.js

使用axios在请求前统一计算签名

签名具体算法如下

请求参数统一添加当前时间戳,然后根据key做升序

( 签名秘钥(secret)+ 请求参数json字符串)做MD5然后转小写

拼接的秘钥和参数

916lWh2WMcbSWiHv{"current":"1","name":"","size":"10","timestamp":"1616904031441"}

md5之后

81deff67b73d2669f04e48f45faa20ac

后端请参考SignAuthFilter.java

如果正常情况下出现提示“非法访问,请检查请求信息” 请检查部署环境时间是否正常

七、图形验证码

#图形验证码能使敏感操作更安全,建议开启。

如需关闭请打开tduck-platform/tduck-api/src/main/resources/application.yml


aj:
  captcha:
    enable: true # 关闭验证码

#验证码拦截逻辑

tduck-api/src/main/java/com/tduck/cloud/api/web/filter/ValidateCodeFilter.java

public class ValidateCodeFilter implements Filter {

    //需要进行滑动验证的接口
    private List validateUrls = Lists.newArrayList(
            "/login/account",
            "/retrieve/password/email",
            "/retrieve/password/phone/code");

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        // 如果不是需要拦截的 则不拦截
        if (!StrUtil.containsAnyIgnoreCase(httpServletRequest.getRequestURI(),
                validateUrls.toArray(new String[validateUrls.size()]))) {
            filterChain.doFilter(request, response);
            return;
        }
        // 判断是否携带滑动验证码验证
        String code = request.getParameter("slideCode");
        if (StrUtil.isBlank(code)) {
            ResponseUtils.outJson(response, Result.failed(ResponseCodeConstants.NEED_VERIFICATION, ""));
            return;
        }
        CaptchaService captchaService = SpringContextUtils.getBean(CaptchaService.class);
        CaptchaVO vo = new CaptchaVO();
        vo.setCaptchaVerification(code);
        if (!captchaService.verification(vo).isSuccess()) {
            ResponseUtils.outJson(response, Result.failed(ResponseCodeConstants.FAIL, ResponseCodeConstants.VALIDATE_CODE_FAIL_MSG));
            return;
        }
        filterChain.doFilter(request, response);
    }

}

八、微信功能

#微信配置比较麻烦 如果无需使用 需要关闭可以在如下配置关闭

.env.development # 本地环境配置 .env.production # 正式环境配置

  # 微信功能开关 开启设置 ON,关闭设置 OFF
VUE_APP_WX = ON

官网地址:https://www.tduckcloud.com

文档地址:https://doc.tduckapp.com

开源地址:https://gitee.com/TDuckApp/tduck-platform

你可能感兴趣的:(Tduck 填鸭,超友好的开源问卷收集系统 — 附部署文档)