docker compose
This commit is contained in:
parent
70249c9a81
commit
253bc530f3
3
.gitignore
vendored
3
.gitignore
vendored
@ -186,4 +186,5 @@ poetry.lock
|
|||||||
uv.lock
|
uv.lock
|
||||||
apps/models_provider/impl/*/icon/
|
apps/models_provider/impl/*/icon/
|
||||||
tmp/
|
tmp/
|
||||||
config.yml
|
config.yml
|
||||||
|
resources
|
||||||
|
|||||||
@ -1,78 +1,63 @@
|
|||||||
|
# 最简化的开发环境配置 - 使用单容器模式
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
maxkb-dev:
|
maxkb:
|
||||||
# 使用生产镜像或本地构建的镜像
|
# 使用官方镜像
|
||||||
image: maxkb-local:latest
|
image: maxkb-local:latest
|
||||||
# 如果需要本地构建,取消下面两行注释
|
|
||||||
# build:
|
|
||||||
# context: ../
|
|
||||||
# dockerfile: installer/Dockerfile
|
|
||||||
container_name: maxkb-dev
|
container_name: maxkb-dev
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
volumes:
|
volumes:
|
||||||
# 挂载Python源码实现热重载
|
# 挂载Python源码 - 实现后端热重载
|
||||||
- ../apps:/opt/maxkb-app/apps
|
- ../apps:/opt/maxkb-app/apps:rw
|
||||||
- ../main.py:/opt/maxkb-app/main.py
|
- ../main.py:/opt/maxkb-app/main.py:rw
|
||||||
- ../installer/maxkb.py:/opt/maxkb-app/maxkb.py
|
- ../tmp:/tmp
|
||||||
|
# 数据持久化
|
||||||
# 挂载UI源码(用于前端开发)
|
- ~/.maxkb:/opt/maxkb
|
||||||
- ../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
|
|
||||||
environment:
|
environment:
|
||||||
# 开发环境变量
|
# 开启调试模式
|
||||||
DJANGO_DEBUG: "True"
|
DJANGO_DEBUG: "True"
|
||||||
PYTHONUNBUFFERED: "1"
|
PYTHONUNBUFFERED: "1"
|
||||||
MAXKB_LOG_LEVEL: "DEBUG"
|
MAXKB_LOG_LEVEL: "DEBUG"
|
||||||
|
|
||||||
# 数据库配置(使用内置的PostgreSQL)
|
# MinerU 配置
|
||||||
MAXKB_DB_HOST: "127.0.0.1"
|
MINERU_PARSER_CACHE: "True"
|
||||||
MAXKB_DB_PORT: "5432"
|
MINERU_MULTIMODAL_REFINEMENT: "True"
|
||||||
MAXKB_DB_NAME: "maxkb"
|
# MinerU 图片存储路径
|
||||||
MAXKB_DB_USER: "root"
|
MAXKB_STORAGE_PATH: "/opt/maxkb/storage"
|
||||||
MAXKB_DB_PASSWORD: "Password123@postgres"
|
|
||||||
|
|
||||||
# Redis配置(使用内置的Redis)
|
MINERU_API_TYPE: "self_hosted"
|
||||||
MAXKB_REDIS_HOST: "127.0.0.1"
|
MINERU_API_URL: "http://mineru:8000"
|
||||||
MAXKB_REDIS_PORT: "6379"
|
|
||||||
MAXKB_REDIS_PASSWORD: "Password123@redis"
|
# MINERU_API_TYPE: "cloud"
|
||||||
# 使用默认的启动命令,让容器内的所有服务正常启动
|
# MINERU_API_URL: "https://mineru.net"
|
||||||
# command 留空使用镜像默认的 entrypoint
|
# MINERU_API_KEY: "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI2OTYwMDEwNiIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc1NTE2MzQ5OCwiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiIiwib3BlbklkIjpudWxsLCJ1dWlkIjoiYTQwODk5NjMtNDI1OS00MWM3LWE3NWItY2IzZTQ4NTRjYWIwIiwiZW1haWwiOiIiLCJleHAiOjE3NTYzNzMwOTh9.88m9JSKQhkwJ557jCTFOgmdjeAfpXzxy2QDINaJ0rfHfnMNBxQt47aHr2jABeuxW-fXm8S5AO7zWWTXEGx8BxA"
|
||||||
networks:
|
|
||||||
- maxkb-network
|
# 配置队列大小
|
||||||
|
MINERU_QUEUE_SIZE: "50"
|
||||||
# 独立的前端开发服务器(可选)
|
# 配置处理超时时间(秒)
|
||||||
frontend-dev:
|
MINERU_PROCESSING_TIMEOUT: "7200"
|
||||||
image: node:20-alpine
|
# 配置各线程数量(支持多线程)
|
||||||
container_name: maxkb-frontend-dev
|
MINERU_PARSER_THREADS: "1"
|
||||||
working_dir: /app
|
MINERU_REFINER_THREADS: "3"
|
||||||
volumes:
|
MINERU_RECOGNIZER_THREADS: "3"
|
||||||
- ../ui:/app
|
MINERU_UPLOADER_THREADS: "1"
|
||||||
- /app/node_modules # 防止覆盖node_modules
|
|
||||||
ports:
|
MINERU_BATCH_PROCESSING: "true"
|
||||||
- "5173:5173" # Vite开发服务器
|
MINERU_BATCH_SIZE: "10"
|
||||||
- "5174:5174" # Chat界面开发服务器
|
# 启用/禁用过滤
|
||||||
environment:
|
MINERU_SKIP_SMALL_IMAGES: "true"
|
||||||
- VITE_APP_BASE_URL=http://localhost:8080
|
# 每页最多图片数
|
||||||
command: >
|
MINERU_MAX_IMAGES_PER_PAGE: "10"
|
||||||
sh -c "
|
# 文档最多图片数
|
||||||
npm config set registry https://registry.npmmirror.com &&
|
MINERU_MAX_IMAGES_PER_DOCUMENT: "200"
|
||||||
npm install &&
|
# 最小图片尺寸(像素)
|
||||||
npm run dev
|
MINERU_MIN_IMAGE_SIZE: "10000"
|
||||||
"
|
# 最大图片尺寸(像素)
|
||||||
networks:
|
MINERU_MAX_IMAGE_SIZE: "10000000"
|
||||||
- maxkb-network
|
# 过滤无意义图片
|
||||||
|
MINERU_FILTER_MEANINGLESS: "true"
|
||||||
volumes:
|
restart: unless-stopped
|
||||||
maxkb_data:
|
# 使用镜像默认的启动命令
|
||||||
|
|
||||||
networks:
|
|
||||||
maxkb-network:
|
|
||||||
driver: bridge
|
|
||||||
|
|||||||
@ -1,25 +1,20 @@
|
|||||||
# 最简化的开发环境配置 - 使用单容器模式
|
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
maxkb:
|
maxkb-dev:
|
||||||
# 使用官方镜像
|
# 如果需要本地构建,取消下面两行注释
|
||||||
image: maxkb-local:latest
|
build:
|
||||||
|
context: ../
|
||||||
|
dockerfile: installer/Dockerfile
|
||||||
container_name: maxkb-dev
|
container_name: maxkb-dev
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "2008:8080"
|
||||||
volumes:
|
volumes:
|
||||||
# 挂载Python源码 - 实现后端热重载
|
# 持久化数据
|
||||||
- ../apps:/opt/maxkb-app/apps:rw
|
- ~/.maxkb:/opt/maxkb/
|
||||||
- ../main.py:/opt/maxkb-app/main.py:rw
|
- /tmp/maxkb:/tmp
|
||||||
- ../tmp:/tmp
|
|
||||||
# 数据持久化
|
|
||||||
- ~/.maxkb:/opt/maxkb
|
|
||||||
# MinerU图片存储目录持久化
|
|
||||||
- ~/.maxkb/storage:/opt/maxkb/storage:rw
|
|
||||||
environment:
|
environment:
|
||||||
# 开启调试模式
|
# 开启调试模式
|
||||||
DJANGO_DEBUG: "True"
|
|
||||||
PYTHONUNBUFFERED: "1"
|
PYTHONUNBUFFERED: "1"
|
||||||
MAXKB_LOG_LEVEL: "DEBUG"
|
MAXKB_LOG_LEVEL: "DEBUG"
|
||||||
|
|
||||||
@ -29,12 +24,12 @@ services:
|
|||||||
# MinerU 图片存储路径
|
# MinerU 图片存储路径
|
||||||
MAXKB_STORAGE_PATH: "/opt/maxkb/storage"
|
MAXKB_STORAGE_PATH: "/opt/maxkb/storage"
|
||||||
|
|
||||||
MINERU_API_TYPE: "self_hosted"
|
#MINERU_API_TYPE: "self_hosted"
|
||||||
MINERU_API_URL: "http://mineru:8000"
|
#MINERU_API_URL: "http://mineru:8000"
|
||||||
|
|
||||||
# MINERU_API_TYPE: "cloud"
|
MINERU_API_TYPE: "cloud"
|
||||||
# MINERU_API_URL: "https://mineru.net"
|
MINERU_API_URL: "https://mineru.net"
|
||||||
# MINERU_API_KEY: "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI2OTYwMDEwNiIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc1NTE2MzQ5OCwiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiIiwib3BlbklkIjpudWxsLCJ1dWlkIjoiYTQwODk5NjMtNDI1OS00MWM3LWE3NWItY2IzZTQ4NTRjYWIwIiwiZW1haWwiOiIiLCJleHAiOjE3NTYzNzMwOTh9.88m9JSKQhkwJ557jCTFOgmdjeAfpXzxy2QDINaJ0rfHfnMNBxQt47aHr2jABeuxW-fXm8S5AO7zWWTXEGx8BxA"
|
MINERU_API_KEY: "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI2OTYwMDEwNiIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc1NTE2MzQ5OCwiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiIiwib3BlbklkIjpudWxsLCJ1dWlkIjoiYTQwODk5NjMtNDI1OS00MWM3LWE3NWItY2IzZTQ4NTRjYWIwIiwiZW1haWwiOiIiLCJleHAiOjE3NTYzNzMwOTh9.88m9JSKQhkwJ557jCTFOgmdjeAfpXzxy2QDINaJ0rfHfnMNBxQt47aHr2jABeuxW-fXm8S5AO7zWWTXEGx8BxA"
|
||||||
|
|
||||||
# 配置队列大小
|
# 配置队列大小
|
||||||
MINERU_QUEUE_SIZE: "50"
|
MINERU_QUEUE_SIZE: "50"
|
||||||
@ -60,5 +55,11 @@ services:
|
|||||||
MINERU_MAX_IMAGE_SIZE: "10000000"
|
MINERU_MAX_IMAGE_SIZE: "10000000"
|
||||||
# 过滤无意义图片
|
# 过滤无意义图片
|
||||||
MINERU_FILTER_MEANINGLESS: "true"
|
MINERU_FILTER_MEANINGLESS: "true"
|
||||||
restart: unless-stopped
|
# 使用默认的启动命令,让容器内的所有服务正常启动
|
||||||
# 使用镜像默认的启动命令
|
# command 留空使用镜像默认的 entrypoint
|
||||||
|
|
||||||
|
|
||||||
|
# 如果使用绑定挂载,可以删除这个 volumes 部分
|
||||||
|
# volumes:
|
||||||
|
# maxkb_data:
|
||||||
|
# maxkb_tmp:
|
||||||
138
start-docker.sh
Executable file
138
start-docker.sh
Executable 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 "启动脚本执行完成!"
|
||||||
Loading…
Reference in New Issue
Block a user