组件简介:
1、DeepSeek:
提供强大的文本理解和生成能力。
作为语言模型的核心,负责生成高质量的回答。
2、Ollama:
作为一个开源框架,管理 DeepSeek 模型的加载和推理。
支持多种大模型,提供轻量级的接口。
3、Dify:
Dify 是一个开源的项目,旨在为开发者和企业提供一站式的大语言模型(LLM)应用开发解决方案。
它可以帮助用户快速构建、定制和部署基于大语言模型的应用程序,而无需深入理解复杂的底层技术细节。
系统环境:
这里使用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
:wq! #保存退出
/sbin/sysctl -p
ulimit -a #查看
ulimit -n 1000000 #设置
5、安装Docker
Dify我们使用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:11434" #服务将绑定到主机的所有网络接口,正式环境请按需设置,限制ip
Environment="OLLAMA_ORIGINS=*" #允许来自所有来源的请求,正式环境请务必配置防火墙限制使用来源
Environment="OLLAMA_MODELS=/data/server/ollama/models" #自定义模型存储的目录
[Install]
WantedBy=default.target
:wq! #保存退出
特别说明:
这两个参数请根据自己的实际情况修改,请勿照抄
建议配合外部防火墙限制端口和使用ip,服务器安全第一
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"
如果你希望 Ollama 服务仅限于本机访问,可以设置如下:
Environment="OLLAMA_HOST=127.0.0.1"
Environment="OLLAMA_ORIGINS=http://localhost"
如果你希望 Ollama 服务只能被特定 IP 地址访问,可以设置如下
Environment="OLLAMA_HOST=192.168.1.100"
Environment="OLLAMA_ORIGINS=http://192.168.1.100"
如果你希望 Ollama 服务支持多个来源的请求,可以设置如下:
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=http://example.com,http://another-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、安装Dify
官方网站:https://dify.ai/zh
下载地址:https://github.com/langgenius/dify/archive/refs/heads/main.zip
下载之后是一个dify-main.zip的文件
上传安装文件到服务器/usr/local/src目录
cd /usr/local/src
unzip dify-main.zip
cd /usr/local/src/dify-main/docker
mv .env.example .env
#查看docker镜像
[root@localhost docker]# cat docker-compose.yaml |grep image
image: langgenius/dify-api:0.15.3
image: langgenius/dify-api:0.15.3
image: langgenius/dify-web:0.15.3
image: postgres:15-alpine
image: redis:6-alpine
image: langgenius/dify-sandbox:0.2.10
image: ubuntu/squid:latest
image: certbot/certbot
image: nginx:latest
image: semitechnologies/weaviate:1.19.0
image: langgenius/qdrant:v1.7.3
image: pgvector/pgvector:pg16
image: tensorchord/pgvecto-rs:pg16-v0.3.0
image: ghcr.io/chroma-core/chroma:0.5.20
image: quay.io/oceanbase/oceanbase-ce:4.3.3.0-100000142024101215
image: container-registry.oracle.com/database/free:latest
image: quay.io/coreos/etcd:v3.5.5
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
image: milvusdb/milvus:v2.5.0-beta
image: opensearchproject/opensearch:latest
image: opensearchproject/opensearch-dashboards:latest
image: myscale/myscaledb:1.6.4
image: docker.elastic.co/elasticsearch/elasticsearch:8.14.3
image: docker.elastic.co/kibana/kibana:8.14.3
image: downloads.unstructured.io/unstructured-io/unstructured-api:latest
[root@localhost docker]#
#实际上用到得镜像有8个
image: langgenius/dify-api:0.15.3
image: langgenius/dify-web:0.15.3
image: nginx:latest
image: postgres:15-alpine
image: redis:6-alpine
image: langgenius/dify-sandbox:0.2.10
image: ubuntu/squid:latest
image: semitechnologies/weaviate:1.19.0
#启动之后有9个容器,其中api镜像启动了2个容器
#3个业务服务:api、worker、web
#6个基础组件:weaviate、db、redis、nginx、ssrf_proxy、sandbox
安装Dify需要8个docker镜像
1、langgenius/dify-api:0.15.3
2、langgenius/dify-web:0.15.3
3、nginx:latest
4、postgres:15-alpine
5、redis:6-alpine
6、langgenius/dify-sandbox:0.2.10
7、ubuntu/squid:latest
8、semitechnologies/weaviate:1.19.0
需要先下载这些镜像
从docker直接下载镜像会很慢,我们使用第三方镜像仓库https://docker.aityp.com/下载并修改镜像标签
1、langgenius/dify-api:0.15.3
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-api:0.15.3
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-api:0.15.3 docker.io/langgenius/dify-api:0.15.3
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-api:0.15.3
2、langgenius/dify-web:0.15.3
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-web:0.15.3
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-web:0.15.3 docker.io/langgenius/dify-web:0.15.3
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-web:0.15.3
3、nginx:latest
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest docker.io/nginx:latest
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest
4、postgres:15-alpine
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:15-alpine
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:15-alpine docker.io/postgres:15-alpine
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:15-alpine
5、redis:6-alpine
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:6-alpine
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:6-alpine docker.io/redis:6-alpine
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:6-alpine
6、
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-sandbox:0.2.10
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-sandbox:0.2.10 docker.io/langgenius/dify-sandbox:0.2.10
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/langgenius/dify-sandbox:0.2.10
7、ubuntu/squid:latest
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu/squid:latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu/squid:latest docker.io/ubuntu/squid:latest
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu/squid:latest
8、semitechnologies/weaviate:1.19.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/semitechnologies/weaviate:1.19.0
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/semitechnologies/weaviate:1.19.0 docker.io/semitechnologies/weaviate:1.19.0
docker rmi wr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/semitechnologies/weaviate:1.19.0
#创建容器
cd /usr/local/src/dify-main/docker
docker compose up -d
docker ps #查看容器
docker compose down #移除容器命令
docker volume prune #移除卷
4、设置Dify
打开http://10.189.189.246/
列出模型
[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
添加模型
模型类型:LLM
模型名称:deepseek-r1:latest
基础 Url:http://10.189.189.246:11434/
最大token数:4096
确定
再添加模型
模型类型:Text Embedding
模型名称:bge-m3:latest
基础 Url:http://10.189.189.246:11434/
最大token数:4096
确定
#相关截图
至此,Linux下DeepSeek+Ollama+Dify搭建本地知识库完成。



