Files
server/Dockerfile
2025-11-11 17:58:35 +08:00

161 lines
4.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.
# ===== 基础镜像阶段 =====
# 使用更小的Alpine OpenJRE镜像
FROM docker.aipper.de/eclipse-temurin:8-jre-alpine as base
# 设置维护者信息
LABEL maintainer="digital-archive-team"
# 使用阿里云镜像源并安装基础包
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache \
ca-certificates \
curl \
bash \
ttf-dejavu \
fontconfig \
&& rm -rf /var/cache/apk/*
# ===== Maven 构建阶段 =====
# 使用更小的Alpine Maven镜像进行构建
FROM docker.aipper.de/maven:3.9.9-eclipse-temurin-8-focal AS builder
# 设置工作目录
WORKDIR /build
# 创建Maven仓库并设置权限
RUN mkdir -p /root/.m2/repository && \
chown -R root:root /root/.m2
# 复制settings.xml和pom.xml文件
COPY settings.xml /root/.m2/
COPY pom.xml .
# 复制本地lib目录中的JAR文件
COPY src/main/lib/ /tmp/local-jars/
# 手动安装本地JAR到Maven仓库修复版本一致性和错误处理
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/aspose-cells-8.5.2.jar \
-DgroupId=com.aspose \
-DartifactId=aspose-cells \
-Dversion=8.5.2 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/aspose-words-15.8.0-jdk16.jar \
-DgroupId=com.aspose \
-DartifactId=aspose-words \
-Dversion=15.8.0 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/jai_codec-1.1.3.jar \
-DgroupId=javax.media \
-DartifactId=jai_codec \
-Dversion=1.1.3 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/jai_core.jar \
-DgroupId=javax.media \
-DartifactId=jai_core \
-Dversion=1.0.0-SNAPSHOT \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/jce-0.0.1.jar \
-DgroupId=org.bouncycastle \
-DartifactId=jce \
-Dversion=0.0.1 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/agent-1.0.0.jar \
-DgroupId=com.yh \
-DartifactId=scofd \
-Dversion=1.0.1 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml
# 确保Maven仓库权限正确
RUN chown -R root:root /root/.m2 && \
chmod -R 755 /root/.m2
# 复制源代码
COPY src ./src
# 验证依赖和构建环境
RUN echo "=== 验证Maven环境 ===" && \
mvn -version && \
echo "=== 验证本地JAR文件 ===" && \
ls -la /tmp/local-jars/ && \
echo "=== 下载依赖(不编译) ===" && \
mvn dependency:go-offline -B -s /root/.m2/settings.xml -e || \
mvn dependency:resolve -B -s /root/.m2/settings.xml -e
# 构建应用(移除离线模式,允许下载依赖)
RUN echo "=== 开始构建应用 ===" && \
mvn clean package -DskipTests -B -s /root/.m2/settings.xml -e \
-Dmaven.test.skip=true \
-Dmaven.compiler.optimize=true
# 检查构建结果并复制正确的JAR文件
RUN echo "=== 检查构建结果 ===" && \
ls -la /build/target/ && \
echo "=== 查找所有 JAR 文件 ===" && \
find /build/target -name "*.jar" -type f && \
echo "=== 复制正确的 JAR 文件 ===" && \
cp /build/target/*.jar /build/app.jar && \
ls -la /build/app.jar && \
echo "JAR 文件大小: $(du -h /build/app.jar | cut -f1)"
# ===== 运行阶段 =====
# 复用基础镜像,避免重复安装依赖
FROM base
# 设置环境变量
ENV JAVA_OPTS="-Xmx1g -Xms512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
ENV SPRING_PROFILES_ACTIVE=prod
# 创建应用用户和目录
RUN addgroup -g 1001 app && \
adduser -D -s /bin/sh -u 1001 -G app app && \
mkdir -p /app/data/upload \
/app/data/temp \
/app/data/unzip \
/app/data/images \
/app/data/reports \
/app/data/elasticsearch \
/app/logs && \
chown -R app:app /app
# 设置工作目录
WORKDIR /app
# 从构建阶段复制jar文件
COPY --from=builder /build/app.jar app.jar
# 验证JAR文件是否正确复制
RUN ls -la app.jar && echo "JAR 文件大小: $(du -h app.jar | cut -f1)"
# 切换到非root用户
USER app
# 确保日志目录存在且有正确权限
RUN mkdir -p /app/logs
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:9081/point-strategy/actuator/health || exit 1
# 暴露端口
EXPOSE 9081
# 启动应用
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]