maxkb/rebuild-docker.sh
朱潮 788491db61
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run
Typos Check / Spell Check with Typos (push) Waiting to run
add log
2025-08-27 01:23:26 +08:00

140 lines
4.3 KiB
Bash
Executable File
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.

!/bin/bash
# Docker 镜像重新编译脚本
# 用于构建 MaxKB Docker 镜像(包含 MinerU 集成和本地 LibreOffice
set -e
echo "=========================================="
echo "MaxKB Docker 镜像构建脚本"
echo "=========================================="
# 设置构建参数
DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG:-"dev"}
BUILD_AT=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
GITHUB_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
IMAGE_NAME="maxkb-local"
IMAGE_TAG="latest"
echo ""
echo "构建参数:"
echo " - 镜像名称: ${IMAGE_NAME}:${IMAGE_TAG}"
echo " - Docker标签: ${DOCKER_IMAGE_TAG}"
echo " - 构建时间: ${BUILD_AT}"
echo " - Git提交: ${GITHUB_COMMIT}"
echo ""
# 创建 resources 目录(如果不存在)
if [ ! -d "resources" ]; then
echo "创建 resources 目录..."
mkdir -p resources
fi
# 下载 LibreOffice 资源文件
echo "检查并下载 LibreOffice 资源文件..."
DOWNLOAD_BASE_URL="http://192.168.101.129:5244/d/nas"
FILES=(
"LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_00?sign=aNvKFaEE9QRwTBLP53KgM8Y-22AlXBkb9WsE3CW42-M=:0"
"LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_01?sign=20ZZkcY70olgh18Qdh5VVPWI2xQpzRdBTIkA1DsRw50=:0"
"LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_02?sign=sbEuEP_xKcZS1YnmHkTtuvi-o5KQweWCVmHM3FwHRII=:0"
)
for i in "${!FILES[@]}"; do
FILE_URL="${DOWNLOAD_BASE_URL}/${FILES[$i]}"
FILE_NAME="LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_0${i}"
FILE_PATH="resources/${FILE_NAME}"
if [ ! -f "${FILE_PATH}" ]; then
echo "下载 ${FILE_NAME}..."
curl -L -o "${FILE_PATH}" "${FILE_URL}"
if [ $? -ne 0 ]; then
echo "错误: 下载 ${FILE_NAME} 失败"
exit 1
fi
echo "${FILE_NAME} 下载完成"
else
echo "${FILE_NAME} 已存在,跳过下载"
fi
done
# 验证所有文件是否存在
echo "验证 LibreOffice 资源文件..."
if [ ! -f "resources/LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_00" ] || \
[ ! -f "resources/LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_01" ] || \
[ ! -f "resources/LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_02" ]; then
echo "错误: LibreOffice 资源文件不完整"
echo "请检查 resources/ 目录下是否有以下文件:"
echo " - LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_00"
echo " - LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_01"
echo " - LibreOffice_25.2.3_Linux_x86-64_deb.tar.gz_02"
exit 1
fi
echo "✓ 所有 LibreOffice 资源文件就绪"
# 停止并删除旧容器(如果存在)
echo ""
echo "清理旧容器..."
if docker ps -a | grep -q maxkb-local; then
echo "停止并删除旧的 maxkb-local 容器..."
docker stop maxkb-local 2>/dev/null || true
docker rm maxkb-local 2>/dev/null || true
fi
# 构建 Docker 镜像
echo ""
echo "开始构建 Docker 镜像..."
echo "这可能需要几分钟时间,请耐心等待..."
echo ""
DOCKER_BUILDKIT=1 docker build \
--build-arg DOCKER_IMAGE_TAG="${DOCKER_IMAGE_TAG}" \
--build-arg BUILD_AT="${BUILD_AT}" \
--build-arg GITHUB_COMMIT="${GITHUB_COMMIT}" \
--progress=plain \
--memory=16g \
-t ${IMAGE_NAME}:${IMAGE_TAG} \
-f installer/Dockerfile \
.
# 检查构建结果
if [ $? -eq 0 ]; then
echo ""
echo "=========================================="
echo "✓ Docker 镜像构建成功!"
echo "=========================================="
echo ""
echo "镜像信息:"
docker images | grep ${IMAGE_NAME}
echo ""
echo "您可以使用以下命令运行容器:"
echo ""
echo " docker run -d \\"
echo " --name maxkb-local \\"
echo " -p 8080:8080 \\"
echo " -v maxkb-data:/opt/maxkb \\"
echo " ${IMAGE_NAME}:${IMAGE_TAG}"
echo ""
echo "或使用 docker-compose"
echo " cd dev && docker-compose up -d"
echo ""
else
echo ""
echo "=========================================="
echo "✗ Docker 镜像构建失败"
echo "=========================================="
echo "请检查错误信息并重试"
exit 1
fi
# 清理悬空镜像(可选)
echo "是否清理悬空镜像?(y/n)"
read -r CLEANUP
if [ "$CLEANUP" = "y" ] || [ "$CLEANUP" = "Y" ]; then
echo "清理悬空镜像..."
docker image prune -f
echo "✓ 清理完成"
fi
echo ""
echo "构建脚本执行完成!"