111 lines
3.6 KiB
Docker
111 lines
3.6 KiB
Docker
# 多阶段构建 Dockerfile for 若依后端应用
|
||
# Stage 1: 构建阶段 - 使用Maven构建应用
|
||
FROM maven:3.8-openjdk-8 AS builder
|
||
|
||
# 设置工作目录
|
||
WORKDIR /app
|
||
|
||
# 复制Maven配置文件
|
||
COPY pom.xml .
|
||
COPY ruoyi-admin/pom.xml ruoyi-admin/
|
||
COPY ruoyi-framework/pom.xml ruoyi-framework/
|
||
COPY ruoyi-system/pom.xml ruoyi-system/
|
||
COPY ruoyi-quartz/pom.xml ruoyi-quartz/
|
||
COPY ruoyi-generator/pom.xml ruoyi-generator/
|
||
COPY ruoyi-common/pom.xml ruoyi-common/
|
||
COPY ruoyi-credit/pom.xml ruoyi-credit/
|
||
COPY ruoyi-blockchain/pom.xml ruoyi-blockchain/
|
||
COPY ruoyi-payment/pom.xml ruoyi-payment/
|
||
COPY ruoyi-security/pom.xml ruoyi-security/
|
||
COPY ruoyi-notification/pom.xml ruoyi-notification/
|
||
COPY ruoyi-analytics/pom.xml ruoyi-analytics/
|
||
COPY ruoyi-workflow/pom.xml ruoyi-workflow/
|
||
COPY ruoyi-integration/pom.xml ruoyi-integration/
|
||
COPY ruoyi-monitor/pom.xml ruoyi-monitor/
|
||
|
||
# 下载依赖 (利用Docker缓存层优化)
|
||
RUN mvn dependency:go-offline -B
|
||
|
||
# 复制源代码
|
||
COPY ruoyi-admin/src ruoyi-admin/src
|
||
COPY ruoyi-framework/src ruoyi-framework/src
|
||
COPY ruoyi-system/src ruoyi-system/src
|
||
COPY ruoyi-quartz/src ruoyi-quartz/src
|
||
COPY ruoyi-generator/src ruoyi-generator/src
|
||
COPY ruoyi-common/src ruoyi-common/src
|
||
COPY ruoyi-credit/src ruoyi-credit/src
|
||
COPY ruoyi-blockchain/src ruoyi-blockchain/src
|
||
COPY ruoyi-payment/src ruoyi-payment/src
|
||
COPY ruoyi-security/src ruoyi-security/src
|
||
COPY ruoyi-notification/src ruoyi-notification/src
|
||
COPY ruoyi-analytics/src ruoyi-analytics/src
|
||
COPY ruoyi-workflow/src ruoyi-workflow/src
|
||
COPY ruoyi-integration/src ruoyi-integration/src
|
||
COPY ruoyi-monitor/src ruoyi-monitor/src
|
||
|
||
# 执行Maven构建,跳过测试以加快构建速度
|
||
RUN mvn clean package -DskipTests -B
|
||
|
||
# Stage 2: 运行阶段 - 使用轻量级JRE镜像
|
||
FROM openjdk:8-jre-alpine
|
||
|
||
# 设置时区并安装必要工具
|
||
RUN apk add --no-cache tzdata netcat-openbsd && \
|
||
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
|
||
echo "Asia/Shanghai" > /etc/timezone && \
|
||
apk del tzdata
|
||
|
||
# 创建应用用户 (安全最佳实践)
|
||
RUN addgroup -g 1000 anxin && \
|
||
adduser -D -s /bin/sh -u 1000 -G anxin anxin
|
||
|
||
# 设置工作目录
|
||
WORKDIR /app
|
||
|
||
# 从构建阶段复制JAR文件
|
||
COPY --from=builder /app/ruoyi-admin/target/ruoyi-admin.jar app.jar
|
||
|
||
# 复制Docker环境配置文件和脚本
|
||
COPY docker/configs/application-docker.yml /app/config/application-docker.yml
|
||
COPY docker/configs/backend-env.sh /app/scripts/backend-env.sh
|
||
COPY docker/configs/startup.sh /app/scripts/startup.sh
|
||
|
||
# 创建日志目录、配置目录和脚本目录
|
||
RUN mkdir -p /app/logs /app/config /app/uploadPath /app/scripts && \
|
||
chown -R anxin:anxin /app && \
|
||
chmod +x /app/scripts/backend-env.sh /app/scripts/startup.sh
|
||
|
||
# 切换到应用用户
|
||
USER anxin
|
||
|
||
# 暴露应用端口
|
||
EXPOSE 8080
|
||
|
||
# 设置环境变量 - 数据库连接配置
|
||
ENV DB_HOST=anxin-mysql \
|
||
DB_PORT=3306 \
|
||
DB_NAME=anxin \
|
||
DB_USER=anxin_user \
|
||
DB_PASSWORD=anxin_password
|
||
|
||
# 设置环境变量 - 应用端口和网络配置
|
||
ENV SERVER_PORT=8080 \
|
||
SPRING_PROFILES_ACTIVE=docker
|
||
|
||
# 设置环境变量 - 日志和监控配置
|
||
ENV LOG_LEVEL=INFO \
|
||
LOG_PATH=/app/logs \
|
||
LOG_MAX_SIZE=100MB \
|
||
LOG_MAX_FILES=10 \
|
||
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE=health,info,metrics
|
||
|
||
# 设置环境变量 - JVM和性能配置
|
||
ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker" \
|
||
TZ=Asia/Shanghai
|
||
|
||
# 健康检查 - 使用配置的端口
|
||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||
CMD wget --no-verbose --tries=1 --spider http://localhost:${SERVER_PORT}/actuator/health || exit 1
|
||
|
||
# 启动应用 - 使用启动脚本
|
||
ENTRYPOINT ["/app/scripts/startup.sh"] |