This commit is contained in:
2025-11-11 17:45:09 +08:00
parent c5e422f058
commit a8595c7403
206 changed files with 785 additions and 338539 deletions

View File

@@ -1,24 +1,23 @@
# ===== 基础镜像阶段 =====
# 使用预装字体的OpenJDK镜像避免重复安装
FROM openjdk:8-jdk AS base
# 使用更小的Alpine OpenJRE镜像
FROM openjdk:8-jre-alpine AS base
# 设置维护者信息
LABEL maintainer="digital-archive-team"
# 使用阿里云镜像源并安装基础包
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
apt-get update && \
apt-get install -y \
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache \
ca-certificates \
curl \
bash \
&& apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ttf-dejavu \
fontconfig \
&& rm -rf /var/cache/apk/*
# ===== Maven 构建阶段 =====
# 使用Maven镜像进行构建
FROM maven:3.8.4-openjdk-8 AS builder
# 使用更小的Alpine Maven镜像进行构建
FROM maven:3.8.4-openjdk-8-alpine AS builder
# 设置工作目录
WORKDIR /build
@@ -33,7 +32,7 @@ RUN mkdir -p /root/.m2/repository
# 复制本地lib目录中的JAR文件
COPY src/main/lib/ /tmp/local-jars/
# 手动安装本地JAR到Maven仓库
# 手动安装本地JAR到Maven仓库(只安装实际使用的)
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/aspose-cells-8.5.2.jar \
-DgroupId=com.aspose \
@@ -59,7 +58,7 @@ RUN mvn install:install-file \
-B -s /root/.m2/settings.xml || echo "JAI codec installation failed"
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/jai_core-1.1.3.jar \
-Dfile=/tmp/local-jars/jai_core.jar \
-DgroupId=javax.media \
-DartifactId=jai_core \
-Dversion=1.1.3 \
@@ -67,20 +66,20 @@ RUN mvn install:install-file \
-B -s /root/.m2/settings.xml || echo "JAI core installation failed"
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/kingbase8-8.6.0.jar \
-DgroupId=com.kingbase8 \
-DartifactId=kingbase8 \
-Dversion=8.6.0 \
-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 || echo "Kingbase driver installation failed"
-B -s /root/.m2/settings.xml || echo "JCE installation failed"
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/twain4java-0.3.3-all.jar \
-DgroupId=twain4java \
-DartifactId=twain4java \
-Dversion=0.3.3 \
-Dfile=/tmp/local-jars/agent-1.0.0.jar \
-DgroupId=com.yh \
-DartifactId=scofd \
-Dversion=1.0.0 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml || echo "TWAIN installation failed"
-B -s /root/.m2/settings.xml || echo "Agent installation failed"
# 设置Maven仓库权限
RUN chown -R root:root /root/.m2
@@ -88,10 +87,13 @@ RUN chown -R root:root /root/.m2
# 复制源代码
COPY src ./src
# 构建应用
RUN mvn clean package -DskipTests -B -s /root/.m2/settings.xml -e
# 构建应用(优化构建参数)
RUN mvn clean package -DskipTests -B -s /root/.m2/settings.xml -e \
-o \
-Dmaven.test.skip=true \
-Dmaven.compiler.optimize=true
# 检查构建结果
# 检查构建结果并复制正确的JAR文件
RUN echo "=== 检查构建结果 ===" && \
ls -la /build/target/ && \
echo "=== 查找所有 JAR 文件 ===" && \
@@ -106,34 +108,19 @@ RUN echo "=== 检查构建结果 ===" && \
FROM base
# 设置环境变量
ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true"
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
# 创建应用用户和目录(兼容 Debian/Ubuntu 与 Alpine/busybox 工具集)
RUN set -eux; \
if command -v groupadd >/dev/null 2>&1; then \
# Debian/Ubuntu/一般 GNU 工具链
groupadd -g 1001 app; \
useradd -u 1001 -g app -s /bin/sh -d /app -M app; \
elif command -v addgroup >/dev/null 2>&1; then \
# adduser/addgroup 工具链:区分 --gid 可用与否
if addgroup --help 2>&1 | grep -q -- '--gid'; then \
addgroup --gid 1001 app; \
adduser --disabled-password --shell /bin/sh --uid 1001 --ingroup app app; \
else \
addgroup -g 1001 app; \
adduser -D -s /bin/sh -u 1001 -G app app; \
fi; \
else \
echo 'no user/group management tools found' >&2; exit 1; \
fi; \
# 创建应用用户和目录
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; \
/app/logs && \
chown -R app:app /app
# 设置工作目录
@@ -158,5 +145,5 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
# 暴露端口
EXPOSE 9081
# 启动应用不使用tini直接启动
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
# 启动应用
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]