组件简介:
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搭建本地知识库完成。
![](/images/weixin.png)
![系统运维技术交流□Ⅰ 系统运维技术交流□Ⅰ](http://pub.idqqimg.com/wpa/images/group.png)
![系统运维技术交流™Ⅱ 系统运维技术交流™Ⅱ](http://pub.idqqimg.com/wpa/images/group.png)
![系统运维技术交流™Ⅲ 系统运维技术交流™Ⅲ](http://pub.idqqimg.com/wpa/images/group.png)