部署milvus 向量数据库与可视化attu
AI 大模型开发

部署milvus 向量数据库与可视化attu

JACIN··16 分钟阅读

docker-compose 部署#

部署minio#

首选会使用到 Minio 因为我之前配过,所以这里直接使用了即可。 注意需要自己的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD

text
services:
  minio:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    container_name: minio
    ports:
      - "49110:9000"
      - "49111:9001"
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: pass
    command: server /data --console-address ":9001"
    volumes:
      - ./data:/data
      #- /data/minio_data:/data
      - ./config:/root/.minio
    networks:
      - mynetwork

networks:
  mynetwork:
    external: true

milvus 其他的服务#

注意修改MINIO_ACCESS_KEY_ID 和MINIO_SECRET_ACCESS_KEY 的值。

text
version: '3.5'

services:
  # 1. Etcd: 仅内部访问,不暴露端口
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.5
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - ./volumes/etcd:/etcd
    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3
    networks:
      - mynetwork

  # 2. Milvus Standalone: 核心服务 (开启鉴权)
  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.0
    command: ["milvus", "run", "standalone"]
    security_opt:
      - seccomp:unconfined
    environment:
      # 连接内部 Etcd
      ETCD_ENDPOINTS: etcd:2379
      # 连接外部 MinIO (使用容器名 minio 和容器内部端口 9000)
      MINIO_ADDRESS: minio:9000
      # 使用你提供的 MinIO 账号密码
      MINIO_ACCESS_KEY_ID: admin
      MINIO_SECRET_ACCESS_KEY: pass
      MINIO_BUCKET_NAME: milvus-bucket # 建议指定一个 Bucket
    volumes:
      - ./volumes/milvus:/var/lib/milvus
      # 挂载刚才创建的配置文件,强制开启鉴权
      - ./volumes/milvus/configs/milvus.yaml:/milvus/configs/milvus.yaml
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    ports:
      - "19530:19530" # RPC 端口,对外暴露用于代码连接
      - "9091:9091"   # HTTP 端口,用于健康检查
    depends_on:
      - "etcd"
    networks:
      - mynetwork

  # 3. Attu: Web UI (也会要求输入密码)
  attu:
    container_name: attu
    image: zilliz/attu:v2.4.0
    environment:
      MILVUS_URL: standalone:19530
    ports:
      - "8000:3000" # Web UI 对外端口
    depends_on:
      - "standalone"
    networks:
      - mynetwork

# 引入外部网络
networks:
  mynetwork:
    external: true

先启动 Minio 然后启动这个 docker-compose 的文件。 一开始启动会报错,不要急。

text
# 1. 停止容器
docker compose down

# 2. 删除旧配置
rm -rf ./volumes/milvus/configs/milvus.yaml

用命令拉取官方原版:

text
# 确保目录存在
mkdir -p ./volumes/milvus/configs

# 下载官方 v2.5.0 配置
wget -O ./volumes/milvus/configs/milvus.yaml https://raw.githubusercontent.com/milvus-io/milvus/v2.5.0/configs/milvus.yaml

修改配置开启鉴权

text
vim ./volumes/milvus/configs/milvus.yaml

输入 /authorizationEnabled 回车搜索。

找到 authorizationEnabled: false。

一定要改成 authorizationEnabled: true。

保存退出 (:wq)。

重新启动即可: docker compose up -d

image|690x479

Milvus 开启鉴权后的默认初始账号密码如下:

  • 用户名 (Username): root
  • 密码 (Password): Milvus (注意:M 是大写的)

登录进去后修改密码即可: image|690x243

容器说明#

1. milvus-standalone (核心大脑)#

  • 角色: 图书管理员 / 计算中心
  • 你的端口: 19530 (代码连接用), 9091 (监控用)
  • 它是干嘛的: 这是 Milvus 的本体。它不直接存书(数据文件),也不记账(元数据)。 它的工作全是脑力活
    • 你发给它一句话,它负责指挥怎么存。
    • 你问它“这书在哪?”,它负责去算向量距离(用你强大的 CPU 进行数学计算)。
    • 它是整个系统的CPU,负责逻辑和计算。

2. minio (大仓库)#

  • 角色: 书架 / 仓库
  • 你的端口: 9000 (存取接口), 9001 (网页后台)
  • 它是干嘛的: 这是对象存储(相当于开源版的 AWS S3)。 Milvus 产生的所有**“干货”**都扔在这里面:
    • 你插入的一百万条向量数据。
    • 建立好的索引文件。
    • 系统的日志。
    • 重点: 如果你把这个容器删了,你的数据就全没了。Milvus 本身是个空壳,数据都在 MinIO 里。

3. milvus-etcd (记账本)#

  • 角色: 目录索引卡 / 记账员
  • 你的端口: 2379 (内部通信)
  • 它是干嘛的: 这是元数据存储。它存的不是具体的书(数据),而是关于书的信息
    • “现在又几个表(Collection)?”
    • “这个表有几个字段?”
    • “MinIO 里的那个文件,属于哪张表?”
    • 重点: 它负责记录系统的状态。如果没有它,Milvus 就算有数据(在 MinIO 里),也不知道这些数据是谁的,系统就会变“痴呆”。

4. attu (前台接待)#

  • 角色: 触摸屏查询机 / 门面
  • 你的端口: 8000 (浏览器访问)
  • 它是干嘛的: 这是可视化管理界面。 Milvus 本身是黑乎乎的命令行工具,Attu 给了你一个漂亮的网页:
    • 让你能用鼠标点一点就看到库里有多少数据。
    • 测试向量搜索。
    • 修改密码(你刚才就在这改的)。
    • 它其实就是一个网页程序,它在后台悄悄调用 Milvus 的接口(19530)帮你干活。

评论

还没有评论,来发第一个吧