一、场景
二、实战
▶ 2.1 修改配置文件
> 目的一:将 dev 变更为生产环境 prod
> 目的二:方便spring项目调用docker同个network下的redis和mysql
▶ 2.2 编写dockerfile
▶ 2.3 编写docker-compose.yaml
▶ 2.4 打包项目
▶ 2.5 将文件上传到服务器下
▶ 2.6 创建并运行容器(启动项目)
▶ 2.5 验证 - 登录 knife4j 文档
三、思考
一、场景
-
服务器:腾讯云-ECS
-
容器技术:docker + docker-compose
-
后端:JEECGBOOT 3.6
-
数据库:redis , mysql
二、实战
▶ 2.1 修改配置文件
> 目的一:将 dev 变更为生产环境 prod
- 修改 application.yml
> 目的二:方便spring项目调用docker同个network下的redis和mysql
- 修改 application-prod.yml
- 说明:这里使用容器名访问只是为了提升IO速度,也可以使用外网IP代替mysqlhost
# 修改部分--start---
# 说明:
host: XXX.XXX.XXX.127 # host:腾讯云服务器外网ip
version: ${host} - V 3.6
mysqlhost: mysql5.7 # mysqlhost:mysql容器名称,下文引用
redishost: redis-base # redishost:redis容器名称,下文引用
mongodbhost: mongo # mongodbhost:mongodb容器名称
mysqlport: 3306 # mysqlport:mysql端口号,下文引用
redisport: 6379 # redisport:redis端口号,下文引用
mongodbport: 27017 # mongodbport:mongodb端口号
mysql-password: XXXXXXX # mysql-password:mysql密码,下文引用
redis-password: XXXXXXX # redis-password:redis密码,下文引用
mongo-password: XXXXXXX # mongo-password:mongo密码
# 修改部分--end---server:port: 8080tomcat:max-swallow-size: -1error:include-exception: trueinclude-stacktrace: ALWAYSinclude-message: ALWAYSservlet:context-path: /jeecg-bootcompression:enabled: truemin-response-size: 1024mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*management:endpoints:web:exposure:include: metrics,httptracespring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MBmail:host: smtp.163.comusername: ??password: ??properties:mail:smtp:auth: truestarttls:enable: truerequired: true## quartz定时任务,采用数据库方式quartz:job-store-type: jdbcinitialize-schema: embedded#定时任务开关,true-开 false-关auto-startup: true#延迟1秒启动定时任务startup-delay: 1s#启动时更新己存在的Joboverwrite-existing-jobs: trueproperties:org:quartz:scheduler:instanceName: MySchedulerinstanceId: AUTOjobStore:class: org.springframework.scheduling.quartz.LocalDataSourceJobStoredriverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegatetablePrefix: QRTZ_isClustered: truemisfireThreshold: 12000clusterCheckinInterval: 15000threadPool:class: org.quartz.simpl.SimpleThreadPoolthreadCount: 10threadPriority: 5threadsInheritContextClassLoaderOfInitializingThread: true#json 时间戳统一转换jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8jpa:open-in-view: falseaop:proxy-target-class: true#配置freemarkerfreemarker:# 设置模板后缀名suffix: .ftl# 设置文档类型content-type: text/html# 设置页面编码格式charset: UTF-8# 设置页面缓存cache: falseprefer-file-system-access: false# 设置ftl文件路径template-loader-path:- classpath:/templatestemplate_update_delay: 0# 设置静态文件路径,js,css等mvc:static-path-pattern: /**#Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcherpathmatch:matching-strategy: ant_path_matcherresource:static-locations: classpath:/static/,classpath:/public/autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:druid:stat-view-servlet:enabled: trueloginUsername: adminloginPassword: 123456allow:web-stat-filter:enabled: truedynamic:druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)# 连接池的配置信息# 初始化大小,最小,最大initial-size: 5min-idle: 5maxActive: 1000# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 打开PSCache,并且指定每个连接上PSCache的大小poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,slf4j# 打开mergeSql功能;慢SQL记录stat:merge-sql: trueslow-sql-millis: 5000datasource:master:url: jdbc:mysql://${mysqlhost}:${mysqlport}/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghaiusername: rootpassword: ${mysql-password}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: 0host: ${redishost}port: ${redisport}password: ${redis-password}
#mybatis plus 设置
mybatis-plus:mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xmlglobal-config:# 关闭MP3.0自带的bannerbanner: falsedb-config:#主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";id-type: ASSIGN_ID# 默认数据库表下划线命名table-underline: trueconfiguration:# 这个配置会将执行的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:# 平台上线安全配置firewall:# 数据源安全 (开启后,Online报表和图表的数据源为必填)dataSourceSafe: true# 低代码模式(dev:开发模式,prod:发布模式——关闭所有在线开发配置能力)lowCodeMode: prod# 签名密钥串(前后端要一致,正式发布请自行修改)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# local\minio\aliossuploadType: alioss# 前端访问地址domainUrl:pc: http://localhost:3100app: http://localhost:8051path:#文件上传根目录 设置upload: /opt/jeecg-boot/upload#webapp文件路径webapp: /opt/jeecg-boot/webappshiro:excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/jmreport/bigscreen2/**,/api/getUserInfo#阿里云oss存储和大鱼短信秘钥配置oss:accessKey: ??secretKey: ??endpoint: oss-cn-beijing.aliyuncs.combucketName: jeecgdevstaticDomain: https://static.jeecg.com# ElasticSearch 设置elasticsearch:cluster-name: jeecg-EScluster-nodes: 127.0.0.1:9200check-enabled: true# 在线预览文件服务器地址配置file-view-domain: http://fileview.jeecg.com# minio文件上传minio:minio_url: http://minio.jeecg.comminio_name: ??minio_pass: ??bucketName: otatest#大屏报表参数设置jmreport:#多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)saasMode: created# 平台上线安全配置(v1.6.2+ 新增)firewall:# 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并且不允许查询数据库)dataSourceSafe: true# 低代码开发模式(dev:开发模式,prod:发布模式—关闭在线报表设计功能,分配角色admin、lowdeveloper可以放开限制)lowCodeMode: prod#xxl-job配置xxljob:enabled: falseadminAddresses: http://127.0.0.1:9080/xxl-job-adminappname: ${spring.application.name}accessToken: ''address: 127.0.0.1:30007ip: 127.0.0.1port: 30007logPath: logs/jeecg/job/jobhandler/logRetentionDays: 30#分布式锁配置redisson:address: 127.0.0.1:6379password:type: STANDALONEenabled: true
#cas单点登录
cas:prefixUrl: http://cas.example.org:8443/cas
#Mybatis输出sql日志
logging:level:org.jeecg.modules.system.mapper: info
#swagger
knife4j:#开启增强配置enable: true#开启生产环境屏蔽production: falsebasic:enable: trueusername: jeecgpassword: jeecg1314
#第三方登录
justauth:enabled: truetype:GITHUB:client-id: ??client-secret: ??redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/github/callbackWECHAT_ENTERPRISE:client-id: ??client-secret: ??redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_enterprise/callbackagent-id: ??DINGTALK:client-id: ??client-secret: ??redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/dingtalk/callbackWECHAT_OPEN:client-id: ??client-secret: ??redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_open/callbackcache:type: defaultprefix: 'demo::'timeout: 1h
▶ 2.2 编写dockerfile
FROM openjdk:8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD jeecg-system-start-3.6.0.jar jeecg-system-start-3.6.0.jar
ENTRYPOINT ["java","-jar","jeecg-system-start-3.6.0.jar"]
▶ 2.3 编写docker-compose.yaml
version: '3.1'services:jeecg-boot-server:container_name: jeecg-boot3.6build: .ports:- "9200:8080"image: jeecg-boot-imageenvironment:TZ: Asia/Shanghairestart: alwaysvolumes:- ./logs:/logs
networks:default:external:name: xph-network
#这里networks可以自定义
▶ 2.4 打包项目
- IDEA中 -- Maven -- 运行 clean -- install -- 获取 jeecg-system-start-3.6.0.jar
▶ 2.5 将文件上传到服务器下
▶ 2.6 创建并运行容器(启动项目)
# 进入上一步上传的目录下
cd /mnt/docker/jeecgboot3.6/# 启动项目
docker-compose up -d --build
▶ 2.5 验证 - 登录 knife4j 文档
-
knife4j 账号 jeecg 密码 jeecg1314
-
在 yml 中设置
三、思考
项目打包jar 近200M,部署上传速度缓慢,如何缩小成100倍以下内,见下一章