尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

虚拟机环境搭建:Docker部署Milvus与LangChain集成指南

虚拟机环境搭建:Docker部署Milvus与LangChain集成指南 1. 先明确目标为什么要在虚拟机里搭这套环境如果你正在学习 LangChain、RAG 或者向量数据库想在本地有一个干净、可复现、能随便折腾的测试环境那么在虚拟机里搭建一套包含 Docker、Milvus 和 LangChain 的基础设施是一个非常实用的选择。这能让你在不污染宿主机环境的前提下模拟一个接近生产环境的开发栈。很多人卡在第一步环境混乱。直接在宿主机上安装各种依赖版本冲突、端口占用、卸载不干净是常有的事。用虚拟机克隆一个干净的模板然后在这个“沙盒”里操作出问题了直接回滚快照这是最高效的学习和实验方式。这篇文章的核心就是带你走通从一台干净的虚拟机开始到能运行 Milvus 向量数据库和 LangChain 应用的完整路径。我会假设你已经有了一台安装好 Linux比如 CentOS 7 或 Ubuntu 22.04的虚拟机模板我们从这个模板克隆一台新机器开始。2. 第一步克隆虚拟机与基础配置拿到一台新克隆的虚拟机别急着装 Docker。先做几件小事能避免后面 80% 的奇怪问题。2.1 网络与主机名配置克隆后的虚拟机MAC地址和主机名通常和模板一样。这在小范围网络里可能引发冲突。第一步是先改主机名并确认网络是通的。# 1. 修改主机名比如改成 milvus-dev sudo hostnamectl set-hostname milvus-dev # 退出重新登录或者执行 bash 让新主机名生效 # 2. 检查网络连通性 ping -c 4 www.baidu.com # 或者 ping 一个你知道能通的 IP如果网络不通你需要检查虚拟机的网络适配器设置是 NAT、桥接还是仅主机模式并查看 Linux 内部的网络配置/etc/sysconfig/network-scripts/下的网卡配置文件或netplan配置。2.2 更新系统与安装基础工具一个更新过的系统能减少很多依赖库版本不兼容的问题。同时装上我们后续排查问题常用的工具。# 对于 CentOS/RHEL/AlmaLinux/Rocky Linux 系列 sudo yum update -y sudo yum install -y vim wget curl net-tools lsof telnet # 对于 Ubuntu/Debian 系列 sudo apt update sudo apt upgrade -y sudo apt install -y vim wget curl net-tools lsof telnet2.3 关闭防火墙与 SELinux仅用于实验环境在生产环境防火墙和 SELinux 是必须的。但在我们本地学习实验环境它们经常会成为各种连接问题的元凶比如 Docker 容器无法访问宿主机端口Milvus 服务间通信失败。为了简化问题我们暂时关闭它们。注意这一步仅适用于你完全掌控的、离线的、纯实验虚拟机。如果你的虚拟机有公网 IP 或需要长期运行请配置具体的防火墙规则而不是直接关闭。# 关闭防火墙 # CentOS 7 sudo systemctl stop firewalld sudo systemctl disable firewalld # Ubuntu sudo ufw disable # 关闭 SELinuxCentOS/RHEL 系列 # 临时关闭 sudo setenforce 0 # 永久关闭需要编辑配置文件 sudo sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config完成这些后重启虚拟机一次让所有配置生效。重启后用hostname和sestatus命令确认修改已生效。3. 第二步安装 Docker 与 Docker Compose这是整个流程的核心依赖。网上教程很多但经常因为系统版本、镜像源问题导致安装失败或速度极慢。我们采用官方推荐且稳定的安装方式。3.1 安装 Docker EngineDocker 的安装脚本或仓库地址有时会变。最稳妥的方法是参考 Docker 官方文档但这里给出针对常见 Linux 发行版的通用步骤。# 1. 卸载旧版本如果是全新系统可跳过 sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2. 安装必要的依赖包 sudo yum install -y yum-utils # 3. 设置稳定的 Docker 仓库使用阿里云镜像加速国内下载 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4. 安装 Docker Engine 和命令行工具 sudo yum install -y docker-ce docker-ce-cli containerd.io # 5. 启动 Docker 并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 6. 验证安装 sudo docker --version # 运行一个测试容器 sudo docker run hello-world如果看到Hello from Docker!的信息说明 Docker 安装成功。如果docker run命令卡住或报错最常见的原因是网络问题无法拉取镜像或者存储驱动问题。可以先尝试sudo docker pull hello-world单独拉取镜像看看。对于 Ubuntu 系统步骤类似只是包管理工具从yum换成了apt仓库设置方式略有不同同样建议使用国内镜像源。3.2 安装 Docker Compose注意docker compose带空格是 V2 版本的插件式命令docker-compose带横线是旧的 V1 版本。现在新安装直接装 V2 就行。# 1. 下载 Docker Compose 的二进制文件到 /usr/local/bin/ 目录 # 请去 GitHub 发布页查看最新版本号替换下面的 v2.24.5 # 下载地址https://github.com/docker/compose/releases sudo curl -L https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 2. 赋予二进制文件可执行权限 sudo chmod x /usr/local/bin/docker-compose # 3. 验证安装 docker-compose --version # 应该输出类似Docker Compose version v2.24.5如果下载速度慢可以先用浏览器或下载工具下载到本地再上传到虚拟机。或者使用国内镜像源下载二进制包。关键点安装完成后直接运行docker-compose可能会报permission denied因为默认情况下普通用户无法连接 Docker 守护进程。有两个解决方案每次命令前加sudo。推荐将当前用户加入docker用户组之后就不需要sudo了。sudo usermod -aG docker $USER执行此命令后你需要退出当前 SSH 会话并重新登录用户组变更才会生效。重新登录后运行docker ps和docker-compose --version测试是否成功。4. 第三步使用 Docker Compose 安装和启动 MilvusMilvus 官方强烈推荐使用 Docker Compose 部署单机版Standalone这对于开发和测试来说是最简单、最干净的方式。它会拉起 Milvus 所需的所有组件Etcd、MinIO、Milvus 服务本身。4.1 下载 Milvus 的 Docker Compose 配置文件我们需要一个docker-compose.yml文件来定义服务。去 Milvus 官方 GitHub 仓库获取是最稳妥的。# 创建一个专门的工作目录 mkdir -p ~/milvus cd ~/milvus # 下载最新稳定版的 docker-compose.yml 文件 # 请查看 Milvus 官网确认最新版本号。这里以 v2.4.0 为例。 wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml4.2 启动 Milvus 服务配置文件下载好后启动服务就是一行命令。# 在 docker-compose.yml 所在目录执行 sudo docker-compose up -d # 或者如果你已经将用户加入了 docker 组 docker-compose up -d-d参数代表在后台运行。执行后Docker Compose 会开始拉取镜像Etcd, MinIO, Milvus然后创建容器并启动。第一次运行会花一些时间下载镜像。4.3 验证 Milvus 是否运行正常启动后别急着进行下一步。先确认所有服务都健康运行。# 1. 查看所有容器状态 docker-compose ps # 你应该看到三个服务milvus-standalone, etcd, minio状态都是 Up。 # 2. 查看 Milvus 服务日志确认无报错 docker-compose logs milvus-standalone # 滚动查看日志关注是否有 ERROR 或 panic。正常启动最后会有类似 “Server successfully started” 的日志。 # 3. 检查 Milvus 服务端口是否监听 sudo netstat -tlnp | grep 19530 # Milvus 默认服务端口是 19530。应该能看到监听。4.4 常见启动问题排查如果docker-compose ps显示容器不断重启Restarting或退出Exited按以下顺序排查端口冲突Milvus 默认占用 19530服务、9091指标、19121管理等端口。确保这些端口没有被其他程序占用。可以用sudo lsof -i:19530检查。资源不足Milvus 运行需要一定内存建议至少 4GB。如果虚拟机内存分配不足容器可能启动失败。检查虚拟机设置和free -h命令。磁盘空间不足Docker 镜像和容器运行需要磁盘空间。用df -h检查根目录或/var/lib/docker所在分区空间。配置文件错误如果你修改了下载的docker-compose.yml可能导致语法错误或镜像拉取失败。建议先用原文件测试。权限问题如果之前用sudo docker-compose up启动后来想用普通用户管理可能会因为卷volume权限导致容器启动失败。确保数据目录如./volumes的权限正确。最简单的修复方法是停止服务删除相关容器和卷重新启动。cd ~/milvus docker-compose down -v # -v 会删除声明的数据卷数据会丢失仅用于测试重置。 docker-compose up -d5. 第四步连接测试与 Python 环境准备Milvus 跑起来只是第一步我们得确认它能被正常访问并且为后续的 LangChain 应用准备好 Python 环境。5.1 使用 Milvus CLI 或 Python SDK 进行连接测试最直接的测试方式是使用pymilvus这是 Milvus 的官方 Python SDK。# 在虚拟机内安装 pymilvus pip install pymilvus如果系统没有pip先安装sudo yum install python3-pip或sudo apt install python3-pip。然后写一个简单的 Python 脚本来测试连接# test_milvus_connection.py from pymilvus import connections, utility # 连接到本地的 Milvus 服务 try: connections.connect(hostlocalhost, port19530) print(Successfully connected to Milvus.) # 检查服务是否健康 if utility.get_server_version(): print(fMilvus server version: {utility.get_server_version()}) else: print(Failed to get server version.) # 列出已有的集合初次运行应该是空的 collections utility.list_collections() print(fExisting collections: {collections}) except Exception as e: print(fFailed to connect to Milvus: {e})运行这个脚本python3 test_milvus_connection.py如果输出成功信息恭喜你Milvus 服务完全正常。如果连接被拒绝回到上一步检查容器状态和端口监听。5.2 为 LangChain 准备 Python 虚拟环境强烈建议为 LangChain 项目创建独立的 Python 虚拟环境避免包依赖冲突。# 安装虚拟环境管理工具如果尚未安装 sudo pip3 install virtualenv # 或者使用系统包管理器sudo yum install python3-virtualenv # 创建并激活虚拟环境 cd ~ python3 -m virtualenv langchain_env source ~/langchain_env/bin/activate # 激活后命令行提示符前会出现 (langchain_env) # 在虚拟环境中安装 LangChain 和必要的依赖 pip install langchain langchain-community langchain-core pymilvus # 根据你的需求可能还需要安装 embeddings 模型例如 # pip install sentence-transformers # 用于本地生成向量 # 或者安装 OpenAI 包如果你使用 OpenAI 的 embeddings # pip install openai虚拟环境的好处是你所有的实验和安装都被隔离在这个环境里。退出虚拟环境只需输入deactivate。5.3 编写一个简单的 LangChain Milvus 集成示例现在让我们用一个最简单的例子验证整个链路用 LangChain 生成文本的向量存入 Milvus再查询出来。# simple_langchain_milvus.py from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import Milvus from langchain.docstore.document import Document # 1. 准备一些测试文本 texts [ LangChain is a framework for developing applications powered by language models., Milvus is a vector database designed for scalable similarity search., This is a test document for integration., ] # 2. 使用一个轻量级的本地嵌入模型首次运行会下载模型 embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) # 3. 连接到 Milvus 并创建向量存储 # 如果 collection 不存在会自动创建。connection_args 指向我们启动的 Milvus。 vector_store Milvus.from_texts( texts, embeddings, connection_args{host: localhost, port: 19530}, collection_nametest_langchain_collection, ) # 4. 进行相似性搜索 query What is LangChain? docs vector_store.similarity_search(query, k2) print(fQuery: {query}) for i, doc in enumerate(docs): print(f[Doc {i1}]: {doc.page_content})运行这个脚本cd ~ source langchain_env/bin/activate python3 simple_langchain_milvus.py如果一切顺利你会看到脚本输出与查询“What is LangChain?”最相关的两段文本。这证明从 LangChain 应用生成向量到写入 Milvus再到检索的整个流程已经打通。6. 环境调优与生产化考量实验环境跑通只是开始。如果你打算在这个环境里进行更长期的开发或学习有几个点需要关注。6.1 Docker 资源限制与性能默认情况下Docker 容器可以使用宿主机的所有 CPU 和内存。在资源有限的虚拟机上这可能导致宿主机卡顿。建议为 Milvus 的容器设置资源限制。编辑docker-compose.yml在milvus-standalone服务下添加deploy或resources配置取决于 Compose 版本。例如services: milvus-standalone: ... deploy: resources: limits: cpus: 2.0 memory: 4G reservations: memory: 2G修改后运行docker-compose down再docker-compose up -d重启生效。这能防止 Milvus 吃光所有内存导致虚拟机崩溃。6.2 数据持久化与备份我们之前启动时数据保存在 Docker 卷volume中。这些卷的生命周期由 Docker 管理。如果你想明确知道数据存在宿主机的哪个目录或者想方便地备份可以使用“绑定挂载”bind mount。在docker-compose.yml中找到volumes部分将匿名卷改为指向主机目录services: milvus-standalone: ... volumes: - ./milvus_data:/var/lib/milvus # 将容器内数据目录映射到当前目录下的 milvus_data 文件夹 minio: ... volumes: - ./minio_data:/minio/data # MinIO 对象存储的数据 etcd: ... volumes: - ./etcd_data:/etcd_data这样所有数据都会保存在~/milvus/目录下的对应文件夹里。备份时直接打包这些文件夹即可。6.3 服务管理与监控启停服务在docker-compose.yml所在目录docker-compose stop停止服务docker-compose start启动docker-compose restart重启。查看日志docker-compose logs -f可以实时查看所有服务的日志-f是跟随模式。排查问题时非常有用。进入容器如果需要检查容器内部状态可以用docker-compose exec milvus-standalone bash进入 Milvus 容器。监控资源使用docker stats命令可以实时查看所有容器的 CPU、内存、网络 IO 使用情况。6.4 后续开发建议代码与数据分离在虚拟机里只部署基础设施Docker Milvus。你的 LangChain 应用代码可以在宿主机上用 IDE 编写然后通过共享文件夹或者 Git 同步到虚拟机内测试。这样开发体验更好。使用版本控制将你的docker-compose.yml和 Python 测试脚本都纳入 Git 管理。方便回滚和记录配置变更。快照是好习惯在虚拟机管理界面如 VMware Workstation 或 VirtualBox在完成 Docker 安装、完成 Milvus 安装、以及整个环境调通后分别创建快照。一旦后续实验把环境搞乱可以快速回退到干净状态。这套环境搭建完成后你就拥有了一个功能完整的向量数据库后端。接下来你可以深入探索 LangChain 的各种组件如 RetrievalQA、Agents结合不同的 Embedding 模型和 LLM在这个稳定的基础上构建复杂的 RAG 应用或 AI Agent而不用担心基础环境的问题。
返回列表