140 lines
4.3 KiB
Bash
Executable File
140 lines
4.3 KiB
Bash
Executable File
#!/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 "构建脚本执行完成!"
|