perf(docker): 拆分依赖层以复用构建缓存 (#43)

This commit is contained in:
ten authored and GitHub committed 2026-05-14 12:55:53 +08:00
1 parent fd662a6106
commit bf028aa6f1
6 files changed
+77 -23

No files matched your search

+7 -1
View File
@@ -17,4 +17,10 @@
/playedu-admin/.env.local/
/playedu-admin/.env.development/
/playedu-admin/.env.production/
/playedu-admin/build/
/playedu-admin/build/
**/target/
**/.git/
**/.idea/
**/.vscode/
**/*.log
+2
View File
@@ -1,5 +1,7 @@
## Unreleased
- 优化:Dockerfile 拆分依赖层,前端先 `COPY package.json/pnpm-lock.yaml` 再 `pnpm i`,Java 先 `COPY pom.xml` 并 `dependency:go-offline` 预热依赖,源码变更不再触发依赖重装,显著缩短增量构建耗时
- 优化:新增 `playedu-api/.mvn/settings.xml` 与 `.mvn/maven.config`,默认走阿里云 Maven 镜像并启用 `-T 1C` 并行构建,加速 `mvnw` 依赖下载与编译
- 修复:后台批量导入学员、章节/课时/附件排序接口缺少权限注解导致的越权问题
- 优化:后台配置项改为由 `application.yml` 直接读取环境变量,移除 Dockerfile 中的命令行参数映射
- 新增:数据库连接池可通过环境变量配置 (`DB_POOL_MIN_IDLE` / `DB_POOL_MAX_SIZE` / `DB_POOL_CONN_TIMEOUT` / `DB_POOL_IDLE_TIMEOUT` / `DB_POOL_MAX_LIFETIME`)
+36 -19
View File
@@ -1,25 +1,42 @@
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/node:20-alpine AS node-builder
COPY playedu-admin /app/admin
COPY playedu-pc /app/pc
COPY playedu-h5 /app/h5
WORKDIR /app/admin
RUN pnpm i && VITE_APP_URL=/api/ pnpm build
WORKDIR /app/pc
RUN pnpm i && VITE_APP_URL=/api/ pnpm build
WORKDIR /app/h5
RUN pnpm i && VITE_APP_URL=/api/ pnpm build
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS java-builder
COPY playedu-api /app
WORKDIR /app
RUN /app/mvnw -Dmaven.test.skip=true clean package
COPY playedu-admin/package.json playedu-admin/pnpm-lock.yaml /app/admin/
COPY playedu-pc/package.json playedu-pc/pnpm-lock.yaml /app/pc/
COPY playedu-h5/package.json playedu-h5/pnpm-lock.yaml /app/h5/
RUN cd /app/admin && pnpm i
RUN cd /app/pc && pnpm i
RUN cd /app/h5 && pnpm i
COPY playedu-admin /app/admin
RUN cd /app/admin && VITE_APP_URL=/api/ pnpm build
COPY playedu-pc /app/pc
RUN cd /app/pc && VITE_APP_URL=/api/ pnpm build
COPY playedu-h5 /app/h5
RUN cd /app/h5 && VITE_APP_URL=/api/ pnpm build
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS java-builder
WORKDIR /app
COPY playedu-api/mvnw /app/mvnw
COPY playedu-api/.mvn /app/.mvn
COPY playedu-api/pom.xml /app/pom.xml
COPY playedu-api/playedu-api/pom.xml /app/playedu-api/pom.xml
COPY playedu-api/playedu-common/pom.xml /app/playedu-common/pom.xml
COPY playedu-api/playedu-course/pom.xml /app/playedu-course/pom.xml
COPY playedu-api/playedu-resource/pom.xml /app/playedu-resource/pom.xml
COPY playedu-api/playedu-system/pom.xml /app/playedu-system/pom.xml
RUN /app/mvnw -B -DskipTests dependency:go-offline
COPY playedu-api /app
RUN /app/mvnw -B -Dmaven.test.skip=true package
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS base
@@ -36,4 +53,4 @@ EXPOSE 9800
EXPOSE 9801
EXPOSE 9900
CMD nginx; echo "Waiting for MySQL to start..."; sleep 15; java -jar /app/api/app.jar
CMD nginx; echo "Waiting for MySQL to start..."; sleep 15; java -jar /app/api/app.jar
+4
View File
@@ -0,0 +1,4 @@
-s
.mvn/settings.xml
-T
1C
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyun-public</id>
<name>Aliyun Public Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
+14 -3
View File
@@ -1,10 +1,21 @@
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS builder
COPY . /app
WORKDIR /app
RUN /app/mvnw -Dmaven.test.skip=true clean package
COPY mvnw /app/mvnw
COPY .mvn /app/.mvn
COPY pom.xml /app/pom.xml
COPY playedu-api/pom.xml /app/playedu-api/pom.xml
COPY playedu-common/pom.xml /app/playedu-common/pom.xml
COPY playedu-course/pom.xml /app/playedu-course/pom.xml
COPY playedu-resource/pom.xml /app/playedu-resource/pom.xml
COPY playedu-system/pom.xml /app/playedu-system/pom.xml
RUN /app/mvnw -B -DskipTests dependency:go-offline
COPY . /app
RUN /app/mvnw -B -Dmaven.test.skip=true package
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS base