diff --git a/.gitignore b/.gitignore index 5d55ecd9..8d6edcb8 100644 --- a/.gitignore +++ b/.gitignore @@ -186,4 +186,5 @@ poetry.lock uv.lock apps/models_provider/impl/*/icon/ tmp/ -config.yml \ No newline at end of file +config.yml +resources diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml index e9b20b02..6e0b8add 100644 --- a/dev/docker-compose.yml +++ b/dev/docker-compose.yml @@ -1,78 +1,63 @@ +# 最简化的开发环境配置 - 使用单容器模式 version: '3.8' services: - maxkb-dev: - # 使用生产镜像或本地构建的镜像 + maxkb: + # 使用官方镜像 image: maxkb-local:latest - # 如果需要本地构建,取消下面两行注释 - # build: - # context: ../ - # dockerfile: installer/Dockerfile container_name: maxkb-dev ports: - "8080:8080" volumes: - # 挂载Python源码实现热重载 - - ../apps:/opt/maxkb-app/apps - - ../main.py:/opt/maxkb-app/main.py - - ../installer/maxkb.py:/opt/maxkb-app/maxkb.py - - # 挂载UI源码(用于前端开发) - - ../ui/src:/opt/maxkb-app/ui/src - - ../ui/public:/opt/maxkb-app/ui/public - - # 持久化数据 - - maxkb_data:/opt/maxkb/data - - # 开发配置 - - ./dev.env:/opt/maxkb-app/.env + # 挂载Python源码 - 实现后端热重载 + - ../apps:/opt/maxkb-app/apps:rw + - ../main.py:/opt/maxkb-app/main.py:rw + - ../tmp:/tmp + # 数据持久化 + - ~/.maxkb:/opt/maxkb + environment: - # 开发环境变量 + # 开启调试模式 DJANGO_DEBUG: "True" PYTHONUNBUFFERED: "1" MAXKB_LOG_LEVEL: "DEBUG" - # 数据库配置(使用内置的PostgreSQL) - MAXKB_DB_HOST: "127.0.0.1" - MAXKB_DB_PORT: "5432" - MAXKB_DB_NAME: "maxkb" - MAXKB_DB_USER: "root" - MAXKB_DB_PASSWORD: "Password123@postgres" + # MinerU 配置 + MINERU_PARSER_CACHE: "True" + MINERU_MULTIMODAL_REFINEMENT: "True" + # MinerU 图片存储路径 + MAXKB_STORAGE_PATH: "/opt/maxkb/storage" - # Redis配置(使用内置的Redis) - MAXKB_REDIS_HOST: "127.0.0.1" - MAXKB_REDIS_PORT: "6379" - MAXKB_REDIS_PASSWORD: "Password123@redis" - # 使用默认的启动命令,让容器内的所有服务正常启动 - # command 留空使用镜像默认的 entrypoint - networks: - - maxkb-network - - # 独立的前端开发服务器(可选) - frontend-dev: - image: node:20-alpine - container_name: maxkb-frontend-dev - working_dir: /app - volumes: - - ../ui:/app - - /app/node_modules # 防止覆盖node_modules - ports: - - "5173:5173" # Vite开发服务器 - - "5174:5174" # Chat界面开发服务器 - environment: - - VITE_APP_BASE_URL=http://localhost:8080 - command: > - sh -c " - npm config set registry https://registry.npmmirror.com && - npm install && - npm run dev - " - networks: - - maxkb-network - -volumes: - maxkb_data: - -networks: - maxkb-network: - driver: bridge \ No newline at end of file + MINERU_API_TYPE: "self_hosted" + MINERU_API_URL: "http://mineru:8000" + + # MINERU_API_TYPE: "cloud" + # MINERU_API_URL: "https://mineru.net" + # MINERU_API_KEY: "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI2OTYwMDEwNiIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc1NTE2MzQ5OCwiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiIiwib3BlbklkIjpudWxsLCJ1dWlkIjoiYTQwODk5NjMtNDI1OS00MWM3LWE3NWItY2IzZTQ4NTRjYWIwIiwiZW1haWwiOiIiLCJleHAiOjE3NTYzNzMwOTh9.88m9JSKQhkwJ557jCTFOgmdjeAfpXzxy2QDINaJ0rfHfnMNBxQt47aHr2jABeuxW-fXm8S5AO7zWWTXEGx8BxA" + + # 配置队列大小 + MINERU_QUEUE_SIZE: "50" + # 配置处理超时时间(秒) + MINERU_PROCESSING_TIMEOUT: "7200" + # 配置各线程数量(支持多线程) + MINERU_PARSER_THREADS: "1" + MINERU_REFINER_THREADS: "3" + MINERU_RECOGNIZER_THREADS: "3" + MINERU_UPLOADER_THREADS: "1" + + MINERU_BATCH_PROCESSING: "true" + MINERU_BATCH_SIZE: "10" + # 启用/禁用过滤 + MINERU_SKIP_SMALL_IMAGES: "true" + # 每页最多图片数 + MINERU_MAX_IMAGES_PER_PAGE: "10" + # 文档最多图片数 + MINERU_MAX_IMAGES_PER_DOCUMENT: "200" + # 最小图片尺寸(像素) + MINERU_MIN_IMAGE_SIZE: "10000" + # 最大图片尺寸(像素) + MINERU_MAX_IMAGE_SIZE: "10000000" + # 过滤无意义图片 + MINERU_FILTER_MEANINGLESS: "true" + restart: unless-stopped + # 使用镜像默认的启动命令 diff --git a/dev/docker-compose-simple.yml b/installer/docker-compose.yml similarity index 52% rename from dev/docker-compose-simple.yml rename to installer/docker-compose.yml index 685e57fa..a2e032ef 100644 --- a/dev/docker-compose-simple.yml +++ b/installer/docker-compose.yml @@ -1,25 +1,20 @@ -# 最简化的开发环境配置 - 使用单容器模式 version: '3.8' services: - maxkb: - # 使用官方镜像 - image: maxkb-local:latest + maxkb-dev: + # 如果需要本地构建,取消下面两行注释 + build: + context: ../ + dockerfile: installer/Dockerfile container_name: maxkb-dev ports: - - "8080:8080" + - "2008:8080" volumes: - # 挂载Python源码 - 实现后端热重载 - - ../apps:/opt/maxkb-app/apps:rw - - ../main.py:/opt/maxkb-app/main.py:rw - - ../tmp:/tmp - # 数据持久化 - - ~/.maxkb:/opt/maxkb - # MinerU图片存储目录持久化 - - ~/.maxkb/storage:/opt/maxkb/storage:rw + # 持久化数据 + - ~/.maxkb:/opt/maxkb/ + - /tmp/maxkb:/tmp environment: # 开启调试模式 - DJANGO_DEBUG: "True" PYTHONUNBUFFERED: "1" MAXKB_LOG_LEVEL: "DEBUG" @@ -29,12 +24,12 @@ services: # MinerU 图片存储路径 MAXKB_STORAGE_PATH: "/opt/maxkb/storage" - MINERU_API_TYPE: "self_hosted" - MINERU_API_URL: "http://mineru:8000" + #MINERU_API_TYPE: "self_hosted" + #MINERU_API_URL: "http://mineru:8000" - # MINERU_API_TYPE: "cloud" - # MINERU_API_URL: "https://mineru.net" - # MINERU_API_KEY: "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI2OTYwMDEwNiIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc1NTE2MzQ5OCwiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiIiwib3BlbklkIjpudWxsLCJ1dWlkIjoiYTQwODk5NjMtNDI1OS00MWM3LWE3NWItY2IzZTQ4NTRjYWIwIiwiZW1haWwiOiIiLCJleHAiOjE3NTYzNzMwOTh9.88m9JSKQhkwJ557jCTFOgmdjeAfpXzxy2QDINaJ0rfHfnMNBxQt47aHr2jABeuxW-fXm8S5AO7zWWTXEGx8BxA" + MINERU_API_TYPE: "cloud" + MINERU_API_URL: "https://mineru.net" + MINERU_API_KEY: "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI2OTYwMDEwNiIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc1NTE2MzQ5OCwiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiIiwib3BlbklkIjpudWxsLCJ1dWlkIjoiYTQwODk5NjMtNDI1OS00MWM3LWE3NWItY2IzZTQ4NTRjYWIwIiwiZW1haWwiOiIiLCJleHAiOjE3NTYzNzMwOTh9.88m9JSKQhkwJ557jCTFOgmdjeAfpXzxy2QDINaJ0rfHfnMNBxQt47aHr2jABeuxW-fXm8S5AO7zWWTXEGx8BxA" # 配置队列大小 MINERU_QUEUE_SIZE: "50" @@ -60,5 +55,11 @@ services: MINERU_MAX_IMAGE_SIZE: "10000000" # 过滤无意义图片 MINERU_FILTER_MEANINGLESS: "true" - restart: unless-stopped - # 使用镜像默认的启动命令 + # 使用默认的启动命令,让容器内的所有服务正常启动 + # command 留空使用镜像默认的 entrypoint + + +# 如果使用绑定挂载,可以删除这个 volumes 部分 +# volumes: +# maxkb_data: +# maxkb_tmp: diff --git a/start-docker.sh b/start-docker.sh new file mode 100755 index 00000000..a06a12cd --- /dev/null +++ b/start-docker.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +# Docker 容器启动脚本 +# 使用 installer/docker-compose.yml 启动 MaxKB 容器 + +set -e + +echo "==========================================" +echo "MaxKB Docker 容器启动脚本" +echo "==========================================" + +# 设置构建参数 +BUILD_AT=$(date -u +"%Y-%m-%d %H:%M:%S UTC") +GITHUB_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") + +echo "" +echo "启动参数:" +echo " - 配置文件: installer/docker-compose.yml" +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 "检查 Docker 镜像..." +if ! docker images | grep -q "maxkb-installer-maxkb-dev"; then + echo "镜像不存在,需要先构建镜像..." + echo "正在构建 Docker 镜像,这可能需要几分钟时间..." + cd installer + docker-compose build + cd .. + if [ $? -ne 0 ]; then + echo "错误: Docker 镜像构建失败" + exit 1 + fi + echo "✓ Docker 镜像构建成功" +else + echo "✓ Docker 镜像已存在" +fi + +# 停止并删除旧容器(如果存在) +echo "" +echo "检查现有容器..." +if docker ps -a | grep -q maxkb-dev; then + echo "发现旧容器,正在停止..." + cd installer + docker-compose down + cd .. + echo "✓ 旧容器已停止并删除" +fi + +# 启动容器 +echo "" +echo "启动 MaxKB 容器..." +cd installer +docker-compose up -d + +# 检查启动结果 +if [ $? -eq 0 ]; then + cd .. + echo "" + echo "==========================================" + echo "✓ MaxKB 容器启动成功!" + echo "==========================================" + echo "" + echo "容器信息:" + docker ps | grep maxkb-dev + echo "" + echo "服务访问地址:" + echo " http://localhost:2008" + echo "" + echo "查看日志:" + echo " cd installer && docker-compose logs -f" + echo "" + echo "停止容器:" + echo " cd installer && docker-compose down" + echo "" + echo "重启容器:" + echo " cd installer && docker-compose restart" + echo "" +else + cd .. + echo "" + echo "==========================================" + echo "✗ 容器启动失败" + echo "==========================================" + echo "请检查错误信息并重试" + exit 1 +fi + +echo "启动脚本执行完成!" \ No newline at end of file