Files
server/Dockerfile
2025-11-01 19:28:08 +08:00

147 lines
4.3 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.
# ===== 基础镜像阶段 =====
# 使用预装字体的OpenJDK镜像避免重复安装
FROM openjdk:8-jdk 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 \
ca-certificates \
curl \
bash \
&& apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# ===== Maven 构建阶段 =====
# 使用Maven镜像进行构建
FROM maven:3.8.4-openjdk-8 AS builder
# 设置工作目录
WORKDIR /build
# 复制settings.xml和pom.xml文件
COPY settings.xml /root/.m2/
COPY pom.xml .
# 复制本地JAR文件到Maven仓库
RUN mkdir -p /root/.m2/repository
# 复制本地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 || echo "Aspose cells installation failed"
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 || echo "Aspose words installation failed"
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 || echo "JAI codec installation failed"
RUN mvn install:install-file \
-Dfile=/tmp/local-jars/jai_core-1.1.3.jar \
-DgroupId=javax.media \
-DartifactId=jai_core \
-Dversion=1.1.3 \
-Dpackaging=jar \
-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 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml || echo "Kingbase driver 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 \
-Dpackaging=jar \
-B -s /root/.m2/settings.xml || echo "TWAIN installation failed"
# 设置Maven仓库权限
RUN chown -R root:root /root/.m2
# 复制源代码
COPY src ./src
# 构建应用
RUN mvn clean package -DskipTests -B -s /root/.m2/settings.xml -e
# 检查构建结果
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="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true"
ENV SPRING_PROFILES_ACTIVE=prod
# 创建应用用户和目录
RUN groupadd -g 1001 app \
&& useradd -u 1001 -g app -s /bin/sh -d /app -M app \
&& mkdir -p /app/data/upload \
&& mkdir -p /app/data/temp \
&& mkdir -p /app/data/unzip \
&& mkdir -p /app/data/images \
&& mkdir -p /app/data/reports \
&& mkdir -p /app/data/elasticsearch \
&& mkdir -p /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
# 启动应用不使用tini直接启动
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]