49 lines
1.2 KiB
Docker
49 lines
1.2 KiB
Docker
# ========== 阶段一:前端构建(国内 npm 源) ==========
|
||
FROM node:20-alpine AS frontend
|
||
|
||
# 使用国内 npm 镜像(npmmirror)
|
||
COPY docker/.npmrc /root/.npmrc
|
||
WORKDIR /app
|
||
|
||
COPY frontend/package.json frontend/package-lock.json ./
|
||
RUN npm ci --prefer-offline --no-audit
|
||
|
||
COPY frontend/ ./
|
||
RUN npm run build
|
||
|
||
# ========== 阶段二:后端构建(国内 Maven 源) ==========
|
||
FROM maven:3.9-eclipse-temurin-8-alpine AS backend
|
||
|
||
COPY docker/maven-settings.xml /root/.m2/settings.xml
|
||
WORKDIR /build
|
||
|
||
# 先复制 pom,利用层缓存
|
||
COPY backend/pom.xml ./
|
||
RUN mvn dependency:go-offline -B -q
|
||
|
||
# 复制后端源码
|
||
COPY backend/src ./src
|
||
|
||
# 将前端打包结果放入 Spring Boot 静态资源目录
|
||
COPY --from=frontend /app/dist ./src/main/resources/static
|
||
|
||
RUN mvn package -DskipTests -B -q
|
||
|
||
# ========== 阶段三:运行(单容器,仅 Java) ==========
|
||
FROM eclipse-temurin:8-jre-alpine
|
||
|
||
RUN apk add --no-cache libgcc tzdata \
|
||
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||
&& echo "Asia/Shanghai" > /etc/timezone
|
||
|
||
WORKDIR /app
|
||
|
||
COPY --from=backend /build/target/*.jar app.jar
|
||
|
||
ENV DATA_DIR=/app/data
|
||
RUN mkdir -p ${DATA_DIR}
|
||
|
||
EXPOSE 48080
|
||
|
||
ENTRYPOINT ["java", "-jar", "app.jar"]
|