Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行

文章目录

Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型

我习惯在CMD中运行命令,我看一些教程使用Docker安装Anythingllm时在Power Shell中。

该教程在 Windows CMD 中运行这个 docker 命令,以下是从头到尾的步骤,包括如何在 CMD 中正确设置和运行该命令。

电脑配置:Win11+wsl2+4070tis+内存48G

大模型:ollama-deepseek-r1:14b

所用软件:ollama+docker+anythingllm

4070tis使用anythingllm,在deepseek-r1:14b下的生成tocken速度大概是:52toc/s

备注:ollama需要自己首先安装,去官网下载,然后拉取对应大模型即可。

1. 安装 Docker Desktop

确保你已经安装并启动了 Docker Desktop 。如果还没有安装,可以从 Docker 官网 下载并安装。

Docker官方网址:https://www.docker.com/products/docker-desktop/

记得开启电脑wsl2,如果没有安装过wsl,可以看如下:

微软官方教程:https://learn.microsoft.com/en-us/windows/wsl/setup/environment

2. 使用Docker拉取Anythingllm镜像

拉取镜像命令如下:

cmd 复制代码
docker pull mintplexlabs/anythingllm

之后查看是否有该镜像,使用命令:

cmd 复制代码
docker images

可以看到电脑中存在Anythingllm这个镜像了

2. 设置 STORAGE_LOCATION 路径

在 CMD 中,你可以使用 set 命令来设置环境变量。假设你希望将 STORAGE_LOCATION 设置为 Windows 的文档目录,可以按以下步骤操作,逐行运行如下命令,如下图,这三行可以从如下面代码行中复制。

  1. 打开 CMD(管理员模式)。

  2. 设置存储目录(你可以自定义这个路径,下面是一个示例):
    第一行代码

    cmd 复制代码
    set STORAGE_LOCATION=%USERPROFILE%\Documents\anythingllm

3. 创建存储目录和 .env 文件

确保存储目录存在,并且 .env 文件已经创建。使用以下命令来确保这些文件存在:

  1. 创建存储目录(如果目录不存在):
    第二行代码

    cmd 复制代码
    if not exist "%STORAGE_LOCATION%" mkdir "%STORAGE_LOCATION%"
  2. 创建 .env 文件(如果文件不存在):
    第三行代码

    cmd 复制代码
    if not exist "%STORAGE_LOCATION%\.env" echo. > "%STORAGE_LOCATION%\.env"

此时会在电脑文档的文件夹下,存在一个anythingllm文件夹,如下所示:

该文件夹下存在一个.env文件,存放一些配置。


.env 文件的作用

.env 文件是用于存储容器配置的环境文件,通常包含敏感信息和应用的配置参数。例如,配置大语言模型(LLM)、API 密钥、数据库连接等。容器运行时,它会读取 .env 文件并使用其中的配置信息。

关键配置项

.env 文件中,常见的配置项包括:

  • SERVER_PORT:指定服务器运行的端口。
  • JWT_SECRET:用于生成和验证 JWT(JSON Web Token)的密钥。
  • STORAGE_DIR:指定存储数据的路径。
  • LLM_PROVIDER:配置大语言模型提供者。
  • OLLAMA_BASE_PATH:配置 Ollama 服务的基础 URL 地址。
  • OPEN_AI_KEY:用于访问 OpenAI API 的密钥。

.env 文件中配置的内容会根据你的需求和使用的服务不同而有所变化。


4. 运行 Docker 命令

在 CMD 中,你可以使用单行命令运行 Docker。这里是调整后的命令,适合在 Windows CMD 中运行:

cmd 复制代码
docker run -d --name anythingllm --add-host=host.docker.internal:host-gateway --env STORAGE_DIR=/app/server/storage --health-cmd "/bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1" --health-interval 60s --health-start-period 60s --health-timeout 10s -p 3001:3001/tcp --restart=always --user anythingllm -v %STORAGE_LOCATION%:/app/server/storage -v %STORAGE_LOCATION%\.env:/app/server/.env -w /app mintplexlabs/anythingllm

运行之后如下图,会启动一个容器,用一大串字母表示,该字母是Docker 为该容器分配一个唯一的 ID,这个 ID 主要用于在 Docker 系统中管理容器。你可以用这个 ID 来执行不同的 Docker 命令,比如停止容器、查看容器日志、查看容器状态等。

查看当前所有的容器,命令如下:

cmd 复制代码
docker ps

可以看到我们已经成功启动一个容器

docker run 命令详细解析

给出的命令用于启动 AnythingLLM Docker 容器,以下是对该命令中每个字段的详细解释:

各部分的含义

  1. docker run -d
    docker run 命令用于启动一个新的容器,-d 表示容器将以"分离模式"(后台运行)启动。这样,命令执行完后,你可以继续在终端中操作。
  2. --name anythingllm
    给容器指定一个名字 anythingllm。这个名字用来唯一标识容器,可以方便地进行容器管理(例如,停止、重启、删除容器等)。
  3. --add-host=host.docker.internal:host-gateway
    添加一个额外的主机名解析。在 Docker 容器内,通过 host.docker.internal 可以访问宿主机的网络接口,这对于需要连接到宿主机的服务(比如本地运行的 ollama 服务)非常有用。host-gateway 是指容器访问宿主机的网关地址。
  4. --env STORAGE_DIR=/app/server/storage
    设置容器内部的环境变量。STORAGE_DIR=/app/server/storage 会将容器内部的存储目录设置为 /app/server/storage。该目录用于存储 AnythingLLM 的数据,如模型、日志等。
  5. --health-cmd "/bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1"
    设置容器的健康检查命令。docker-healthcheck.sh 是一个用于检查容器健康状态的脚本。它会定期运行,确保容器的正常工作。如果健康检查失败(即返回非零退出状态),则 Docker 会认为容器不可用。
  6. --health-interval 60s
    设置健康检查命令的执行间隔为 60 秒。即每 60 秒 Docker 会运行一次健康检查命令。
  7. --health-start-period 60s
    设置容器启动后的健康检查延迟时间。即容器启动后,Docker 会等待 60 秒再开始执行健康检查。
  8. --health-timeout 10s
    设置健康检查命令的超时时间为 10 秒。如果健康检查命令在 10 秒内没有返回结果,则认为健康检查失败。
  9. -p 3001:3001/tcp
    映射容器内部的端口 3001 到宿主机的端口 30013001AnythingLLM Web 界面的默认端口。在启动容器后,你可以通过访问 http://localhost:3001 来访问 AnythingLLM
  10. --restart=always
    设置容器的重启策略。always 表示当容器停止运行时,Docker 会自动重启该容器,确保容器始终在后台运行。
  11. --user anythingllm
    以指定的用户 anythingllm 来运行容器内的程序。此选项确保容器内的进程以指定的用户身份执行,而不是使用默认的 root 用户。
  12. -v %STORAGE_LOCATION%:/app/server/storage
    将宿主机的目录 %STORAGE_LOCATION% 挂载到容器内部的 /app/server/storage 目录。%STORAGE_LOCATION% 是之前在 CMD 中设置的环境变量,指向容器存储数据的路径。这样,容器内的数据会存储到宿主机的指定路径上,容器重启后数据仍然保留。
  13. -v %STORAGE_LOCATION%\.env:/app/server/.env
    将宿主机的 .env 文件(位于 %STORAGE_LOCATION% 路径下)挂载到容器内的 /app/server/.env 文件。.env 文件通常用于存储配置参数,如 API 密钥、数据库配置等。这样,容器启动时可以加载这些配置。
  14. -w /app
    设置容器内的工作目录为 /app。这意味着容器内的程序将以这个目录作为默认工作目录。
  15. mintplexlabs/anythingllm
    指定要运行的 Docker 镜像,这里是 mintplexlabs/anythingllm,它包含了 AnythingLLM 的所有必要文件和配置。

这条 Docker 命令启动了一个 AnythingLLM 容器,并通过挂载宿主机的存储目录和 .env 文件,使得容器能够持续存储数据并加载配置。容器以后台运行,并提供 Web 服务,可以通过 http://localhost:3001 访问应用。

5. 访问应用

成功运行该命令后,你可以通过浏览器访问 http://localhost:3001 来进行初始配置。

http 复制代码
http://localhost:3001

选择ollama,然后选择对应的大模型

选择team,可以设置多用户登录

6. 配置环境

访问 http://localhost:3001 后,进行相关配置,如配置大语言模型(LLM)、向量数据库等。根据需要更新 .env 文件中的配置参数,如 SERVER_PORTOPEN_AI_KEY 等。

聊天设置

新建一个空间区,然后聊天设置改为对应的模型,到最下面,进行确认

向量数据库

如果默认的效果不好,向量数据库可以选择 精度优化

嵌入首选项

默认的也可以,如果默认的解析知识库有问题,也可以使用ollama提供的nomic-embed-text

添加知识库

点击工作区的上传按钮:

打开如下界面,然后上传对应的文档

移动到工作区,然后进行保存和嵌入

成员管理

设置里面,找到管理员-用户,然后在右上角添加用户

可以为用户选择不同的角色。不同角色持有的权限是不同的

局域网内其他用户访问

首先查看部署本机的IPv4地址,例如1.1.1.1

局域网内其他用户浏览器访问:1.1.1.1:3001即可

如下图所示

这应该是几个常用的内容,其他东西,请自行研究

7. 总结

在 Windows CMD 中运行 Docker 命令的步骤如下:

  1. 设置环境变量 STORAGE_LOCATION,并确保该路径存在。
  2. 创建必要的存储目录和 .env 文件。
  3. 使用单行命令在 CMD 中运行 Docker 容器。
  4. 通过浏览器访问 http://localhost:3001 进行初始化配置。
相关推荐
算家计算1 天前
DeepSeek被曝年底推出AI智能体,下一代人机交互时代要来了?
人工智能·agent·deepseek
周小码1 天前
Go开发的自行托管代理加速服务:支持Docker与GitHub加速
docker·golang·github
川石课堂软件测试1 天前
Oracle 数据库使用事务确保数据的安全
数据库·python·功能测试·docker·oracle·单元测试·prometheus
奋斗的老史1 天前
25年Docker镜像无法下载的四种对策
docker·容器·eureka
chillxiaohan1 天前
Docker学习记录
学习·docker·容器
柯南二号1 天前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
新鲜萝卜皮1 天前
容器内运行的进程,在宿主机的top命令中可以显示吗?
容器
我今天指定是不行了1 天前
Docker安装与部分应用安装
docker
容器魔方1 天前
Karmada v1.15 版本发布!多模板工作负载资源感知能力增强
云原生·容器·云计算
streaker3031 天前
Docker + Jenkins + Nginx 实现前端自动化构建与静态资源发布(含一键初始化脚本)
docker·jenkins