技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页Linux>正文
DeepSeek+Ollama‌+RAGFlow搭建本地知识库
2025年02月12日 Linux 暂无评论 ⁄ 被围观 156次+

组件简介:

1、DeepSeek:

提供强大的文本理解和生成能力。

作为语言模型的核心,负责生成高质量的回答。

2、Ollama:

作为一个开源框架,管理 DeepSeek 模型的加载和推理。

支持多种大模型,提供轻量级的接口。

3、RAGFlow:

实现检索增强生成(Retrieval-Augmented Generation)。

结合向量数据库(如 Elasticsearch 等)进行高效检索。

将检索到的相关文档片段与语言模型结合,生成更准确的回答。

系统环境:

这里使用Rocky Linux 9.x系统部署

CPU :4核

内存: 16GB

磁盘: 150GB

准备篇

1、禁用SELinux

rpm -q grubby #确认grubby软件包是否已经安装

grubby --update-kernel ALL --args selinux=0 #添加selinux=0到内核​​命令行

shutdown -r now #重启系统

getenforce #查看结果为Disabled

2、防火墙设置

Rocky Linux 9.x默认是firewalld防火墙,因为‌Docker需要iptables,我们这里卸载firewall,安装iptables作为防火墙,并清空防火墙规则

2.1关闭firewall

systemctl stop firewalld.service

systemctl disable firewalld.service

systemctl mask firewalld

systemctl stop firewalld

yum -y remove firewalld

2.2安装iptables防火墙,开启相应的端口

yum -y install iptables-services #安装

systemctl enable iptables.service #设置防火墙开机启动

systemctl start iptables.service #启动防火墙使配置生效

iptables -F #清空规则

service iptables save #保存配置规则

systemctl restart iptables.service #启动防火墙使配置生效

iptables -L -v -n #查看规则

3、设置系统时间

localectl set-locale LC_TIME=C.UTF-8 #让date默认显示为 24 小时制

vi /etc/locale.conf

LC_TIME=C.UTF-8

:wq! #保存退出

source /etc/locale.conf #使配置生效

rm -rf /etc/localtime #先删除默认的时区设置

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #替换亚洲/上海作为默认时区

vi /etc/sysconfig/clock #添加时区

Zone=Asia/Shanghai

:wq! #保存退出

timedatectl set-local-rtc 0

hwclock --systohc -u #系统时钟和硬件时钟同步,当前系统时区不为 UTC,是CST时间,所有要加-u参数

date #显示系统时间

date -s "2025-02-11 15:24:00" #修改时间

watch -n 1 date #显示实时时间

vi /etc/chrony.conf

#pool 2.rocky.pool.ntp.org iburst #注释

server ntp.aliyun.com iburst #添加

:wq! #保存退出

systemctl enable chronyd #重启服务

systemctl restart chronyd #重启服务

chronyc sources -v #查看时间同步信息

4、系统参数优化

vi /etc/security/limits.conf #在最后一行添加以下代码

* soft nproc unlimited

* hard nproc unlimited

* soft nofile 1000000

* hard nofile 1000000

:wq! #保存退出

vi /etc/sysctl.conf #在最后一行添加以下代码

fs.file-max = 65535000

fs.nr_open = 65535000

kernel.pid_max=655350

vm.swappiness = 0

net.ipv4.ip_forward = 1

vm.max_map_count=262144 #安装ragflow需要设置此参数

:wq! #保存退出

/sbin/sysctl -p

ulimit -a #查看

ulimit -n 1000000 #设置

5、安装Docker

RAGFlowI‌我们使用docker镜像的方式来部署

#卸载旧版本,如果没有安装就不需要执行

yum remove docker docker-client docker-client-latest docker-latest docker-latest-logrotate docker-logrotate docker-common docker-selinux docker-engine-selinux docker-engine docker-ce-cli

rpm -qa|grep docker

#安装工具包

yum install unzip wget yum-utils -y

#添加docker仓库

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

或者

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装docker

yum list docker-ce docker-ce-cli containerd.io --showduplicates #列出可用的docker版本

yum install -y docker-ce-27.5.1-1.el9 docker-ce-cli-27.5.1-1.el9 containerd.io #安装指定版本

docker --version #查看版本

#启动dokcer并开机自启

systemctl daemon-reload

systemctl start docker

systemctl enable docker

docker info |grep "Docker Root Dir"

#设置daemon.json配置文件,修改默认存储目录和运行模式,添加镜像地址

#Docker默认使用/var/lib/docker作为存储目录,用来存放拉取的镜像和创建的容器

#/var目录一般都位于系统盘,我们修改Docker的默认存储目录到数据盘/data/server/docker

mkdir -p /etc/docker

mkdir -p /data/server/docker #创建docker数据存储目录

vi /etc/docker/daemon.json

{

"data-root": "/data/server/docker",

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

},

"storage-driver": "overlay2",

"registry-mirrors": [

"http://docker.m.daocloud.io",

"http://mirror.ccs.tencentyun.com",

"http://docker.rainbond.cc"

]

}

:wq! #保存退出,注意格式缩进

vi /lib/systemd/system/docker.service #修改Docker的配置文件以启用Docker API

#找到ExecStart这一行,将其修改为

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

:wq! #保存退出

systemctl daemon-reload

systemctl restart docker

#检查Docker API的状态,如果返回的结果为OK,则表示Docker API已经成功启用

curl http://localhost:2375/_ping

#查看docker数据存储目录

docker info |grep "Docker Root Dir"

#检查 JSON 格式,确保没有多余的逗号或错误的括号

#Docker 17.05 及以后的版本使用 "data-root"设置目录,旧版本使用"graph": "/data/server/docker"

#相关检测命令

cat /etc/docker/daemon.json | jq .

systemctl daemon-reload

systemctl restart docker

docker info

docker info | grep Cgroup

#安装Docker-Compose

Docker-Compose是docker提供的一个命令行工具,用来定义和运行由多个容器组成的应用。

使用Docker-Compose,我们可以通过yaml文件定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

Docker-Compose依靠Docker进行工作,必须确保已经安装了docker才能安装Docker-Compose

Docker-Compose下载地址(需要科学上网):https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-linux-x86_64

#拷贝Docker-Compose到/usr/bin目录

cp docker-compose-linux-x86_64 /usr/bin/docker-compose

#添加执行权限

chmod +x /usr/bin/docker-compose

#查看版本,Docker-Compose要和Docker的版本匹配,Docker-Compose:v2.32.4可以适用于Docker version 27.5.1

docker-compose --version

二、安装篇

1、安装ollama

1.1下载ollama

我们使用Linux系统来部署ollama

#查看Linux版本号

cat /proc/version

#查看cpu架构

lscpu

x86_64 CPU选择下载ollama-linux-amd64

aarch64|arm64 CPU选择下载ollama-linux-arm64

下载地址(需要科学上网):https://github.com/ollama/ollama/releases/download/v0.5.8/ollama-linux-amd64.tgz

上传安装文件到服务器/usr/local/src目录

1.2配置ollama

解压ollama安装包到/usr目录

cd /usr/local/src

tar -C /usr -xzf ollama-linux-amd64.tgz

#设置Ollama为开机自启动,并设置运行账号为ollama

#创建用户ollama

useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama

usermod -a -G ollama $(whoami)

1.3添加ollama自启动服务

vi /etc/systemd/system/ollama.service

[Unit]

Description=Ollama Service

After=network-online.target

[Service]

ExecStart=/usr/bin/ollama serve

User=ollama

Group=ollama

Restart=always

RestartSec=3

Environment="PATH=$PATH"

Environment="OLLAMA_HOST=0.0.0.0" #服务将绑定到主机的所有网络接口

Environment="OLLAMA_ORIGINS=*" #允许来自所有来源的请求(用于跨域资源共享,CORS 设置)

[Install]

WantedBy=default.target

:wq! #保存退出

参数说明:

OLLAMA_HOST=0.0.0.0: 服务需要支持外部访问时使用;如果只需要本地调用,可以改为 127.0.0.1。

OLLAMA_ORIGINS=*: 在开发环境中方便调试;生产环境建议配置为指定域名以限制访问来源,Environment="OLLAMA_ORIGINS=https://trusted-domain.com"

如需进一步增强安全性,可以结合防火墙、身份验证等措施来保护服务。

systemctl daemon-reload

systemctl enable ollama

systemctl start ollama 启动

systemctl stop ollama 关闭

systemctl restart ollama 重启

systemctl status ollama 查看状态

#验证安装

ollama -h

查看日志

journalctl -e -u ollama

ollama -v

#浏览器打开服务器本地ip地址

http://10.189.189.246:11434/

Ollama is running

说明安装成功

2、在ollama中部署大模型

模型库:https://ollama.com/library

我们需要2个模型

https://ollama.com/library/deepseek-r1 #对话模型

ollama run deepseek-r1:7b #拉取模型,需要一些时间

https://ollama.com/library/bge-m3 #向量模型

ollama pull bge-m3 #拉取模型,需要一些时间

#等待模型拉取完成之后出现下面的提示

success

>>> Send a message (/? for help)

#现在已经可以在命令行下面使用这个模型了

#ollama 使用常见的指令

ollama serve #启动ollama

ollama create #从模型文件创建模型

ollama show #显示模型信息

ollama run #运行模型

ollama pull #从注册表中拉取模型

ollama push #将模型推送到注册表

ollama list #列出模型

ollama cp #复制模型

ollama rm #删除模型

ollama help #获取有关任何命令的帮助信息

ollama -v #查看版本

Ctrl + z #挂起任务

fg #恢复

jobs #查看任务,

fg %1 #恢复到前台

bg %1 #恢复到后台

3、安装RAGFlow

官方网站:https://github.com/infiniflow/ragflow

下载地址:https://github.com/infiniflow/ragflow/archive/refs/heads/main.zip

下载之后是一个ragflow-main.zip的文件

上传安装文件到服务器/usr/local/src目录

cd /usr/local/src

unzip ragflow-main.zip

cd /usr/local/src/ragflow-main/docker

#查看docker的具体版本

[root@localhost docker]# cat docker-compose-base.yml |grep image

image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}

image: infiniflow/infinity:v0.6.0-dev3

# mysql:5.7 linux/arm64 image is unavailable.

image: mysql:8.0.39

image: quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

image: valkey/valkey:8

[root@localhost docker]# cat .env |grep STACK_VERSION

STACK_VERSION=8.11.3

[root@localhost docker]# cat .env |grep RAGFLOW_IMAGE

RAGFLOW_IMAGE=infiniflow/ragflow:v0.16.0-slim

从上面两个文件docker-compose-base.yml和.env中可以获取到镜像的具体版本信息

安装RAGFlow需要6个docker镜像

1、docker.elastic.co/elasticsearch/elasticsearch:8.11.3

2、infiniflow/infinity:v0.6.0-dev3

3、mysql:8.0.39

4、quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

5、valkey/valkey:8

6、infiniflow/ragflow:v0.16.0-slim

需要先下载这些镜像

从docker直接下载镜像会很慢,我们使用第三方镜像仓库https://docker.aityp.com/下载并修改镜像标签

1、docker.elastic.co/elasticsearch/elasticsearch:8.11.3

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.11.3

docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.11.3 docker.elastic.co/elasticsearch/elasticsearch:8.11.3

docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.11.3

2、infiniflow/infinity:v0.6.0-dev3

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/infinity:v0.6.0-dev3

docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/infinity:v0.6.0-dev3 docker.io/infiniflow/infinity:v0.6.0-dev3

docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/infinity:v0.6.0-dev3

3、mysql:8.0.39

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39

docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39 mysql:8.0.39

docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39

4、quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

5、valkey/valkey:8

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8

docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8 valkey/valkey:8

docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8

6、infiniflow/ragflow:v0.16.0-slim

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/ragflow:v0.16.0-slim

docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/ragflow:v0.16.0-slim docker.io/infiniflow/ragflow:v0.16.0-slim

docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/ragflow:v0.16.0-slim

docker images #查看镜像

#通过加载环境变量并替换模板文件中的占位符,生成用于启动 Elasticsearch 容器的完整 docker-compose.yml 文件,确保容器能够正确启动。

#重要设置,不然elasticsearch容器可能会启动失败

cd /usr/local/src/ragflow-main/docker

set -a

source .env

set +a

envsubst < docker-compose-base.yml

#创建容器

cd /usr/local/src/ragflow-main/docker

docker compose -f docker-compose.yml up -d

docker logs -f ragflow-server #查看日志

docker ps #查看容器

4、设置RAGFlow

列出模型

[root@localhost ~]# ollama list

NAME ID SIZE MODIFIED

bge-m3:latest 790764642607 1.2 GB 1 hours ago

deepseek-r1:latest 0a8c26691023 4.7 GB 1 hours ago

打开http://10.189.189.246/

添加模型

模型类型:chat

模型名称:deepseek-r1:latest

基础 Url:http://10.189.189.246:11434/

最大token数:64000

确定

再添加模型

模型类型:embedding

模型名称:bge-m3:latest

基础 Url:http://10.189.189.246:11434/

最大token数:64000

确定

系统模型设置:

聊天模型:ollama list

嵌入模型:bge-m3:latest

确定

嵌入模型:bge-m3:latest

上传文件

上传完成后,对文件进行解析

新建聊天

选择刚才创建好的知识库

可以进行对话了

知识库测试文件

三种向量模型的对比,可以根据自己的需求选择。

至此,DeepSeek+Ollama‌+RAGFlow搭建本地知识库完成。

 

 

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2025 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3