本地RTX3080部署RAG知识库

适用环境:WSL2 (Ubuntu 22.04) + NVIDIA RTX 3080 20GB + Docker;部署日期:2026-08-08;RAGFlow 版本:v0.26.4。

1. 环境要求

环境要求概览


2. 前置条件安装

2.1 Docker 权限配置

确保当前用户属于 docker 组,否则无法执行 Docker 命令:

sudo usermod -aG docker $USER
newgrp docker

验证

docker ps

2.2 安装 NVIDIA Container Toolkit

Ollama 容器需要 GPU 直通,必须安装 NVIDIA Container Toolkit:

添加 NVIDIA 仓库 GPG Key

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

添加 APT 源

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

安装

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

配置 Docker runtime

sudo nvidia-ctk runtime configure --runtime=docker

重启 Docker

sudo systemctl restart docker

验证:应看到 nvidia runtime

docker info | grep -i runtime

预期输出: Runtimes: io.containerd.runc.v2 nvidia runc

NVIDIA Container Toolkit 验证


3. 获取 RAGFlow 源码

git clone https://github.com/infiniflow/ragflow.git ~/ragflow

国内镜像(如无法访问 GitHub):

git clone https://gitee.com/mirrors/ragflow.git ~/ragflow

4. 配置修改

所有配置文件位于 ~/ragflow/docker/ 目录下。

4.1 修改 .env — 端口与基础配置

cd ~/ragflow/docker

编辑 .env 文件,修改以下关键项:

# ===== 端口配置(避免与已有服务冲突) =====
# Web 访问端口(原值 80,改为 980 避免与 Dify 的 Nginx 冲突)
SVR_WEB_HTTP_PORT=980
SVR_WEB_HTTPS_PORT=9443
# MySQL 对外暴露端口(原值 3306,改为 13306 避免冲突)
EXPOSE_MYSQL_PORT=13306
# 以下端口保持默认
SVR_HTTP_PORT=9380
ADMIN_SVR_HTTP_PORT=9381
SVR_MCP_PORT=9382
GO_HTTP_PORT=9384
GO_ADMIN_PORT=9383
# ===== 向量数据库类型 =====
DOC_ENGINE=elasticsearch
# ===== 设备类型 =====
DEVICE=cpu
# ===== Compose Profile =====
COMPOSE_PROFILES=${DOC_ENGINE},${DEVICE}
# ===== 时区 =====
TZ=Asia/Shanghai
# ===== RAGFlow 镜像 =====
RAGFLOW_IMAGE=infiniflow/ragflow:v0.26.4
# 国内镜像备选:
# RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.4
# RAGFLOW_IMAGE=registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:v0.26.4
# ===== 默认密码(生产环境务必修改) =====
ELASTIC_PASSWORD=infini_rag_flow
MYSQL_PASSWORD=infini_rag_flow
MINIO_PASSWORD=infini_rag_flow
REDIS_PASSWORD=infini_rag_flow

4.2 修改 docker-compose.yml — 移除不存在的迁移脚本

编辑 ~/ragflow/docker/docker-compose.yml,找到 ragflow-cpu 服务的 command 部分:

修改前:

command:
- --enable-adminserver
- --init-model-provider-tables

修改后:

command:
- --enable-adminserver

注:--init-model-provider-tables 会调用 tools/scripts/run_migrations.sh,该文件在 Docker 镜像中不存在,会导致容器反复重启。

4.3 修改 docker-compose-base.yml — 修复 Docker Compose v5 验证错误

编辑 ~/ragflow/docker/docker-compose-base.yml,找到 sandbox-executor-manager 服务:

删除以下行:

security_opt:
- no-new-privileges:true

注:Docker Compose v5 对 security_opt 重复项验证过严,即使只有一项也会报错 “items at 0 and 1 are equal”。由于 sandbox profile 未启用,直接移除即可。

4.4 新建 docker-compose.override.yml — 添加 Ollama 服务

~/ragflow/docker/ 目录下创建 docker-compose.override.yml

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ragflow-ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    networks:
      - ragflow
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
volumes:
  ollama_data:
    driver: local

注:Ollama 加入 RAGFlow 的 ragflow 网络,使 RAGFlow 容器可通过容器名 ragflow-ollama 访问 Ollama API。


5. 启动服务

5.1 启动所有容器

cd ~/ragflow/docker

docker compose \{
}-p ragflow \{
}-f docker-compose-base.yml \{
}-f docker-compose.yml \{
}-f docker-compose.override.yml \{
}--profile elasticsearch \{
}--profile cpu \{
}up -d

重要:必须使用 -p ragflow 指定项目名,避免与 Dify 等其他 Compose 项目(默认项目名同为 docker)产生容器名冲突。

5.2 验证服务状态

docker ps --filter name=ragflow --format "table {{.Names}}	{{.Status}}	{{.Ports}}"

ragflow 容器运行状态

5.3 验证 Web 可访问

curl -s -o /dev/null -w "%{http_code}" http://localhost:980

Web 端口 980 返回 200


6. 拉取 Ollama 模型

6.1 模型选择参考

Ollama 模型选择参考

注:最后笔者选了qwen3:14b

6.2 拉取模型

# 对话模型(按需选择一个)
docker exec ragflow-ollama ollama pull qwen3:14b
# Embedding 模型
docker exec ragflow-ollama ollama pull bge-m3

6.3 验证模型

docker exec ragflow-ollama ollama list

ollama list 已安装模型

6.4 测试模型推理

测试对话模型

docker exec ragflow-ollama ollama run qwen3:14b "你好,请用一句话介绍自己"

qwen3:14b 推理测试

测试 Embedding 模型

curl http://localhost:11434/api/embeddings \{
}-d '{"model": "bge-m3", "prompt": "测试文本"}'

bge-m3 embedding 测试


7. RAGFlow 中配置 Ollama 模型

7.1 登录 RAGFlow

浏览器访问 http://localhost:980,注册账号并登录。

7.2 添加 Ollama 模型提供商

1. 进入 系统设置模型提供商Ollama
2. 点击 添加模型,填写以下信息:

Chat 模型(对话)

模型名称 : qwen3:14b
模型类型 : Chat
Base URL : http://ragflow-ollama:11434

Embedding 模型(向量化)

模型名称 : bge-m3
模型类型 : Embedding
Base URL : http://ragflow-ollama:11434

注:Base URL 必须使用 Docker 内部网络容器名 ragflow-ollama,而非 localhost127.0.0.1,因为 RAGFlow 和 Ollama 运行在同一 Docker 网络中。

7.3 设置默认模型

进入 系统设置系统模型设置,将以下模型设为默认:

Chat 模型: qwen3:14b
Embedding 模型: bge-m3


8. 服务管理命令

8.1 启动/停止/重启

# 定义快捷变量(建议加入 ~/.bashrc)
export RAGFLOW_COMPOSE="docker compose -p ragflow -f docker-compose-base.yml -f docker-compose.yml -f docker-compose.override.yml --profile elasticsearch --profile cpu"
cd ~/ragflow/docker

# 启动
$RAGFLOW_COMPOSE up -d

# 停止
$RAGFLOW_COMPOSE down

# 重启单个服务
$RAGFLOW_COMPOSE restart ragflow-cpu

# 查看日志
$RAGFLOW_COMPOSE logs -f ragflow-cpu
$RAGFLOW_COMPOSE logs -f ollama

8.2 Ollama 模型管理

# 列出已安装模型
docker exec ragflow-ollama ollama list

# 拉取新模型
docker exec ragflow-ollama ollama pull <model_name>

# 删除模型
docker exec ragflow-ollama ollama rm <model_name>

# 查看模型详情
docker exec ragflow-ollama ollama show qwen3:14b

8.3 数据备份

# MySQL 备份
docker exec ragflow-mysql-1 mysqldump -uroot -pinfini_rag_flow rag_flow > ragflow_backup.sql

# MinIO 数据备份(知识库文件)
docker cp ragflow-minio-1:/data /tmp/minio_backup

9. 服务端口汇总

服务端口汇总


10. 常见问题排查

Q1: 容器启动后反复重启

# 查看容器日志
docker logs ragflow-ragflow-cpu-1 --tail 50

# 常见原因:
# - --init-model-provider-tables 标志导致迁移脚本找不到 → 参见 4.2 节移除
# - MySQL 未就绪 → 等待 MySQL healthy 后重启
docker restart ragflow-ragflow-cpu-1

Q2: Ollama 容器启动失败 “could not select device driver nvidia”

原因:NVIDIA Container Toolkit 未安装或未配置
解决:参见 2.2 节安装 NVIDIA Container Toolkit

# 验证
docker info | grep nvidia

Q3: Docker Compose 报错 “security_opt items at 0 and 1 are equal”

原因:Docker Compose v5 验证过严
解决:参见 4.3 节移除 sandbox-executor-manager 的 security_opt

Q4: 与已有服务(如 Dify)容器名冲突

原因:多个 Compose 项目使用相同默认项目名 docker
解决:启动时必须指定 -p ragflow

若已冲突,先停止再重新启动:

cd ~/ragflow/docker
docker compose -f docker-compose-base.yml -f docker-compose.yml down
docker compose -p ragflow -f docker-compose-base.yml -f docker-compose.yml \{
}-f docker-compose.override.yml --profile elasticsearch --profile cpu up -d

Q5: RAGFlow 中添加 Ollama 模型连接失败

# 检查 Ollama 是否在 RAGFlow 同一网络
docker network inspect ragflow_ragflow

# 确认 Base URL 使用容器名而非 localhost
# 正确: http://ragflow-ollama:11434
# 错误: http://localhost:11434

Q6: 显存不足导致模型加载失败

# 查看当前显存使用
nvidia-smi

# 若显存不足,换用更小的模型
docker exec ragflow-ollama ollama pull qwen2.5:7b

# 或设置 Ollama 自动卸载(默认5分钟空闲后卸载)
# 环境变量 OLLAMA_KEEP_ALIVE=5m

11. 文件结构参考

~/ragflow/docker/
├── .env                                      # 环境变量配置(已修改端口)
├── docker-compose.yml                        # 主 Compose 文件(已修改 command)
├── docker-compose-base.yml                   # 基础服务(已移除 security_opt)
├── docker-compose.override.yml               # 自定义覆盖(新增 Ollama 服务)
├── service_conf.yaml.template                # 服务配置模板
├── entrypoint.sh                             # 入口脚本
├── init.sql                                  # MySQL 初始化
├── ragflow-logs/                             # RAGFlow 日志目录
└── nginx/                                    # Nginx 配置

12. 快速部署脚本(一键执行版)

将以下内容保存为 deploy_ragflow.sh,赋予执行权限后运行:

#!/bin/bash
set -e
echo "===== RAGFlow + Ollama 一键部署脚本 ====="

# 1. 安装 NVIDIA Container Toolkit
echo "[1/6] 安装 NVIDIA Container Toolkit..."
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \{
}sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \{
}sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \{
}sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null
sudo apt-get update -qq
sudo apt-get install -y -qq nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
echo "  ✓ NVIDIA Container Toolkit 安装完成"

# 2. 克隆仓库
echo "[2/6] 克隆 RAGFlow 仓库..."
if [ ! -d ~/ragflow ]; then
git clone https://github.com/infiniflow/ragflow.git ~/ragflow
fi
echo "  ✓ 仓库已就绪"

# 3. 修改配置
echo "[3/6] 修改配置文件..."
cd ~/ragflow/docker
# 修改端口
sed -i 's/^SVR_WEB_HTTP_PORT=80$/SVR_WEB_HTTP_PORT=980/' .env
sed -i 's/^SVR_WEB_HTTPS_PORT=443$/SVR_WEB_HTTPS_PORT=9443/' .env
sed -i 's/^EXPOSE_MYSQL_PORT=3306$/EXPOSE_MYSQL_PORT=13306/' .env
# 移除 --init-model-provider-tables
sed -i '/--init-model-provider-tables/d' docker-compose.yml
# 移除 security_opt
sed -i '/security_opt/,/no-new-privileges/d' docker-compose-base.yml
# 创建 override 文件
cat > docker-compose.override.yml << 'OVERRIDE_EOF'
services:
ollama:
image: ollama/ollama:latest
container_name: ragflow-ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
networks:
- ragflow
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama_data:
driver: local
OVERRIDE_EOF
echo "  ✓ 配置修改完成"

# 4. 启动服务
echo "[4/6] 启动服务..."
docker compose -p ragflow \{
}-f docker-compose-base.yml \{
}-f docker-compose.yml \{
}-f docker-compose.override.yml \{
}--profile elasticsearch \{
}--profile cpu \{
}up -d
echo "  ✓ 服务已启动"

# 5. 拉取模型
echo "[5/6] 拉取模型(后台进行)..."
docker exec ragflow-ollama ollama pull bge-m3 &
docker exec ragflow-ollama ollama pull qwen3:14b &
wait
echo "  ✓ 模型拉取完成"

# 6. 验证
echo "[6/6] 验证服务..."
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:980 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ]; then
echo "  ✓ RAGFlow Web 可访问: http://localhost:980"
else
echo "  ⚠ RAGFlow Web 暂未就绪(HTTP $HTTP_CODE),请稍等片刻后重试"
fi
echo ""
echo "===== 部署完成 ====="
echo "RAGFlow Web:  http://localhost:980"
echo "Ollama API:   http://localhost:11434"
echo "MinIO 控制台: http://localhost:9001"
echo ""
echo "模型配置(RAGFlow → 设置 → 模型提供商 → Ollama):"
echo "  Chat:      qwen2.5:14b  →  http://ragflow-ollama:11434"
echo "  Embedding: bge-m3       →  http://ragflow-ollama:11434"

脚本赋权并运行:

chmod +x deploy_ragflow.sh
./deploy_ragflow.sh
Antares

>_ Antares