From d21ff35d1712c11ddd4dc7893022a094ef527715 Mon Sep 17 00:00:00 2001 From: aipper Date: Sat, 1 Nov 2025 17:37:42 +0800 Subject: [PATCH] test --- Dockerfile | 118 +++++++++++++++++++++------ Dockerfile.backup | 87 ++++++++++++++++++++ Dockerfile.fast | 161 ------------------------------------ Dockerfile.stable | 189 ------------------------------------------- archive-manager.sh | 59 ++------------ check-images.sh | 43 ---------- quick-build.sh | 23 ------ quick-deploy.sh | 27 ------- test-docker-build.sh | 103 ----------------------- 9 files changed, 185 insertions(+), 625 deletions(-) create mode 100644 Dockerfile.backup delete mode 100644 Dockerfile.fast delete mode 100644 Dockerfile.stable delete mode 100755 check-images.sh delete mode 100755 quick-build.sh delete mode 100755 quick-deploy.sh delete mode 100755 test-docker-build.sh diff --git a/Dockerfile b/Dockerfile index 830eba1..225a066 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,45 +9,109 @@ WORKDIR /build COPY settings.xml /root/.m2/ COPY pom.xml . -# 设置Maven仓库权限 -RUN mkdir -p /root/.m2/repository && \ - chown -R root:root /root/.m2 +# 复制本地JAR文件到Maven仓库 +RUN mkdir -p /root/.m2/repository -# 下载依赖(利用Docker缓存层和国内镜像) -RUN mvn dependency:go-offline -B -s /root/.m2/settings.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 || 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 +# 构建应用 +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)" # ===== 运行阶段 ===== # 使用OpenJDK 8作为基础镜像 -FROM openjdk:8-jre-alpine AS runtime +FROM openjdk:8-jre-alpine + +# 设置工作目录 +WORKDIR /app # 设置维护者信息 LABEL maintainer="digital-archive-team" -# 添加Alpine国内镜像源 -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \ - sed -i 's/https\:\/\/dl-cdn.alpinelinux.org/https:\/\/mirrors.aliyun.com/g' /etc/apk/repositories +# 使用阿里云Alpine镜像源 +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories -# 更新包索引并安装必要的系统依赖和Tesseract OCR -RUN apk update && \ +# 更新包索引并安装基础包(包含字体支持) +RUN apk update --no-cache && \ apk add --no-cache \ - tesseract \ - tesseract-data-chi_sim \ - tesseract-data-chi_tra \ - tesseract-data-eng \ - tesseract-ocr \ - tini \ - curl \ - bash \ + ca-certificates \ + curl \ + bash \ + tini \ + fontconfig \ + ttf-dejavu \ + ttf-liberation \ + ttf-droid \ + ttf-freefont \ && rm -rf /var/cache/apk/* # 设置环境变量 -ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" +ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true" ENV SPRING_PROFILES_ACTIVE=prod # 创建应用用户和目录 @@ -58,6 +122,7 @@ RUN addgroup -g 1001 app \ && 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 @@ -65,14 +130,17 @@ RUN addgroup -g 1001 app \ WORKDIR /app # 从构建阶段复制jar文件 -COPY --from=builder /build/target/point-strategy-*.jar app.jar +COPY --from=builder /build/app.jar app.jar -# 复制配置文件(如果需要覆盖默认配置) -# COPY application-prod.yml application-prod.yml +# 验证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 diff --git a/Dockerfile.backup b/Dockerfile.backup new file mode 100644 index 0000000..830eba1 --- /dev/null +++ b/Dockerfile.backup @@ -0,0 +1,87 @@ +# ===== 构建阶段 ===== +# 使用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 + +# 设置维护者信息 +LABEL maintainer="digital-archive-team" + +# 添加Alpine国内镜像源 +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \ + sed -i 's/https\:\/\/dl-cdn.alpinelinux.org/https:\/\/mirrors.aliyun.com/g' /etc/apk/repositories + +# 更新包索引并安装必要的系统依赖和Tesseract OCR +RUN apk update && \ + apk add --no-cache \ + tesseract \ + tesseract-data-chi_sim \ + tesseract-data-chi_tra \ + tesseract-data-eng \ + tesseract-ocr \ + tini \ + curl \ + bash \ + && rm -rf /var/cache/apk/* + +# 设置环境变量 +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/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/Dockerfile.fast b/Dockerfile.fast deleted file mode 100644 index cf5bb60..0000000 --- a/Dockerfile.fast +++ /dev/null @@ -1,161 +0,0 @@ -# ===== 构建阶段 ===== -# 使用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 . - -# 复制本地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 文件 ===" && \ - ls -la /build/target/point-strategy-*.jar /build/target/*.jar 2>/dev/null || echo "未找到预期的 JAR 文件" && \ - echo "=== 复制正确的 JAR 文件 ===" && \ - cp /build/target/*.jar /build/app.jar && \ - ls -la /build/app.jar && \ - echo "JAR 文件大小: $(du -h /build/app.jar | cut -f1)" - -# ===== 运行阶段 ===== -# 使用更小的Alpine镜像 -FROM openjdk:8-jre-alpine AS runtime - -# 设置工作目录 -WORKDIR /app - -# 设置维护者信息 -LABEL maintainer="digital-archive-team" - -# 使用阿里云镜像源(最快) -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories - -# 一次性安装必需包(包含字体支持) -RUN apk update --no-cache && \ - apk add --no-cache \ - ca-certificates \ - curl \ - tini \ - fontconfig \ - ttf-dejavu \ - ttf-liberation \ - ttf-droid \ - ttf-freefont \ - && rm -rf /var/cache/apk/* - -# 跳过bash和tesseract安装,减少镜像大小和构建时间 -# 如需要bash,可以在运行时通过docker exec进入 - -# 设置环境变量 -ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true" -ENV SPRING_PROFILES_ACTIVE=prod -ENV FONTCONFIG_PATH=/etc/fonts -ENV FC_DEBUG=1 - -# 创建应用用户和目录 -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/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作为init进程 -ENTRYPOINT ["/sbin/tini", "--"] - -# 启动应用 -CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] \ No newline at end of file diff --git a/Dockerfile.stable b/Dockerfile.stable deleted file mode 100644 index 3a3565d..0000000 --- a/Dockerfile.stable +++ /dev/null @@ -1,189 +0,0 @@ -# ===== 构建阶段 ===== -# 使用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 . - -# 复制本地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 - -# 跳过dependency:go-offline,直接构建(system scope依赖无法预下载) -# 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 -e - -# 检查构建结果 -RUN echo "=== 检查构建结果 ===" && \ - ls -la /build/target/ && \ - echo "=== 查找所有 JAR 文件 ===" && \ - find /build/target -name "*.jar" -type f && \ - echo "=== 查找原始 JAR 文件 ===" && \ - ls -la /build/target/point-strategy-*.jar /build/target/*.jar 2>/dev/null || echo "未找到预期的 JAR 文件" && \ - echo "=== 复制正确的 JAR 文件 ===" && \ - cp /build/target/*.jar /build/app.jar && \ - ls -la /build/app.jar && \ - echo "JAR 文件大小: $(du -h /build/app.jar | cut -f1)" - -# 显示JAR文件信息 -RUN echo "JAR 文件详情:" && ls -lh /build/target/point-strategy*.jar && echo "文件大小: $(du -h /build/target/point-strategy*.jar | cut -f1)" - -# ===== 运行阶段 ===== -# 使用OpenJDK 8作为基础镜像 -FROM openjdk:8-jre-alpine AS runtime - -# 设置工作目录 -WORKDIR /app - -# 设置维护者信息 -LABEL maintainer="digital-archive-team" - -# 配置阿里云Alpine镜像源(最快) -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \ - sed -i 's/https/http/g' /etc/apk/repositories - -# 更新包索引(使用国内镜像) -RUN apk update --no-cache - -# 一次性安装所有基础包(包含字体支持) -RUN apk add --no-cache \ - ca-certificates \ - curl \ - bash \ - tini \ - fontconfig \ - ttf-dejavu \ - ttf-liberation \ - ttf-droid \ - ttf-freefont \ - && rm -rf /var/cache/apk/* - -# Tesseract OCR 安装(完全独立,失败不影响主应用) -# 使用清华镜像源作为备选 -RUN ( \ - echo "http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/main" > /etc/apk/repositories && \ - echo "http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/community" >> /etc/apk/repositories && \ - apk update --no-cache && \ - apk add --no-cache tesseract tesseract-ocr \ - ) 2>/dev/null || ( \ - echo "Tesseract installation failed - will use OCR service fallback" && \ - 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 -Djava.awt.headless=true" -ENV SPRING_PROFILES_ACTIVE=prod -ENV FONTCONFIG_PATH=/etc/fonts -ENV FC_DEBUG=1 - -# 创建应用用户和目录 -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/app.jar app.jar - -# 验证JAR文件是否正确复制 -RUN ls -la app.jar && echo "JAR 文件大小: $(du -h app.jar | cut -f1)" - -# 复制配置文件(如果需要覆盖默认配置) -# COPY application-prod.yml application-prod.yml - -# 切换到非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作为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 6ae0b32..bd55164 100755 --- a/archive-manager.sh +++ b/archive-manager.sh @@ -16,8 +16,7 @@ NC='\033[0m' # No Color PROJECT_NAME="digital-archive" VERSION="latest" DEFAULT_DEPLOY_DIR="/root/server/archive" -DOCKERFILE="Dockerfile.stable" -FAST_BUILD=false +DOCKERFILE="Dockerfile" VERBOSE=false # 显示横幅 @@ -39,7 +38,6 @@ show_help() { echo "" echo -e "${BLUE}命令:${NC}" echo " build 构建Docker镜像" - echo " build --fast 快速构建镜像(跳过Tesseract)" echo " deploy 部署应用到指定目录" echo " check 检查环境配置" echo " start 启动服务" @@ -60,8 +58,7 @@ show_help() { echo " 部署目录 目标部署目录 (默认: ${DEFAULT_DEPLOY_DIR})" echo "" echo -e "${YELLOW}示例:${NC}" - echo " $0 build # 完整构建镜像" - echo " $0 build -f # 快速构建镜像(跳过Tesseract)" + echo " $0 build # 构建镜像" echo " $0 deploy /opt/myapp # 部署到指定目录" echo " $0 check # 检查环境" echo " $0 start # 启动服务" @@ -127,17 +124,6 @@ build_image() { # 检查必需文件 check_scripts - # 选择构建类型 - if [ "$FAST_BUILD" = true ]; then - DOCKERFILE="Dockerfile.fast" - VERSION="fast" - log_info "使用快速构建模式 (跳过Tesseract,预计3-5分钟)" - else - DOCKERFILE="Dockerfile.stable" - VERSION="stable" - log_info "使用完整构建模式 (包含所有功能,预计10-15分钟)" - fi - # 构建镜像 docker build -f ${DOCKERFILE} -t ${PROJECT_NAME}:${VERSION} . @@ -197,43 +183,12 @@ deploy_app() { log_info "部署应用到: $deploy_dir" - # 自动检测可用的镜像版本 - local fast_image=$(docker images "${PROJECT_NAME}:fast" --format "{{.Repository}}:{{.Tag}}" | head -1) - local stable_image=$(docker images "${PROJECT_NAME}:stable" --format "{{.Repository}}:{{.Tag}}" | head -1) - - if [ "$FAST_BUILD" = true ] && [ -n "$fast_image" ]; then - VERSION="fast" - log_info "使用快速构建版本: ${PROJECT_NAME}:fast" - elif [ -n "$stable_image" ]; then - VERSION="stable" - log_info "使用完整构建版本: ${PROJECT_NAME}:stable" - elif [ -n "$fast_image" ]; then - VERSION="fast" - log_info "找到快速版本,使用: ${PROJECT_NAME}:fast" - else - log_error "未找到任何可用的镜像" - log_error "请先构建镜像: $0 build" + # 检查镜像 + if ! docker images | grep -q "${PROJECT_NAME}:${VERSION}"; then + log_error "镜像 ${PROJECT_NAME}:${VERSION} 不存在,请先构建: $0 build" exit 1 fi - # 检查镜像 - 更可靠的检测方式 - local image_exists=$(docker images "${PROJECT_NAME}:${VERSION}" --format "{{.Repository}}:{{.Tag}}" | head -1) - if [ -z "$image_exists" ]; then - log_error "镜像 ${PROJECT_NAME}:${VERSION} 不存在" - log_error "请先构建镜像:" - if [ "$VERSION" = "fast" ]; then - log_error " $0 build -f" - else - log_error " $0 build" - fi - echo - log_info "可用的镜像列表:" - docker images "${PROJECT_NAME}*" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>/dev/null || echo " 无可用镜像" - exit 1 - else - log_success "找到镜像: $image_exists" - fi - # 创建部署目录 mkdir -p "$deploy_dir"/{data/{upload,temp,unzip,images,reports,elasticsearch},logs,nginx} @@ -580,10 +535,6 @@ main() { VERBOSE=true shift ;; - -f|--fast) - FAST_BUILD=true - shift - ;; --force) FORCE=true shift diff --git a/check-images.sh b/check-images.sh deleted file mode 100755 index ba5024d..0000000 --- a/check-images.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -echo "=== 镜像检测测试 ===" -echo - -# 检查 digital-archive 镜像 -echo "🔍 检查可用的 digital-archive 镜像:" -docker images "digital-archive*" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}" || echo "❌ 未找到任何 digital-archive 镜像" - -echo -echo "🧪 测试镜像检测逻辑:" - -# 测试 stable 镜像 -stable_image=$(docker images "digital-archive:stable" --format "{{.Repository}}:{{.Tag}}" | head -1) -if [ -n "$stable_image" ]; then - echo "✅ 找到 stable 镜像: $stable_image" -else - echo "❌ 未找到 stable 镜像" -fi - -# 测试 fast 镜像 -fast_image=$(docker images "digital-archive:fast" --format "{{.Repository}}:{{.Tag}}" | head -1) -if [ -n "$fast_image" ]; then - echo "✅ 找到 fast 镜像: $fast_image" -else - echo "❌ 未找到 fast 镜像" -fi - -echo -echo "📋 推荐操作:" -if [ -n "$stable_image" ]; then - echo " ./archive-manager.sh deploy # 使用 stable 版本" -fi -if [ -n "$fast_image" ]; then - echo " ./archive-manager.sh deploy -f # 使用 fast 版本" -fi -if [ -z "$stable_image" ] && [ -z "$fast_image" ]; then - echo " ./archive-manager.sh build # 构建镜像" - echo " ./archive-manager.sh build -f # 快速构建" -fi - -echo -echo "=== 测试完成 ===" \ No newline at end of file diff --git a/quick-build.sh b/quick-build.sh deleted file mode 100755 index 580b154..0000000 --- a/quick-build.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# 快速构建脚本 -echo "🚀 快速构建数字档案系统..." -echo "跳过Tesseract安装,预计3-5分钟完成" -echo - -# 使用 archive-manager.sh 的快速构建模式 -./archive-manager.sh build -f - -if [ $? -eq 0 ]; then - echo - echo "✅ 快速构建完成!" - echo "镜像标签: digital-archive:fast" - echo - echo "📋 可用命令:" - echo " ./archive-manager.sh deploy -f # 快速部署" - echo " docker run -p 9081:9081 digital-archive:fast # 直接运行" -else - echo - echo "❌ 快速构建失败" - echo "请检查错误信息或使用完整构建: ./archive-manager.sh build" -fi \ No newline at end of file diff --git a/quick-deploy.sh b/quick-deploy.sh deleted file mode 100755 index 504cba1..0000000 --- a/quick-deploy.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# 快速部署脚本 -echo "🚀 快速部署数字档案系统..." -echo "使用快速构建版本 (digital-archive:fast)" -echo - -# 使用 archive-manager.sh 的快速部署模式 -./archive-manager.sh deploy -f - -if [ $? -eq 0 ]; then - echo - echo "✅ 快速部署完成!" - echo - echo "📋 下一步操作:" - echo " ./archive-manager.sh start -f # 启动服务" - echo " ./archive-manager.sh logs # 查看日志" - echo " ./archive-manager.sh status # 检查状态" - echo - echo "🌐 访问地址:" - echo " http://localhost:9081/point-strategy" - echo " http://localhost:9081/point-strategy/swagger-ui.html" -else - echo - echo "❌ 快速部署失败" - echo "请检查错误信息或先构建镜像: ./quick-build.sh" -fi \ No newline at end of file diff --git a/test-docker-build.sh b/test-docker-build.sh deleted file mode 100755 index 5b50d86..0000000 --- a/test-docker-build.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash - -echo "=== Docker Build Test Script ===" -echo "Choose build type:" -echo "1. Fast build (skip Tesseract, ~3-5 minutes)" -echo "2. Full build (include all features, ~10-15 minutes)" -echo -read -p "Enter choice (1 or 2, default=1): " choice - -# 默认选择快速构建 -if [ -z "$choice" ]; then - choice=1 -fi - -if [ "$choice" = "1" ]; then - DOCKERFILE="Dockerfile.fast" - TAG="digital-archive:fast" - echo "🚀 Using fast build (Dockerfile.fast)" -else - DOCKERFILE="Dockerfile.stable" - TAG="digital-archive:stable" - echo "🔧 Using full build (Dockerfile.stable)" -fi - -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 "Using $DOCKERFILE, tag: $TAG" -echo "This may take several minutes..." - -if docker build -f $DOCKERFILE -t $TAG .; then - echo - echo "✅ Build successful!" - echo - echo "📋 Image details:" - docker images $TAG - - echo - echo "🧪 Testing container startup..." - - # 测试容器启动 - if docker run --rm --name test-container $TAG java -version; then - echo "✅ Container test successful!" - else - echo "❌ Container test failed" - fi - - # 清理测试镜像 - echo - echo "🧹 Cleaning up test image..." - docker rmi $TAG - -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. Verify src/main/lib/ directory contains all required JAR files" - echo "5. Try running with --no-cache flag:" - if [ "$choice" = "1" ]; then - echo " docker build --no-cache -f Dockerfile.fast -t digital-archive:fast ." - else - echo " docker build --no-cache -f Dockerfile.stable -t digital-archive:stable ." - fi - echo - echo "📋 Checking required files..." - if [ -f "pom.xml" ]; then - echo "✓ pom.xml found" - else - echo "❌ pom.xml missing" - fi - - if [ -f "settings.xml" ]; then - echo "✓ settings.xml found" - else - echo "❌ settings.xml missing" - fi - - if [ -d "src/main/lib" ]; then - echo "✓ src/main/lib directory found" - echo " JAR files in lib:" - ls -la src/main/lib/*.jar 2>/dev/null || echo " No JAR files found" - else - echo "❌ src/main/lib directory missing" - fi -fi - -echo -echo "=== Test completed ===" \ No newline at end of file