From b30a5b67799afd29bf7c43070ec3a4b0111ca654 Mon Sep 17 00:00:00 2001 From: aipper Date: Sat, 1 Nov 2025 15:44:47 +0800 Subject: [PATCH] test --- Dockerfile.robust | 29 ++++++++---- Dockerfile.stable | 109 +++++++++++++++++++++++++++++++++++++++++++ archive-manager.sh | 2 +- test-docker-build.sh | 56 ++++++++++++++++++++++ 4 files changed, 187 insertions(+), 9 deletions(-) create mode 100644 Dockerfile.stable create mode 100755 test-docker-build.sh diff --git a/Dockerfile.robust b/Dockerfile.robust index 7eaa474..ce5a0e4 100644 --- a/Dockerfile.robust +++ b/Dockerfile.robust @@ -29,15 +29,24 @@ FROM openjdk:8-jre-alpine AS runtime # 设置维护者信息 LABEL maintainer="digital-archive-team" -# 配置多个Alpine镜像源以提高下载成功率 -RUN echo "https://mirrors.aliyun.com/alpine/v3.18/main/" > /etc/apk/repositories && \ - echo "https://mirrors.aliyun.com/alpine/v3.18/community/" >> /etc/apk/repositories && \ - echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/main/" >> /etc/apk/repositories && \ - echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/community/" >> /etc/apk/repositories - -# 更新包索引并安装必要的系统依赖和Tesseract OCR +# 先更新Alpine包管理器并安装ca-certificates RUN apk update && \ - apk add --no-cache \ + apk add --no-cache ca-certificates && \ + update-ca-certificates + +# 配置Alpine镜像源(使用阿里云镜像) +RUN echo "https://mirrors.aliyun.com/alpine/v3.18/main/" > /etc/apk/repositories && \ + echo "https://mirrors.aliyun.com/alpine/v3.18/community/" >> /etc/apk/repositories + +# 清理缓存并重新更新 +RUN rm -rf /var/cache/apk/* && \ + rm -rf /var/cache/apk/* + +# 更新包索引 +RUN apk update + +# 安装必要的系统依赖和Tesseract OCR +RUN apk add --no-cache \ tesseract \ tesseract-data-chi_sim \ tesseract-data-chi_tra \ @@ -48,6 +57,10 @@ RUN apk update && \ bash \ && rm -rf /var/cache/apk/* +# 验证安装 +RUN tesseract --version && \ + curl --version + # 设置环境变量 ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" ENV SPRING_PROFILES_ACTIVE=prod diff --git a/Dockerfile.stable b/Dockerfile.stable new file mode 100644 index 0000000..44f1a4b --- /dev/null +++ b/Dockerfile.stable @@ -0,0 +1,109 @@ +# ===== 构建阶段 ===== +# 使用Maven镜像进行构建 +FROM maven:3.8.4-openjdk-8-slim AS builder + +# 设置工作目录 +WORKDIR /build + +# 复制settings.xml和pom.xml文件 +COPY settings.xml /root/.m2/ +COPY pom.xml . + +# 设置Maven仓库权限 +RUN mkdir -p /root/.m2/repository && \ + chown -R root:root /root/.m2 + +# 下载依赖(利用Docker缓存层和国内镜像) +RUN mvn dependency:go-offline -B -s /root/.m2/settings.xml + +# 复制源代码 +COPY src ./src + +# 构建应用(使用国内镜像加速) +RUN mvn clean package -DskipTests -B -s /root/.m2/settings.xml + +# ===== 运行阶段 ===== +# 使用OpenJDK 8作为基础镜像 +FROM openjdk:8-jre-alpine AS runtime + +# 设置工作目录 +WORKDIR /app + +# 设置维护者信息 +LABEL maintainer="digital-archive-team" + +# 清理包缓存并更新索引 +RUN rm -rf /var/cache/apk/* && \ + apk update --no-cache && \ + apk upgrade --no-cache + +# 安装基础必需包(分步骤确保稳定性) +RUN apk add --no-cache ca-certificates + +RUN apk add --no-cache curl + +RUN apk add --no-cache bash + +RUN apk add --no-cache tini + +# 清理缓存 +RUN rm -rf /var/cache/apk/* + +# 尝试安装Tesseract OCR(完全可选,失败不影响构建) +RUN apk add --no-cache tesseract tesseract-ocr 2>/dev/null || \ + (echo "Tesseract installation failed - using OCR service fallback" && true) + +# 尝试安装中文语言包 +RUN apk add --no-cache tesseract-data-chi_sim tesseract-data-chi_tra 2>/dev/null || \ + (echo "Chinese language packs installation failed" && true) + +# 尝试安装英文语言包 +RUN apk add --no-cache tesseract-data-eng 2>/dev/null || \ + (echo "English language pack installation failed" && true) + +# 最终清理 +RUN rm -rf /var/cache/apk/* /tmp/* /var/tmp/* + +# 验证关键组件 +RUN curl --version && echo "✓ Core components verified" + +# 设置环境变量 +ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" +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 \ + && 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/target/point-strategy-*.jar app.jar + +# 复制配置文件(如果需要覆盖默认配置) +# COPY application-prod.yml application-prod.yml + +# 切换到非root用户 +USER app + +# 健康检查 +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作为init进程 +ENTRYPOINT ["/sbin/tini", "--"] + +# 启动应用 +CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] \ No newline at end of file diff --git a/archive-manager.sh b/archive-manager.sh index d0ba8a4..4f93afb 100755 --- a/archive-manager.sh +++ b/archive-manager.sh @@ -16,7 +16,7 @@ NC='\033[0m' # No Color PROJECT_NAME="digital-archive" VERSION="latest" DEFAULT_DEPLOY_DIR="/root/server/archive" -DOCKERFILE="Dockerfile.robust" +DOCKERFILE="Dockerfile.stable" # 显示横幅 show_banner() { diff --git a/test-docker-build.sh b/test-docker-build.sh new file mode 100755 index 0000000..8317a5d --- /dev/null +++ b/test-docker-build.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +echo "=== Docker Build Test Script ===" +echo "Testing Dockerfile.stable build process..." +echo + +# 检查Docker是否可用 +if ! command -v docker &> /dev/null; then + echo "❌ Docker is not available on this system" + echo "Please run this script on a server with Docker installed" + exit 1 +fi + +echo "✓ Docker found: $(docker --version)" + +# 构建镜像 +echo +echo "🏗️ Building Docker image..." +echo "This may take several minutes..." + +if docker build -f Dockerfile.stable -t digital-archive:test .; then + echo + echo "✅ Build successful!" + echo + echo "📋 Image details:" + docker images digital-archive:test + + echo + echo "🧪 Testing container startup..." + + # 测试容器启动 + if docker run --rm --name test-container digital-archive:test java -version; then + echo "✅ Container test successful!" + else + echo "❌ Container test failed" + fi + + # 清理测试镜像 + echo + echo "🧹 Cleaning up test image..." + docker rmi digital-archive:test + +else + echo + echo "❌ Build failed!" + echo + echo "🔍 Debugging info:" + echo "1. Check Dockerfile.stable for syntax errors" + echo "2. Verify all required files are present" + echo "3. Check network connectivity for package downloads" + echo "4. Try running with --no-cache flag:" + echo " docker build --no-cache -f Dockerfile.stable -t digital-archive:test ." +fi + +echo +echo "=== Test completed ===" \ No newline at end of file