From bd0fc6a284f9e97a262f44c1494df4202abd87da Mon Sep 17 00:00:00 2001 From: aipper Date: Sat, 1 Nov 2025 17:19:40 +0800 Subject: [PATCH] test --- Dockerfile.fast | 11 ++++- Dockerfile.stable | 11 ++++- check-fonts.sh | 50 ++++++++++++++++++++ fix-compose-yaml.sh | 111 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 179 insertions(+), 4 deletions(-) create mode 100755 check-fonts.sh create mode 100755 fix-compose-yaml.sh diff --git a/Dockerfile.fast b/Dockerfile.fast index 810198d..cf5bb60 100644 --- a/Dockerfile.fast +++ b/Dockerfile.fast @@ -98,20 +98,27 @@ 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" +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 \ diff --git a/Dockerfile.stable b/Dockerfile.stable index 34cd977..3a3565d 100644 --- a/Dockerfile.stable +++ b/Dockerfile.stable @@ -108,12 +108,17 @@ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/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 安装(完全独立,失败不影响主应用) @@ -135,8 +140,10 @@ 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 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 \ diff --git a/check-fonts.sh b/check-fonts.sh new file mode 100755 index 0000000..fa702cd --- /dev/null +++ b/check-fonts.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo "=== 字体配置检查脚本 ===" +echo + +CONTAINER_NAME="digital-archive-app" + +# 检查容器是否运行 +if ! docker ps | grep -q "$CONTAINER_NAME"; then + echo "❌ 容器 $CONTAINER_NAME 未运行" + echo "请先启动容器: ./archive-manager.sh start" + exit 1 +fi + +echo "✓ 找到运行中的容器: $CONTAINER_NAME" + +echo +echo "🔍 检查字体配置:" + +# 检查字体目录 +echo "1. 字体目录:" +docker exec "$CONTAINER_NAME" ls -la /usr/share/fonts/ 2>/dev/null || echo " 字体目录不存在" + +# 检查字体配置 +echo +echo "2. 字体配置:" +docker exec "$CONTAINER_NAME" ls -la /etc/fonts/ 2>/dev/null || echo " 字体配置目录不存在" + +# 检查可用字体 +echo +echo "3. 可用字体:" +docker exec "$CONTAINER_NAME" fc-list | head -10 2>/dev/null || echo " 无法获取字体列表" + +# 检查 Java 字体环境 +echo +echo "4. Java 字体环境:" +docker exec "$CONTAINER_NAME" java -Djava.awt.headless=true -cp . -c "import java.awt.GraphicsEnvironment; import java.awt.Font; System.out.println(\"Available fonts: \" + GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames().length); System.out.println(\"Headless: \" + GraphicsEnvironment.isHeadless());" 2>/dev/null || echo " 无法检查 Java 字体环境" + +echo +echo "🧪 测试字体渲染:" +docker exec "$CONTAINER_NAME" sh -c "echo '测试字体' | fc-match -v 2>/dev/null || echo '字体匹配失败'" + +echo +echo "💡 如果字体问题持续,可以尝试:" +echo "1. 重新构建镜像(包含字体包)" +echo "2. 添加中文字体支持" +echo "3. 设置 JAVA_OPTS 包含 -Djava.awt.headless=true" + +echo +echo "=== 检查完成 ===" \ No newline at end of file diff --git a/fix-compose-yaml.sh b/fix-compose-yaml.sh new file mode 100755 index 0000000..865c253 --- /dev/null +++ b/fix-compose-yaml.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +echo "=== 直接修复 docker-compose.yml ===" +echo + +DEPLOY_DIR="/root/server/archive" +COMPOSE_FILE="$DEPLOY_DIR/docker-compose.yml" + +if [ ! -f "$COMPOSE_FILE" ]; then + echo "❌ docker-compose.yml 文件不存在" + echo "正在重新部署..." + ./archive-manager.sh deploy -f + exit 0 +fi + +echo "📋 当前文件内容(前20行):" +head -20 "$COMPOSE_FILE" + +echo +echo "🔧 重新生成正确的 docker-compose.yml..." + +# 备份原文件 +cp "$COMPOSE_FILE" "$COMPOSE_FILE.backup" + +# 生成正确的 docker-compose.yml +cat > "$COMPOSE_FILE" << 'EOF' +version: '3.8' + +services: + # 主应用服务 + app: + image: digital-archive:fast + container_name: digital-archive-app + ports: + - "9081:9081" + volumes: + - ./data/upload:/app/data/upload + - ./data/temp:/app/data/temp + - ./data/unzip:/app/data/unzip + - ./data/images:/app/data/images + - ./data/reports:/app/data/reports + - ./logs:/app/logs + environment: + - SPRING_PROFILES_ACTIVE=prod + - SERVER_PORT=9081 + - DB_HOST=mysql + - DB_PORT=3306 + - DB_NAME=enterprise_digital_archives + - DB_USERNAME=root + - DB_PASSWORD=Abc@123456 + - DB_DRIVER=com.mysql.cj.jdbc.Driver + - REDIS_HOST=redis + - REDIS_PORT=6379 + - REDIS_PASSWORD=Abc123456 + - ELASTICSEARCH_HOST=es + - ELASTICSEARCH_PORT=9200 + - ELASTICSEARCH_SCHEME=http + - TESS_PATH=/usr/bin/tesseract + - SWAGGER_SHOW=false + - LOG_ROOT_LEVEL=info + - LOG_APP_LEVEL=info + networks: + - proxy + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9081/point-strategy/actuator/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + +# Elasticsearch - 使用已有的 "es" 容器 + # 注意:确保已有的 "es" 容器已连接到 proxy 网络 + +networks: + proxy: + external: true +EOF + +echo "✅ docker-compose.yml 已重新生成" + +echo +echo "🧪 测试新配置..." + +# 检测 Docker Compose 命令类型 +if docker compose version &> /dev/null; then + COMPOSE_CMD="docker compose" +else + COMPOSE_CMD="docker-compose" +fi + +echo "使用命令: $COMPOSE_CMD" + +# 验证配置 +if $COMPOSE_CMD -f "$COMPOSE_FILE" config --quiet 2>/dev/null; then + echo "✅ 配置验证成功" +else + echo "❌ 配置验证失败,显示错误:" + $COMPOSE_CMD -f "$COMPOSE_FILE" config + echo + echo "恢复备份文件..." + mv "$COMPOSE_FILE.backup" "$COMPOSE_FILE" + exit 1 +fi + +echo +echo "🚀 现在可以启动服务:" +echo " ./archive-manager.sh start" +echo +echo "或直接使用:" +echo " cd $DEPLOY_DIR && $COMPOSE_CMD up -d" \ No newline at end of file