文章内容来自WTY共享编辑,位山城重庆,2025年6月1日,儿童节快乐!
一、Ollama基础及部署教程
(一)Ollama是什么
Ollama是一个开源的本地大语言模型运行框架,通过提供便捷的模型管理、丰富的预建模型库、跨平台支持以及灵活的自定义选项,使得开发者和研究人员能够在本地环境中高效利用大型语言模型进行各种自然语言处理任务,而无需依赖云服务或复杂的基础设施设置。Ollama 目标在于简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。同时作为轻量级框架,Ollama 保持了较小的资源占用,同时具备良好的可扩展性,允许用户根据需要调整配置以适应不同规模的项目和硬件条件。官网地址:Ollama
Dify、Open-WebUI 和 Chatbox 是当前主流的开源 LLM 应用工具,但在功能定位、技术架构和适用场景上有显著差异。以下是三者的对比分析:dify、open-webui、chatbox 对比
简单来说:Dify适合企业开发复杂 AI 应用,如智能客服、合同处理系统等,支持多模型协作和业务流程自动化,适合需要快速原型开发到生产部署的团队,尤其是需结合 RAG 和复杂工作流的场景,扩展性较高。Open-WebUI适合个人开发者快速测试本地模型(如 Ollama 部署的 Llama3),或作为 ChatGPT 替代品进行日常交互。Chatbox面向非技术用户,提供无需代码的对话界面,支持快速体验多模型(如 GPT、Claude)的聊天能力。
(二)如何安装部署Ollama
整体思路:Docker安装Ollama框架,通过Ollama部署大模型。
Docker安装Ollama
官方文档地址:ollama/docs/docker.md at main · ollama/ollama · GitHub
成功部署Docker后,执行启动Docker命令
systemctl start docker
执行Ollama安装命令
首先安装部署Docker,检查Docker运行状态正常。
systemctl status docker
若没有正常启动,执行启动命令。
systemctl start docker
启动Docker后,执行Ollma安装命令:
docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
-v ollama:/root/.ollama
说明:将宿主机的ollma目录挂载到容器内的/root/.ollama目录,容器中的/root/.ollama
通常是 Ollama 的配置和数据存储目录,挂载后数据会持久化到宿主机,避免容器删除后数据丢失。
--restart always ghcr.io/open-webui/open-webui:ollama
说明:启动一个Docker容器,并设置其重启策略为“总是重启”,ghcr.io/open-webui/open-webui:ollama
:这是要运行的Docker镜像的完整名称。ghcr.io
是GitHub Container Registry的地址,open-webui/open-webui
是镜像的仓库和名称,:ollama
是镜像的标签。这个镜像包含了Open WebUI应用.
Open WebU是一个开源的、用户友好的 Web 界面,专为本地运行的大语言模型(LLM)设计,通常与 Ollama 配合使用。它允许用户通过浏览器轻松地与本地部署的模型交互,无需编写命令行代码,提供类似 ChatGPT 的体验。
这里由于ghcr.io是国外服务器网速较慢,可能导致传输失败,可以把地址改为国内的镜像站点,把ghcr.io替换成ghcr.nju.edu.cn。
docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.nju.edu.cn/open-webui/open-webui:ollama
到此就完成了ollama+openweb-ui的镜像部署。
( 三)如何下载导入模型
官方指令:ollama pull XXXXX 就可以下载相关模型
由于服务器原因在线拉取模型经常失败,可以在modelscope社区下载相关模型GGUF文件,通过离线导入的方式创建模型。
然后在模型文件的目录地址下创建一个Modefile文件,输入下列内容,用于指向对应的模型文件。
(此处图片为向量化模型的Modefile , 如果是其他大语言模型,则需要添加更多的东西,比如回答示例模板等,具体请查阅标准Modefile,修改FROM的值)
运行下列指令,就可以将模型导入Ollama。
ollama create [自定义的模型名称] -f [Modefile文件名]
模型导入成功后,可以使用ollama list指令查看模型列表。
使用Ollama run <模型名称>就可以运行导入的模型。
二、MCP和MCPO工具协议及部署教程
(一)什么是MCP?
MCP(Model Context Protocol,模型上下文协议),由Claude母公司Anthropic于去年11月主导推出的开放标准协议。核心目标是统一AI模型与外部工具、数据源的交互接口,类似于AI领域的“USB-C接口”。它通过标准化协议实现LLM与本地文件、数据库、API等资源的双向交互,从而解决传统集成中的碎片化问题。
以前大模型调用外部工具或库需要单独开发函数,现在MCP提供了统一的规范和接口,也就是只要安装了相关的库,仅需几行代码即可接入这些海量的外部工具。MCP把大模型运行环境称作 MCP Client,也就是MCP客户端,同时,把外部函数运行环境称作MCP Server,也就是MCP服务器,图中展示了如何通过MCP访问不同的MCP server,然后调用不同外部工具。
(二)什么是MCPO?
MCPO 是一个创新的解决方案,旨在将基于 MCP协议 的工具无缝集成到 OpenAPI 中。MCPO(Model Context Protocol-to-OpenAPI Proxy Server)是一个简单、可靠的代理服务器,能够将任何基于MCP协议的工具转换为兼容OpenAPI的HTTP服务器。
官方文档:🛰️ MCP Support | Open WebUI
简单来说,mcpo将所有的MCP服务暴露为http接口,使其能够在openwebui中以简单的方式添加为工具并调用,解决了MCP工具的一些局限。
(三)MCP部署案例
需求:利用大模型访问自己的Postgresql数据库,得到更精准的回答。.
需要用到的包MCP servers是MCP官方写的gostgres(服务名),它可以通过docker运行,也可以通过Npx(npx是npm 5.2.0及以上版本内置的Node.js包执行工具,主要用于无需全局安装即可直接运行npm包中的可执行命令,支持临时使用远程包、执行项目本地依赖等场景。 )调用某个包执行,同时参数是你的数据库ip、端口、密码等
MCP的本地部署方案:Cherry studio + MCP servers
Cherry Studio是一款支持多模型服务的跨平台桌面客户端工具,主要功能包括集成多种大语言模型(如OpenAI、Gemini等)、提供预配置AI助手、支持文档处理与实用工具集成,
通过以上设置界面调用MCP服务,如果是npx的运行包,他会自动下载图中
@modelcontextprotocol/server-postgres
这个包,并带入参数执行,在本地创建运行一个服务。
(四)MCPO:内网离线部署方案(Postgres数据库访问协议代理)
(1)构建Docker镜像
构建一个docker,分别安装好mcpo,uv,python,npx环境,并试运行(运行一次要执行的npx包,确保在缓存中存在),然后打包导入内网环境。
其中基础的dockerfile文件内容如下图:
# 使用官方的Python 3.11镜像作为基础
FROM python:3.11-slim
# 设置环境变量
ENV PYTHONUNBUFFERED=1
ENV PIP_NO_CACHE_DIR=off
ENV PIP_SOURCE_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ENV NODE_VERSION=18.x
# 创建并配置sources.list,然后安装必要的系统依赖
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free" > /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian-security/ bookworm-security main contrib non-free" >> /etc/apt/sources.list && \
apt-get update && apt-get install -y --no-install-recommends \
curl \
gnupg \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# 安装Node.js和npm
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION} | bash - && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
# 设置npm源为淘宝源并安装@modelcontextprotocol/server-postgres
RUN npm config set registry https://registry.npmmirror.com && \
npm install -g @modelcontextprotocol/server-postgres
# 使用pip安装mcpo(Python包)
RUN pip install -i ${PIP_SOURCE_URL} mcpo
# 清理工作
RUN apt-get purge -y --auto-remove build-essential && \
rm -rf /tmp/*
# 暴露端口8000
EXPOSE 8000
# 设置工作目录
WORKDIR /app
# 容器启动时的默认命令
CMD ["bash"]
dockerfile建立镜像的命令:
docker build -t image-name .
运行容器的命令:
docker run -p 8000:8000 image-name
在容器中执行
mcpo --port 8000 -- npx -y @modelcontextprotocol/server-postgres postgresql://root:123456@localhost:5432/xbldb
这段执行代码的含义是,指mcpo启动一个代理服务,代理执行npx -y @modelcontextprotocol/server-postgres
启动实际的 MCP 服务,将postgres这个mcp服务转化为mcpo,并暴露给8000端口。该服务允许客户端通过 MCP 协议与 PostgreSQL 数据库交互。
等待命令执行
此时可以通过localhost:8000/docs查看服务状态,如图即成功
c此时在openwebui端,添加工具 x.x.x.x:8000即可
(2)docker打包导入
1. 创建并运行容器
首先需要有一个运行中的容器(或使用已有容器):
# 示例:创建并运行一个基于 Ubuntu 的容器
docker run -itd --name mycontainer ubuntu:20.04
2. 提交容器为镜像
将容器的当前状态保存为新镜像:
docker commit mycontainer mycustomimage:v1
# mycontainer:容器名称或 ID
# mycustomimage:v1:新镜像的名称和标签
3. 导出镜像为 tar 文件
将镜像打包为可传输的 tar 文件
docker save -o myimage.tar mycustomimage:v1
# o:指定输出文件路径
4. 将 tar 文件传输到目标机器
使用工具(如 scp
、U 盘、网盘等)将 myimage.tar
复制到目标 Docker 环境。
5. 在目标机器上导入镜像
加载 tar 文件为本地镜像:
docker load -i myimage.tar
# i:指定输入文件路径
6. 验证导入结果
检查镜像是否成功导入:
docker images | grep mycustomimage
7. 运行导入的镜像
使用导入的镜像创建容器:
docker run -it --name imported-container mycustomimage:v1 bash
(五)部署用于访问Mysql的MCP
这里直接用别人打包好的基于go语言开发的mcp文件包。
https://github.com/Zhwt/go-mcp-mysql
将该文件导入内网环境中,使用命令和参数的方式创建:
mcpo --port 8000 -- ./go-mcp-mysql —host XXX —user XXX —pass XXX —port 3306 —db XXX
TIPS:百度创建了MCPservers广场,收罗了很多服务,可以在上面检索有没有直接想要的东西。