test
This commit is contained in:
@@ -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 sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
# 一次性安装最小必需包
|
# 一次性安装必需包(包含字体支持)
|
||||||
RUN apk update --no-cache && \
|
RUN apk update --no-cache && \
|
||||||
apk add --no-cache \
|
apk add --no-cache \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
curl \
|
curl \
|
||||||
tini \
|
tini \
|
||||||
|
fontconfig \
|
||||||
|
ttf-dejavu \
|
||||||
|
ttf-liberation \
|
||||||
|
ttf-droid \
|
||||||
|
ttf-freefont \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
# 跳过bash和tesseract安装,减少镜像大小和构建时间
|
# 跳过bash和tesseract安装,减少镜像大小和构建时间
|
||||||
# 如需要bash,可以在运行时通过docker exec进入
|
# 如需要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 SPRING_PROFILES_ACTIVE=prod
|
||||||
|
ENV FONTCONFIG_PATH=/etc/fonts
|
||||||
|
ENV FC_DEBUG=1
|
||||||
|
|
||||||
# 创建应用用户和目录
|
# 创建应用用户和目录
|
||||||
RUN addgroup -g 1001 app \
|
RUN addgroup -g 1001 app \
|
||||||
|
|||||||
@@ -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 update --no-cache
|
||||||
|
|
||||||
# 一次性安装所有基础包(减少层数和下载次数)
|
# 一次性安装所有基础包(包含字体支持)
|
||||||
RUN apk add --no-cache \
|
RUN apk add --no-cache \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
curl \
|
curl \
|
||||||
bash \
|
bash \
|
||||||
tini \
|
tini \
|
||||||
|
fontconfig \
|
||||||
|
ttf-dejavu \
|
||||||
|
ttf-liberation \
|
||||||
|
ttf-droid \
|
||||||
|
ttf-freefont \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
# Tesseract OCR 安装(完全独立,失败不影响主应用)
|
# Tesseract OCR 安装(完全独立,失败不影响主应用)
|
||||||
@@ -135,8 +140,10 @@ RUN rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
|||||||
RUN curl --version && echo "✓ Core components verified"
|
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 SPRING_PROFILES_ACTIVE=prod
|
||||||
|
ENV FONTCONFIG_PATH=/etc/fonts
|
||||||
|
ENV FC_DEBUG=1
|
||||||
|
|
||||||
# 创建应用用户和目录
|
# 创建应用用户和目录
|
||||||
RUN addgroup -g 1001 app \
|
RUN addgroup -g 1001 app \
|
||||||
|
|||||||
50
check-fonts.sh
Executable file
50
check-fonts.sh
Executable file
@@ -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 "=== 检查完成 ==="
|
||||||
111
fix-compose-yaml.sh
Executable file
111
fix-compose-yaml.sh
Executable file
@@ -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"
|
||||||
Reference in New Issue
Block a user