docker compose
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run
Typos Check / Spell Check with Typos (push) Waiting to run

This commit is contained in:
朱潮 2025-08-25 11:12:20 +08:00
parent 70249c9a81
commit 253bc530f3
4 changed files with 211 additions and 86 deletions

3
.gitignore vendored
View File

@ -186,4 +186,5 @@ poetry.lock
uv.lock
apps/models_provider/impl/*/icon/
tmp/
config.yml
config.yml
resources

View File

@ -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
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
# 使用镜像默认的启动命令

View File

@ -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:

138
start-docker.sh Executable file
View File

@ -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 "启动脚本执行完成!"