ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 11下基于WSL2与Docker部署MaxKB知识库问答平台

Windows 11下基于WSL2与Docker部署MaxKB知识库问答平台 最近有个需求让我琢磨了好几天把散落在各种 Word、PDF、Markdown 里的技术资料变成能直接对话的 AI 助手。市面上的方案不少最后我选了开源知识库问答平台 MaxKB跑在 Windows 11 笔记本上但没有直接装在 Windows 里而是走了 WSL2 Ubuntu Docker 这条路。这个组合的好处非常明显不需要单独准备 Linux 服务器Windows 日常办公照常使用部署、备份、迁移都按 Linux 那套成熟玩法来做。等我把整套流程跑通之后回头再看瓶颈不在于 MaxKB 本身而在于 WSL2 环境配置、端口转发、数据卷挂载、模型接口对接这些环节。这篇文章我会从 Windows 11 开启 WSL2 讲起一路写到 MaxKB 成功接入大模型并完成知识库问答验证中间穿插实际踩过的坑和排查思路。无论你是刚接触 WSL2 的新人还是已经对 Linux 有一定经验这套步骤都可以直接照着做。1. 部署方案选型为什么最后走了 WSL2 路线MaxKB 本身就是一套容器化部署的开源系统解决的是“企业/个人文档知识库大模型问答”这个问题。它的核心逻辑不复杂把上传的 PDF、Word、Markdown 等文档切分成片段通过向量模型做检索再结合大模型生成回答。所以部署它的前提条件就是有 Docker 环境以及能访问模型服务的网络连接。真正让我纠结的是在 Windows 11 上用什么方式跑这套 Docker 环境。1.1 先对比一下几种常见部署路径我在实操前把常见方案过了一遍这里直接放对比方案优点缺点适合场景原生装 Ubuntu 双系统性能最好环境最干净切换系统麻烦影响 Windows 日常使用有独立测试机或长期开发计划VMware/VirtualBox 虚拟机跑 Ubuntu隔离完整快照方便资源占用高磁盘占用大启动慢需要图形界面完整 Linux 桌面Windows 上装 Docker Desktop上手最简单自带图形管理默认背后还是 WSL2/Hyper-V内存占用偏高只是临时跑几个容器Windows 11 WSL2 Ubuntu 内部装 Docker轻量切换系统零成本适合服务部署没有完整桌面网络转发偶尔有小问题介于“临时体验”和“长期使用”之间的方案最终我选了第四种核心原因有两个一是 WSL2 本身就是 Windows 官方支持的 Linux 子系统底层是轻量虚拟机性能和兼容性比我最初预想的要好很多二是 MaxKB 这类服务部署在 WSL2 里之后Windows 侧浏览器直接通过 localhost 就能访问日常使用完全不需要切到 Ubuntu 桌面体验很顺。1.2 这个方案的边界在哪里WSL2 不是万能的动手之前得先清楚它的边界。它本质上是 Windows 下的一个轻量虚拟机当所有 WSL 终端关闭后或者 Windows 重启时WSL2 里的服务会自动停掉。如果你希望 MaxKB 像服务器那样 7x24 小时对外提供问答服务WSL2 并不是最佳选择它更适合个人开发体验、内部测试、写文档/整理知识库时随手查。另外WSL2 的网络模型是 NAT 型Windows 访问 WSL2 内部服务默认走的是 localhost 转发这在大多数场景下没问题但如果想让局域网内其他设备访问你部署的 MaxKB需要额外配置端口转发规则这点后面我会专门讲。2. Windows 11 开启 WSL2 并安装 Ubuntu这部分我尽量写完整因为不少人第一次接触 WSL2 时在“开启功能”和“安装发行版”之间反复折腾容易卡住。2.1 一条命令装完基础组件Windows 11 较新的版本里安装 WSL2 已经不需要手动去“控制面板-启用或关闭 Windows 功能”里勾选项了。直接用管理员权限打开 PowerShell 或 CMD执行wsl --install这条命令会自动开启“适用于 Linux 的 Windows 子系统”和“虚拟机平台”两个功能然后下载并安装默认的 Linux 发行版。装完系统会提示重启重启后继续。如果你想自己指定发行版可以先用下面的命令看看目前有哪些可选wsl --list --online输出会列出 Ubuntu、Ubuntu-22.04、Ubuntu-24.04、Debian 等发行版。我这里选的是 Ubuntu-22.04主要原因是软件生态兼容性比较好Docker 官方源和各类第三方工具支持都稳wsl --install -d Ubuntu-22.042.2 首次启动和账号设置安装完成后开始菜单里会出现 Ubuntu-22.04 的图标。第一次启动时会让你设置 Linux 用户名和密码注意这个用户名密码和 Windows 登录账号没有关系它是独立的 Linux 用户。建议密码不要设置得太随意因为之后启动 Docker 服务、执行 sudo 操作都要用到。我用的是 maxkb 这个用户名一方面方便辨识另一方面避免用 root 做日常操作降低误操作风险。设置完账号后可以先确认当前 WSL 版本wsl -l -v输出类似NAME STATE VERSION * Ubuntu-22.04 Running 2如果 VERSION 显示的是 1说明当前发行版跑在 WSL1 上执行一下升级wsl --set-version Ubuntu-22.04 2然后把默认发行版设置成 Ubuntu避免以后多发行版时混淆wsl --set-default Ubuntu-22.042.3 用 .wslconfig 给 MaxKB 预留资源WSL2 默认会占用的内存和 CPU 并不夸张它按需分配。但 MaxKB 部署完以后Docker 容器、内置数据库、文档解析任务凑在一起内存占用会明显上升。如果机器内存比较紧张建议提前给 WSL2 设置一个资源上限。在 Windows 用户目录下新建一个.wslconfig文件路径是C:\Users\你的用户名\.wslconfig我用的配置是[wsl2] memory8GB processors4 swap4GB localhostForwardingtrue记忆里最容易忘的两个点一是文件后缀必须是.wslconfig不是.txt二是改完配置文件以后要执行wsl --shutdown让全部 WSL 实例重启一次配置才会生效。重启验证资源是否生效进入 Ubuntu 终端执行free -h nproc如果 free 输出的内存总量是配置的 8GB说明配置被正确读取了。3. 在 Ubuntu 内部安装 DockerMaxKB 官方提供的是容器镜像所以 Docker 是必经之路。这里我建议在 WSL2 的 Ubuntu 里直接安装 Docker Engine不推荐再叠加一层 Docker Desktop。3.1 为什么不推荐在 WSL2 里再用 Docker Desktop如果你日常开发环境是 WindowsDocker Desktop 确实体验很好图形界面管理容器日志、端口都很直观。但既然我们已经在 WSL2 里部署服务再装 Docker Desktop 就等于在一个 Linux 环境里又套了一层 Windows Docker 客户端不仅多占内存而且 sudo、systemd、网络模式这些操作会变得混乱。在 WSL2 Ubuntu 里直接安装 Docker Engine操作方式和独立 Linux 服务器完全一致以后如果你要把这套环境迁移到云服务器命令几乎不用改对长期维护友好很多。3.2 Docker 安装步骤进入 Ubuntu 终端后先更新系统基础包sudo apt update sudo apt upgrade -y然后用 Docker 官方脚本安装方便省事curl -fsSL https://get.docker.com | sudo sh安装过程会自动配置 Docker 官方 apt 源并安装 docker-ce、containerd、docker-compose-plugin 等组件。装完以后把当前用户加入 docker 用户组避免每次敲 sudo dockersudo usermod -aG docker $USER newgrp docker这里有个容易踩的坑如果你不执行newgrp docker而是直接关掉终端再打开当前用户组的变更可能还没生效docker 命令就会报权限错误。3.3 启用 systemd 并设置 Docker 开机自启WSL2 默认的启动方式比较特殊Ubuntu 子系统默认不跑 systemd。但从 Windows 11 较新的 WSL 版本开始可以在 Ubuntu 内通过配置启用 systemd让 Docker 这类服务以标准方式管理。创建或编辑/etc/wsl.confsudo vim /etc/wsl.conf写入[boot] systemdtrue保存后在 Windows PowerShell 里执行wsl --shutdown然后重新进入 Ubuntu执行sudo systemctl enable docker sudo systemctl start docker sudo systemctl status docker如果你不想折腾 systemd还有一个简化方案每次进入 Ubuntu 后直接执行sudo service docker start一样能把 Docker 拉起来只是每次开机后要手动执行一次。验证 Docker 是否正常docker version docker compose version看到 Client 和 Server 两段版本信息都正常输出说明 Docker 已经可以用了。4. MaxKB 容器化部署实操环境准备好了接下来才是重头戏把 MaxKB 镜像拉下来并启动。这部分我会把两种部署方式都写出来你可以按自己习惯选。4.1 拉取镜像并创建数据目录MaxKB 官方镜像是1panel/maxkb历史版本也不断在更新。我先习惯性建一个独立目录保存数据mkdir -p ~/maxkb/data然后直接运行容器docker run -d \ --name maxkb \ --restart always \ -p 8080:8080 \ -v ~/maxkb/data:/var/lib/mysql \ 1panel/maxkb简单解释一下这几个参数的作用-d后台运行容器--name maxkb给容器命名方便后续管理--restart alwaysDocker 服务重启或 WSL2 重新启动后容器会自动拉起-p 8080:8080把容器内部 8080 端口映射到宿主机 8080-v ~/maxkb/data:/var/lib/mysql把 MaxKB 内置数据库的数据目录挂载到 Ubuntu 本机目录这是数据持久化的关键4.2 我更推荐用 docker compose 固化参数直接用 docker run 虽然快但参数一多特别容易在容器重建时敲错。我后来改成了 docker compose 方式把部署参数写进文件以后想改端口、升级镜像、换目录改一行就行。创建~/maxkb/docker-compose.ymlservices: maxkb: image: 1panel/maxkb:latest container_name: maxkb restart: always ports: - 8080:8080 volumes: - ~/maxkb/data:/var/lib/mysql然后启动cd ~/maxkb docker compose up -d以后要升级镜像只需执行docker compose pull docker compose up -d这套流程和我在 Linux 服务器上的操作方式完全一致非常顺手。4.3 启动后一定要做的检查镜像第一次启动可能耗时较长因为 MaxKB 容器内部要初始化数据库结构、准备前端静态文件。所以不要刚 run 完就立刻打开浏览器等十几秒再说。查看启动状态docker ps确认 maxkb 容器状态是 Up然后看日志docker logs -f maxkb看到服务启动成功的日志后在 Windows 浏览器里访问http://localhost:8080正常情况下会出现 MaxKB 的登录页面。初次登录的账号是 admin初始密码各个版本有些差别建议以官方文档或启动日志里的提示为准不要盲目乱猜。第一次登录后系统会引导修改密码或者至少你要自己进用户管理里把初始密码改掉这个务必要做不要图省事留着默认密码。有一点需要强调如果用的是 docker compose 方式千万不要把~/maxkb整个文件夹放在/mnt/c/这种 Windows 挂载目录下。WSL2 访问 Windows NTFS 文件系统的性能很差数据库频繁读写会明显变慢严重时会出现 IO 超时。正确做法是把数据放在 WSL2 自己的 Linux 文件系统内比如/home/你的用户名/maxkb下面。5. 配置模型服务与知识库让 MaxKB 真正能用MaxKB 启动只是第一步真正让它从“空壳页面”变成能回答问题还需要完成两个核心配置接入大模型、创建知识库。如果跳过这一步打开应用时会发现机器人完全无法回复。5.1 先配大模型再建知识库很多新手容易犯一个顺序错误上来就建知识库、传文档然后跑到模型设置页面发现忘接 API。建议第一次使用的时候登录后第一件事就去模型设置。MaxKB 在模型配置上支持多种模型服务商包括 OpenAI 兼容接口、国内各家大模型平台、以及 Ollama 这类本地模型工具。操作路径一般是“系统管理”-“模型管理”-“添加模型”然后选择你使用的服务商填入 API Key 和模型名称。我在部署测试时用的是 OpenAI 兼容接口。你只需要准备一个真实可用的 API Key然后在配置里选择对应的模型建议对话模型和向量模型都配好对话模型负责最终生成答案向量模型负责把文档切片转化为向量问答时做语义检索如果你使用的是 Ollama 这类本地模型建议确认 Ollama 的 API 服务地址是 MaxKB 能访问到的。WSL2 里访问 Windows 侧服务可以用 localhost但如果 Ollama 跑在另一台机器上需要填可访问的网络地址。配置完模型后系统通常会有测试按钮。务必先测试连通性确认模型能够正常返回结果再继续下面步骤
返回列表