当前位置: 首页 > article >正文

Docker+Ollama+WebUI+AnythingLLM,构建企业本地AI大模型

文章目录

    • 概要
    • Ollama部署
    • WebUI部署
    • AnythingLLM部署
    • Docker-Compose部署管理所有容器
    • 小结
    • 参考文章

概要

Ollama 是一个强大的大模型提供者,它通过开源的方式,为开发者和企业提供了先进的大型语言模型(LLM)。这些模型拥有处理和生成复杂语言任务的能力,为各种应用场景提供了强大的基础。

Open WebUI 则进一步增强了用户体验,它提供了一个高度可视化和用户友好的对话界面。这个界面不仅美观,而且功能丰富,使用户能够轻松地与背后的大模型进行交互,无论是通过文本聊天还是其他交互方式。

AnythingLLM 则是在这个基础上的一个创新工具,它允许用户利用 Ollama 提供的大模型能力,并结合本地数据,构建和定制符合个人或企业特定需求的 AI 大模型。AnythingLLM 的灵活性和定制性意味着用户可以根据自己的特定业务场景和需求,创建和优化 AI 解决方案,从而在保证数据安全和隐私的同时,实现更加个性化和高效的服务。

通过 AnythingLLM,用户可以轻松地将本地文档、资料和数据集成到 AI 模型中,实现智能检索、内容生成、问答系统等多样化功能。这不仅提高了工作效率,还增强了决策支持的能力。AnythingLLM 的多用户支持和精细的权限管理,使得团队协作变得更加简单和安全。

总的来说,Ollama、Open WebUI 和 AnythingLLM 的结合,为用户提供了一个从模型提供到界面交互,再到个性化定制的完整解决方案,使得构建和部署 AI 大模型变得更加容易、高效和安全。

Ollama部署

  1. 获取Ollama镜像:

    • 使用Docker从镜像仓库拉取Ollama镜像:
      docker pull ollama/ollama
      
  2. 创建Ollama宿主机挂载目录:

    • 在宿主机上创建一个目录用于Ollama数据的持久化存储:
      mkdir -p /data/docker/ollama/data
      
    • 修改目录权限
      chmod  -R 777 /data/docker/ollama
      
  3. 启动Ollama容器

    • 使用以下命令启动Ollama容器,并将数据目录挂载到容器中:
      docker run \-d \--restart always \--name ollama \--privileged=true \-p 11434:11434 \-v /data/docker/ollama/data:/root/.ollama \ollama/ollama
      
      其中:
      • -d 表示后台运行容器。
      • --restart always 设置容器的重启策略。
      • --name ollama 为容器指定一个名称。
      • --privileged=true 使容器以特权模式运行,这将给予容器几乎相同于宿主机的权限。
      • -p 11434:11434 \ 将容器的11434端口映射到宿主机的11434端口。
      • -v /data/docker/ollama/data:/root/.ollama 将宿主机的数据目录挂载到容器中。
      • ollama/ollama 指定要使用的ollama镜像和版本(latest)。
  4. 测试Ollama服务:

    • 进入Ollama容器:
      docker exec -it ollama /bin/bash
      
    • 从Ollama仓库拉取gemma模型, 可从官网查看有哪些模型
      ollama pull gemma:2b
      
    • 查看本地有哪些模型
      ollma list
      
    • 使用gemma:2b大模型, 然后与开启对话
      ollama run gemma:2b
      

WebUI部署

  1. 获取open-webui镜像:

    • 使用Docker从镜像仓库拉取open-webui镜像:
      docker pull m.daocloud.io/ghcr.io/open-webui/open-webui:main
      
  2. 创建open-webui宿主机挂载目录:

    • 在宿主机上创建一个目录用于open-webui数据的持久化存储:
      mkdir -p /data/docker/open-webui/data
      
    • 修改目录权限
      chmod  -R 777 /data/docker/open-webui	 
      
  3. 启动AnythingLLM容器

    • 使用以下命令启动open-webui容器,并将数据目录挂载到容器中:
      docker run \-d \--restart always \--name open-webui \--privileged=true \-p 3000:8080 \-e OLLAMA_BASE_URL="http://{ollma服务IP}:11434"-v /data/docker/open-webui/data:/app/backend/data \m.daocloud.io/ghcr.io/open-webui/open-webui:main
      
      其中:
      • -d 表示后台运行容器。
      • --restart always 设置容器的重启策略。
      • --name open-webui 为容器指定一个名称。
      • --privileged=true 使容器以特权模式运行,这将给予容器几乎相同于宿主机的权限。
      • -p 3000:8080 \ 将容器的3000端口映射到宿主机的8080端口。
      • -v /data/docker/open-webui/data:/app/backend/data 将宿主机的数据目录挂载到容器中。
      • m.daocloud.io/ghcr.io/open-webui/open-webui:main 指定要使用的open-webui镜像
  4. 测试open-webui服务:

    • 通过浏览器输入http://{宿主机IP}:3000/auth即可开始访问

AnythingLLM部署

  1. 获取AnythingLLM镜像:

    • 使用Docker从镜像仓库拉取AnythingLLM镜像:
      docker pull mintplexlabs/anythingllm
      
  2. 创建AnythingLLM宿主机挂载目录:

    • 在宿主机上创建一个目录用于AnythingLLM数据的持久化存储:
      mkdir -p /data/docker/anythingllm/data
      
    • 在宿主机上创建一个目录用于存放AnythingLLM的环境变量信息
      mkdir -p /data/docker/anythingllm/env
      
    • 修改目录权限
      chmod  -R 777 /data/docker/anythingllm
      
  3. 创建环境变量文件

    • 创建配置文件env.txt
      cd /data/docker/anythingllm/env
      touch env.txt
      
    • 增加环境变量信息
      SERVER_PORT=3001
      STORAGE_DIR="/app/server/storage"
      UID='1000'
      GID='1000'
      
  4. 启动AnythingLLM容器

    • 使用以下命令启动AnythingLLM容器,并将数据目录挂载到容器中:
      docker run \-d \--restart always \--name anythingllm \--cap-add SYS_ADMIN \--privileged=true \-p 3014:3001 \-v /data/docker/anythingllm/data:/app/server/storage \-v /data/docker/anythingllm/env/env.txt:/app/server/.env \mintplexlabs/anythingllm
      
      其中:
      • -d 表示后台运行容器。
      • --restart always 设置容器的重启策略。
      • --name anythingllm 为容器指定一个名称。
      • --cap-add SYS_ADMIN 添加SYS_ADMIN能力给容器,这意味着容器将获得更多的系统管理权限,比如进行磁盘管理、网络配置等
      • --privileged=true 使容器以特权模式运行,这将给予容器几乎相同于宿主机的权限。
      • -p 3014:3001 \ 将容器的3014端口映射到宿主机的3001端口。
      • -v /data/docker/anythingllm/data:/app/server/storage 将宿主机的数据目录挂载到容器中。
      • /data/docker/anythingllm/env/env.txt:/app/server/.env 将宿主机的配置文件挂载到容器中。
      • mintplexlabs/anythingllm 指定要使用的AnythingLLM镜像和版本(latest)。
  5. 测试AnythingLLM服务:

    • 通过浏览器输入http://{宿主机IP}:3041即可开始访问

Docker-Compose部署管理所有容器

将上面的docker run命令转换为docker-compose.yml文件,并设置open-webui和anythingllm服务依赖于ollama服务,方便管理

version: '3.8'services:ollama:image: ollama/ollamacontainer_name: ollamarestart: alwaysprivileged: trueports:- "11434:11434"volumes:- /data/docker/ollama/data:/root/.ollamanetworks:- llm_networkopen-webui:image: m.daocloud.io/ghcr.io/open-webui/open-webui:maincontainer_name: open-webuirestart: alwaysprivileged: trueports:- "3000:8080"environment:OLLAMA_BASE_URL: "http://ollama:11434"volumes:- /data/docker/open-webui/data:/app/backend/datadepends_on:- ollamanetworks:- llm_networkanythingllm:image: mintplexlabs/anythingllmcontainer_name: anythingllmrestart: alwayscap_add:- SYS_ADMINprivileged: trueports:- "3014:3001"volumes:- /data/docker/anythingllm/data:/app/server/storage- /data/docker/anythingllm/env/env.txt:/app/server/.envdepends_on:- ollamanetworks:- llm_networknetworks:llm_network:driver: bridge

这个docker-compose.yml文件中定义了三个服务:ollamaopen-webuianythingllm。每个服务都有自己的配置,包括镜像、容器名称、重启策略、特权模式、端口映射和卷挂载。

  • environment: 用于设置环境变量,这里open-webui服务设置了OLLAMA_BASE_URL环境变量,指向ollama服务。
  • depends_on: 此选项用于指定服务依赖,确保open-webuianythingllm服务在ollama服务启动后再启动。

请确保将/data/docker/...路径替换为实际的宿主机路径,或者根据需要创建这些目录。

要使用此docker-compose.yml文件启动服务,你需要在包含该文件的目录中打开终端,然后运行:

docker-compose up -d

这将按照文件中定义的配置启动所有服务。如果你想停止服务,可以使用:

docker-compose down

这将停止并移除容器,但不会删除卷。如果你需要重新构建服务或者对配置进行了更改,可以使用:

docker-compose up --build

这将重建任何已更改的服务的镜像。

小结

参考文章

ollam官网

相关文章:

Docker+Ollama+WebUI+AnythingLLM,构建企业本地AI大模型

文章目录 概要Ollama部署WebUI部署AnythingLLM部署Docker-Compose部署管理所有容器小结参考文章 概要 Ollama 是一个强大的大模型提供者,它通过开源的方式,为开发者和企业提供了先进的大型语言模型(LLM)。这些模型拥有处理和生成…...

【大模型】DeepSeek 高级提示词技巧使用详解

目录 一、前言 二、DeepSeek 通用提示词技巧 2.1 DeepSeek 通用提示词技巧总结 三、DeepSeek 进阶使用技巧 3.1 DeepSeek一个特定角色的人设 3.1.1 为DeepSeek设置角色操作案例一 3.1.2 为DeepSeek设置角色操作案例二 3.2 DeepSeek开放人设升级 3.2.1 特殊的人设&#…...

【玩转全栈】----Django基本配置和介绍

目录 Django基本介绍: Django基本配置: 安装Django 创建项目 创建app 注册app Django配置路由URL Django创建视图 启动项目 Django基本介绍: Django是一个开源的、基于Python的高级Web框架,旨在以快速、简洁的方式构建高质量的We…...

[Unity角色控制专题] (借助ai)详细解析官方第三人称控制器

首先模板链接在这里,你可以直接下载并导入unity即可查看官方为开发者写好一套控制器 本文的ai工具用到了豆包,其灵活程度很高,总结能力也强过我太多 因此大量使用,不喜勿喷 Starter Assets - ThirdPerson | Updates in new Charac…...

安装 Docker Desktop 修改默认安装目录到指定目录

Docker Desktop安装目录设置 Docker Desktop 默认安装位置 (C:\Program Files\Docker\Docker) 是这个 ,导致系统盘占用过大,大概2G ; 那么如何安装到其他磁盘呢? 根据docker desktop 官网 Docker Desktop install 我们可以看到&a…...

渗透测试--文件包含漏洞

文件包含漏洞 前言 《Web安全实战》系列集合了WEB类常见的各种漏洞,笔者根据自己在Web安全领域中学习和工作的经验,对漏洞原理和漏洞利用面进行了总结分析,致力于漏洞准确性、丰富性,希望对WEB安全工作者、WEB安全学习者能有所帮助…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十一节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析(RequestTransferExit0x37服务) 作者:车端域控测试工程师 更新日期:2025年02月13日 关键词:UDS协议、0x37服务、传输终止、NRC验证、ISO 14229-1:2023 一、服务功能概述 0…...

虚拟环境测试部署应用

一、作用 虚拟环境(env)在计算机领域,特别是在软件开发和测试中扮演着重要角色。它主要用于创建一个隔离的环境,使得开发者可以在不影响系统其余部分的情况下安装、配置和运行软件项目。以下是虚拟环境的一些主要作用: 1、依赖管理 不同的项目可能需要不同版本的库或框…...

【线性代数】2矩阵

1.矩阵的运算 1.1.定义 矩阵行列式数表数行数和列数可以不相等行数和列数必须相等1.2.加法与数乘 矩阵的数乘:所有元素都乘这个数 矩阵的加法:对应位置处元素相加 🦊已知,求 1.3.乘法 矩阵乘法三步法 ①能不能乘:内定乘 ②乘完是何类型:外定型 ③中的元素是什么:左…...

前端为什么要使用new Promise包裹一个函数

在前端开发中,使用 new Promise 包裹一个函数主要是为了将原本不支持 Promise 规范的操作转化为支持 Promise 规范的操作,从而可以更好地处理异步操作,提升代码的可读性和可维护性。下面详细介绍这么做的常见原因和应用场景: 1. …...

深度学习在天文观测中的应用:解锁宇宙的奥秘

深度学习在天文观测中的应用:解锁宇宙的奥秘 引言 宇宙是无尽的,天文学家通过观测天体来揭示宇宙的奥秘。随着现代天文设备技术的进步,我们现在可以通过 射电望远镜、空间望远镜 和 地面望远镜 获取大量的天文数据。然而,这些数据的规模和复杂性让传统的手工分析方法变得…...

SaaS 平台开发要点

如何在 SaaS 平台的前端开发中,编写高性能、高质量且高度通用化的 Vue 组件 一、组件设计原则 单一职责原则:每个组件只负责一个核心功能受控/非受控模式:同时支持 v-model 和自主状态管理组合式 API:使用 Composition API 提升逻辑复用性可访问性:遵循 WAI-ARIA 规范Typ…...

python从入门到进去

python从入门到进去 第一章、软件和工具的安装一、安装 python 解释器二、安装 pycharm 第二章、初识 python一、注释可分三种二、打印输入语句三、变量1、基本数据类型1.1、整数数据类型 int1.2、浮点数数据类型 float1.3、布尔数据类型 boolean1.4、字符串数据类型 string 2、…...

DeepSeek与医院电子病历的深度融合路径:本地化和上云差异化分析

一、引言 1.1 研究背景与意义 在医疗信息化快速发展的当下,电子病历系统已成为医院信息管理的核心构成。电子病历(EMR)系统,是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图标、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的…...

苍穹外卖day4 redis相关简单知识 店铺营业状态设置

内存存储 键值对 key-value 一般用于处理突发性大量请求数据操作(暂时浅显理解) 读写速度极快,常用于缓存数据,减少对数据库的访问压力,提高系统性能。例如,可以缓存用户会话、商品信息、页面数据 设置默…...

pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网

首先pycharm官网是这一个。我是在2025年2月16日9:57进入的网站。如果网站还没有更新的话,那么就往下滑一下找到 community Edition,这个就是社区版了免费的。PyCharm:适用于数据科学和 Web 开发的 Python IDE 适用于数据科学和 Web 开发的 Python IDE&am…...

使用新版本golang项目中goyacc依赖问题的处理

背景 最近项目使用中有用到go mod 和 goyacc工具。goyacc涉及到编译原理的词法分析,文法分析等功能,可以用来生成基于golang的语法分析文件。本期是记录一个使用中遇到的依赖相关的问题。因为用到goyacc,需要生成goyacc的可执行文件。 而项目…...

Moya 网络框架

Moya 网络框架 通过 Moya 进行网络请求的一般步骤如下: 1. 定义 TargetType:为每个 API 请求创建一个枚举,遵循 TargetType 协议,指定基础 URL、请求路径、方法、参数等。 2. 创建 MoyaProvider:实例化 MoyaProvider&…...

FreeRTOS第3篇:链表的“精密齿轮”——列表与列表项

文章目录 1 列表与列表项:FreeRTOS的“排队系统”2 列表操作:FreeRTOS的“排队算法”3 列表的应用场景:FreeRTOS的“任务调度枢纽”4 源码级洞察:列表的“灵魂代码”5 实战:列表操作实验6 总结与思考引言:嵌入式系统的“任务候车厅” 想象你正在管理一座繁忙的火车站:乘…...

React.memo 使用详解与最佳实践

React.memo 使用详解与最佳实践 引言React.memo 是什么?使用场景实战示例示例解析自定义比较函数使用注意事项总结 引言 在 React 应用程序中,性能优化是一个永恒的话题。当父组件状态发生变化时,即使子组件的 props 没有改变,子…...

SpringBoot中集成SaToken

SpringBoot中集成SaToken 1. 写一个拦截器2. 对拦截器的说明&解释2. 拦截器 1. 写一个拦截器 import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.stp.StpUtil; import org.springframework.beans.factory.annotation.Value; import org.spri…...

网络安全-攻击流程-应用层

应用层攻击针对OSI模型的第七层(应用层),主要利用协议漏洞、业务逻辑缺陷或用户交互弱点,直接威胁Web应用、API、数据库等服务。以下是常见应用层攻击类型及其流程,以及防御措施: 1. SQL注入(SQ…...

Ubuntu 24.04.1 LTS 本地部署 DeepSeek 私有化知识库

文章目录 前言工具介绍与作用工具的关联与协同工作必要性分析 1、DeepSeek 简介1.1、DeepSeek-R1 硬件要求 2、Linux 环境说明2.1、最小部署(Ollama DeepSeek)2.1.1、扩展(非必须) - Ollama 后台运行、开机自启: 2.2、…...

微信小程序中缓存数据全方位解惑

微信小程序中缓存数据全方位解惑 微信小程序中的数据缓存是提升用户体验和优化性能的重要手段,跟电脑浏览器中的Local Storage的性质一样。以下是关于微信小程序数据缓存的相关知识点和示例的详细介绍: 1. 数据缓存的类型 微信小程序提供了两种数据缓…...

python语言进阶之函数

目录 前言 函数的创建和调用 函数创建 调用函数 参数传递 形式参数和实际参数 位置参数 数量必须与定义时一致 位置必须与定义时一致 关键字参数 为参数设置默认值 可变参数 **parameter 返回值 变量的作用域 局部变量 全局变量 匿名函数 前言 提到函数&…...

Mybatis-扩展功能

逻辑删除乐观锁 MyBatisPlus从入门到精通-3(含mp代码生成器) Db静态工具类 Spring依赖循环问题 代码生成器 MybatisPlus代码生成器 枚举处理器 我们这里用int来存储状态 需要注解,很不灵活 希望用枚举类来代替这个Integer 这样的话我…...

青少年编程与数学 02-009 Django 5 Web 编程 16课题、权限管理

青少年编程与数学 02-009 Django 5 Web 编程 16课题、权限管理 一、授权授权的主要特点和作用授权的类型应用场景 二、权限系统使用Django内置的权限系统使用组管理权限使用第三方库在视图中应用权限 三、权限管理示例步骤 1: 创建Django项目和应用步骤 2: 定义模型和权限步骤 …...

Baklib知识中台构建企业智能运营核心架构

内容概要 在数字化转型的浪潮中,企业对于知识的系统化管理需求日益迫切。Baklib作为新一代的知识中台,通过构建智能运营核心架构,为企业提供了一套从知识汇聚到场景化落地的完整解决方案。其核心价值在于将分散的知识资源整合为统一的资产池…...

Java爬虫获取1688商品搜索API接口的实现指南

在电商数据分析、市场调研以及商品选品等领域,按关键字搜索1688商品并获取相关数据是一项重要的任务。本文将详细介绍如何使用Java爬虫技术,通过1688的API接口按关键字搜索商品,并解析返回的数据。以下是实现的完整步骤和代码示例。 一、前期…...

Ubuntu启动geteck/jetlinks实战:Docker启动

参考: JetLinks 物联网基础平台 安装Docker Ubuntu下载安装Docker-Desktop-CSDN博客 sudo apt install -y docker-compose 下载源码 # github亦可 git clone https://gitee.com/jetlinks/jetlinks-community.git cd jetlinks-community 启动 cd docker/run-a…...