anxin-ruoyi/docker/backend/Dockerfile
2026-01-05 01:46:20 +08:00

111 lines
3.6 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 多阶段构建 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"]