From a014a3ed0e81900e879bcce7bae7afcf68e15227 Mon Sep 17 00:00:00 2001 From: JEECG <445654970@qq.com> Date: Wed, 30 Jul 2025 21:55:16 +0800 Subject: [PATCH] =?UTF-8?q?v3.8.2=20=E4=BC=98=E5=8C=96=E4=B8=80=E9=94=AEdo?= =?UTF-8?q?cker=E5=90=AF=E5=8A=A8=E5=89=8D=E5=90=8E=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose-cloud.yml | 7 +- docker-compose.yml | 6 +- .../src/main/resources/application-docker.yml | 329 ++++++++++++++++++ jeecg-boot/pom.xml | 18 + jeecgboot-vue3/.env.docker | 34 ++ jeecgboot-vue3/.env.dockercloud | 34 ++ jeecgboot-vue3/Dockerfile.cloud | 30 ++ jeecgboot-vue3/package.json | 2 + 8 files changed, 454 insertions(+), 6 deletions(-) create mode 100644 jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-docker.yml create mode 100644 jeecgboot-vue3/.env.docker create mode 100644 jeecgboot-vue3/.env.dockercloud create mode 100644 jeecgboot-vue3/Dockerfile.cloud diff --git a/docker-compose-cloud.yml b/docker-compose-cloud.yml index 7932ecab7..ff5309e33 100644 --- a/docker-compose-cloud.yml +++ b/docker-compose-cloud.yml @@ -18,14 +18,14 @@ services: --max_allowed_packet=128M --default-authentication-plugin=caching_sha2_password ports: - - 3306:3306 + - 13306:3306 networks: - jeecg-boot jeecg-boot-redis: image: registry.cn-hangzhou.aliyuncs.com/jeecgdocker/redis:5.0 - ports: - - 6379:6379 +# ports: +# - 6379:6379 restart: always hostname: jeecg-boot-redis container_name: jeecg-boot-redis @@ -121,6 +121,7 @@ services: jeecg-vue: build: context: ./jeecgboot-vue3 + dockerfile: Dockerfile.cloud container_name: jeecgboot-vue3-nginx image: jeecgboot-vue3 depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index 994ed1310..d981d790f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,14 +18,14 @@ services: --max_allowed_packet=128M --default-authentication-plugin=caching_sha2_password ports: - - 3306:3306 + - 13306:3306 networks: - jeecg-boot jeecg-boot-redis: image: registry.cn-hangzhou.aliyuncs.com/jeecgdocker/redis:5.0 - ports: - - 6379:6379 + # ports: + # - 3792:6379 restart: always hostname: jeecg-boot-redis container_name: jeecg-boot-redis diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-docker.yml b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-docker.yml new file mode 100644 index 000000000..a60e3cec7 --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-docker.yml @@ -0,0 +1,329 @@ +server: + port: 8080 + undertow: + decode-url: true # 启用URL解码 + # max-http-post-size: 10MB # 平替 tomcat server.tomcat.max-swallow-siz, undertow该值默认为-1 + worker-threads: 16 # 4核CPU标准配置 + buffers: + websocket: 8192 # WebSocket缓冲 以字节为单位,这里设置为8 KB + io: 16384 # IO操作缓冲 以字节为单位,这里设置为16 KB + error: + include-exception: true + include-stacktrace: ALWAYS + include-message: ALWAYS + servlet: + context-path: /jeecg-boot + compression: + enabled: true + min-response-size: 1024 + mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/* + +management: + endpoints: + web: + exposure: + include: metrics,jeecghttptrace + +spring: + flyway: + # 是否启用flyway + enabled: true + # 是否关闭要清除已有库下的表功能,生产环境必须为true,否则会删库,非常重要!!! + clean-disabled: true + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + mail: + # 定时任务发送邮件 + timeJobSend: false + host: smtp.163.com + username: jeecgos@163.com + password: ?? + properties: + mail.smtp.timeout: 10000 # 连接超时(毫秒) + mail.smtp.connectiontimeout: 10000 # 连接超时(毫秒) + mail.smtp.writetimeout: 10000 # 写入超时(毫秒) + mail.smtp.auth: true + smtp.ssl.enable: true + mail.debug: true # 启用调试模式(查看详细日志) + ## quartz定时任务,采用数据库方式 + quartz: + job-store-type: jdbc + jdbc: + initialize-schema: embedded + #定时任务启动开关,true-开 false-关 + auto-startup: true + #延迟1秒启动定时任务 + startup-delay: 1s + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: MyScheduler + instanceId: AUTO + jobStore: + class: org.springframework.scheduling.quartz.LocalDataSourceJobStore + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + tablePrefix: QRTZ_ + isClustered: true + misfireThreshold: 12000 + clusterCheckinInterval: 15000 + threadPool: + class: org.quartz.simpl.SimpleThreadPool + threadCount: 10 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true + #json 时间戳统一转换 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + jpa: + open-in-view: false + aop: + proxy-target-class: true + #配置freemarker + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + prefer-file-system-access: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + template_update_delay: 0 + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /** + #Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcher + pathmatch: + matching-strategy: ant_path_matcher + resource: + static-locations: classpath:/static/,classpath:/public/ + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + - org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration + datasource: + druid: + stat-view-servlet: + enabled: true + loginUsername: admin + loginPassword: 123456 + allow: + web-stat-filter: + enabled: true + dynamic: + druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置) + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 1000 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,wall,slf4j + # 允许SELECT语句的WHERE子句是一个永真条件 + wall: + selectWhereAlwayTrueCheck: false + # 打开mergeSql功能;慢SQL记录 + stat: + merge-sql: false + slow-sql-millis: 5000 + datasource: + master: + url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + # 多数据源配置 + #multi-datasource1: + #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + #username: root + #password: root + #driver-class-name: com.mysql.cj.jdbc.Driver + #redis 配置 + redis: + database: 0 + host: jeecg-boot-redis + port: 6379 + password: '' +#mybatis plus 设置 +mybatis-plus: + mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml + global-config: + # 关闭MP3.0自带的banner + banner: false + db-config: + #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; + id-type: ASSIGN_ID + # 默认数据库表下划线命名 + table-underline: true + configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # 返回类型为Map,显示null对应的字段 + call-setters-on-nulls: true +#jeecg专用配置 +minidao: + base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.* +jeecg: + # AI集成 + ai-chat: + enabled: true + model: deepseek-chat + apiKey: ?? + apiHost: https://api.deepseek.com/v1 + timeout: 60 + # AIRag向量库 + ai-rag: + embed-store: + host: 127.0.0.1 + port: 5432 + database: postgres + user: postgres + password: postgres + table: embeddings + # 平台上线安全配置 + firewall: + # 数据源安全 (开启后,Online报表和图表的数据源为必填) + dataSourceSafe: false + # 低代码模式(dev:开发模式,prod:发布模式——关闭所有在线开发配置能力) + lowCodeMode: dev + # 签名密钥串(前后端要一致,正式发布请自行修改) + signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a + #签名拦截接口 + signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys,/sys/sendChangePwdSms,/sys/user/sendChangePhoneSms,/sys/sms,/desform/api/sendVerifyCode + # 本地:local、Minio:minio、阿里云:alioss + uploadType: local + # 前端访问地址 + domainUrl: + pc: http://localhost:3100 + app: http://localhost:8051 + path: + #文件上传根目录 设置 + upload: /opt/upFiles + #webapp文件路径 + webapp: /opt/webapp + shiro: + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/** + #阿里云oss存储和大鱼短信秘钥配置 + oss: + accessKey: ?? + secretKey: ?? + endpoint: oss-cn-beijing.aliyuncs.com + bucketName: jeecgdev + # 短信模板 + sms-template: + # 签名 + signature: + # 模板code + templateCode: + # 登录短信、忘记密码模板编码 + SMS_175435174: + # 修改密码短信模板编码 + SMS_465391221: + # 注册账号短信模板编码 + SMS_175430166: + # 在线预览文件服务器地址配置 + file-view-domain: http://fileview.jeecg.com + # minio文件上传 + minio: + minio_url: http://minio.jeecg.com + minio_name: ?? + minio_pass: ?? + bucketName: otatest + #大屏报表参数设置 + jmreport: + #多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增) + saasMode: + # 平台上线安全配置(v1.6.2+ 新增) + firewall: + # 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并且不允许查询数据库) + dataSourceSafe: false + # 低代码开发模式(dev:开发模式,prod:发布模式—关闭在线报表设计功能,分配角色admin、lowdeveloper可以放开限制) + lowCodeMode: dev + #xxl-job配置 + xxljob: + enabled: false + adminAddresses: http://127.0.0.1:9080/xxl-job-admin + appname: ${spring.application.name} + accessToken: '' + address: 127.0.0.1:30007 + ip: 127.0.0.1 + port: 30007 + logPath: logs/jeecg/job/jobhandler/ + logRetentionDays: 30 + #分布式锁配置 + redisson: + address: jeecg-boot-redis:6379 + password: + type: STANDALONE + enabled: true + # 百度开放API配置 + baidu-api: + app-id: ?? + api-key: ?? + secret-key: ?? +#cas单点登录 +cas: + prefixUrl: http://cas.example.org:8443/cas +#Mybatis输出sql日志 +logging: + level: + org.flywaydb: debug + org.jeecg.modules.system.mapper: info +#swagger +knife4j: + #开启增强配置 + enable: true + #开启生产环境屏蔽 + production: false + basic: + enable: false + username: jeecg + password: jeecg1314 +#第三方登录 +justauth: + enabled: true + type: + GITHUB: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/github/callback + WECHAT_ENTERPRISE: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_enterprise/callback + agent-id: ?? + DINGTALK: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/dingtalk/callback + WECHAT_OPEN: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_open/callback + cache: + type: default + prefix: 'demo::' + timeout: 1h diff --git a/jeecg-boot/pom.xml b/jeecg-boot/pom.xml index a71018c90..fbfe31a53 100644 --- a/jeecg-boot/pom.xml +++ b/jeecg-boot/pom.xml @@ -591,6 +591,24 @@ + + + docker + + + docker + + jeecg-boot-nacos:8848 + + + + DEFAULT_GROUP + + + + + + prod diff --git a/jeecgboot-vue3/.env.docker b/jeecgboot-vue3/.env.docker new file mode 100644 index 000000000..74f6ee81d --- /dev/null +++ b/jeecgboot-vue3/.env.docker @@ -0,0 +1,34 @@ +# 是否启用mock +VITE_USE_MOCK = false + +# 发布路径 +VITE_PUBLIC_PATH = / + +# 是否启用gzip或brotli压缩 +# 选项值: gzip | brotli | none +# 如果需要多个可以使用“,”分隔 +VITE_BUILD_COMPRESS = 'gzip' + +# 使用压缩时是否删除原始文件,默认为false +VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false + +#后台接口父地址(必填) +VITE_GLOB_API_URL=/jeecgboot + +#后台接口全路径地址(必填) +VITE_GLOB_DOMAIN_URL=http://jeecg-boot-system:8080/jeecg-boot + +# 接口父路径前缀 +VITE_GLOB_API_URL_PREFIX= + + +# 填写后将作为乾坤子应用启动,主应用注册时AppName需保持一致(放开 VITE_GLOB_QIANKUN_MICRO_APP_NAME 参数表示jeecg-vue3将以乾坤子应用模式启动) +#VITE_GLOB_QIANKUN_MICRO_APP_NAME=jeecg-vue3 +# 作为乾坤子应用启动时必填,需与qiankun主应用注册子应用时填写的 entry 保持一致 +#VITE_GLOB_QIANKUN_MICRO_APP_ENTRY=//qiankun.boot3.jeecg.com/jeecg-vue3 + +# 全局隐藏哪些布局。可选属性:sider,header,multi-tabs;多个用逗号隔开 +#VITE_GLOB_HIDE_LAYOUT_TYPES=sider,header,multi-tabs + +# 在线文档编辑版本。可选属性:wps, offlineWps(离线版), onlyoffice +VITE_GLOB_ONLINE_DOCUMENT_VERSION=wps diff --git a/jeecgboot-vue3/.env.dockercloud b/jeecgboot-vue3/.env.dockercloud new file mode 100644 index 000000000..d7193988a --- /dev/null +++ b/jeecgboot-vue3/.env.dockercloud @@ -0,0 +1,34 @@ +# 是否启用mock +VITE_USE_MOCK = false + +# 发布路径 +VITE_PUBLIC_PATH = / + +# 是否启用gzip或brotli压缩 +# 选项值: gzip | brotli | none +# 如果需要多个可以使用“,”分隔 +VITE_BUILD_COMPRESS = 'gzip' + +# 使用压缩时是否删除原始文件,默认为false +VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false + +#后台接口父地址(必填) +VITE_GLOB_API_URL=/jeecgboot + +#后台接口全路径地址(必填) +VITE_GLOB_DOMAIN_URL=http://jeecg-boot-gateway:9999 + +# 接口父路径前缀 +VITE_GLOB_API_URL_PREFIX= + + +# 填写后将作为乾坤子应用启动,主应用注册时AppName需保持一致(放开 VITE_GLOB_QIANKUN_MICRO_APP_NAME 参数表示jeecg-vue3将以乾坤子应用模式启动) +#VITE_GLOB_QIANKUN_MICRO_APP_NAME=jeecg-vue3 +# 作为乾坤子应用启动时必填,需与qiankun主应用注册子应用时填写的 entry 保持一致 +#VITE_GLOB_QIANKUN_MICRO_APP_ENTRY=//qiankun.boot3.jeecg.com/jeecg-vue3 + +# 全局隐藏哪些布局。可选属性:sider,header,multi-tabs;多个用逗号隔开 +#VITE_GLOB_HIDE_LAYOUT_TYPES=sider,header,multi-tabs + +# 在线文档编辑版本。可选属性:wps, offlineWps(离线版), onlyoffice +VITE_GLOB_ONLINE_DOCUMENT_VERSION=wps diff --git a/jeecgboot-vue3/Dockerfile.cloud b/jeecgboot-vue3/Dockerfile.cloud new file mode 100644 index 000000000..691de965f --- /dev/null +++ b/jeecgboot-vue3/Dockerfile.cloud @@ -0,0 +1,30 @@ +FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/nginx +MAINTAINER jeecgos@163.com +VOLUME /tmp +ENV LANG en_US.UTF-8 +RUN echo "server { \ + listen 80; \ + location /jeecgboot/ { \ + proxy_pass http://jeecg-boot-gateway:9999/; \ + proxy_redirect off; \ + proxy_set_header Host jeecg-boot-system; \ + proxy_set_header X-Real-IP \$remote_addr; \ + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \ + } \ + #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \ + location / { \ + root /var/www/html/; \ + index index.html index.htm; \ + if (!-e \$request_filename) { \ + rewrite ^(.*)\$ /index.html?s=\$1 last; \ + break; \ + } \ + } \ + access_log /var/log/nginx/access.log ; \ + } " > /etc/nginx/conf.d/default.conf \ + && mkdir -p /var/www \ + && mkdir -p /var/www/html + +ADD dist/ /var/www/html/ +EXPOSE 80 +EXPOSE 443 diff --git a/jeecgboot-vue3/package.json b/jeecgboot-vue3/package.json index 0553897f9..9175a273b 100644 --- a/jeecgboot-vue3/package.json +++ b/jeecgboot-vue3/package.json @@ -11,6 +11,8 @@ "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", "dev": "vite", "build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts && esno ./build/script/copyChat.ts", + "build:docker": "cross-env NODE_ENV=docker NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts && esno ./build/script/copyChat.ts", + "build:dockercloud": "cross-env NODE_ENV=dockercloud NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts && esno ./build/script/copyChat.ts", "build:report": "pnpm clean:cache && cross-env REPORT=true npm run build", "preview": "npm run build && vite preview", "reinstall": "rimraf pnpm-lock.yaml && rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run install",