使用 Ollama + Dify 本地部署 DeepSeek 构建个人知识库

使用 Ollama + Dify 本地部署 DeepSeek 构建个人知识库

闫志聪
2025-04-09 / 0 评论 / 11 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2025年04月09日,已超过43天没有更新,若内容或图片失效,请留言反馈。

1 环境准备

本文所有环境基于 openEuler 22.03 LTS SP4 操作系统

1.1 网络环境

# 配置代理
PROXY_IP=192.168.230.1
PROXY_PORT=10809
export http_proxy=http://${PROXY_IP}:${PROXY_PORT}
export https_proxy=http://${PROXY_IP}:${PROXY_PORT}
export ALL_PROXY=http://${PROXY_IP}:${PROXY_PORT}
export all_proxy=socks://${PROXY_IP}:${PROXY_PORT}


1.2 安装 cuda

# 安装基础工具及内核开发包
$ yum install -y gcc-c++ make dkms kernel-source-$(uname -r) kernel-devel-$(uname -r)

# 下载 cuda 包
$ wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS-SP4/contrib/drivers/x86_64/Packages/cuda_12.4.0_550.54.14_linux.run -P /root

# 安装 cuda 包
$ sh /root/cuda_12.4.0_550.54.14_linux.run
......
===========
= Summary =
===========

Driver:   Installed
Toolkit:  Installed in /usr/local/cuda-12.4/

Please make sure that
 -   PATH includes /usr/local/cuda-12.4/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-12.4/lib64, or, add /usr/local/cuda-12.4/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.4/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Logfile is /var/log/cuda-installer.log

# 配置 PATH 变量
$ sed -i \
      -e '$a \ ' \
      -e "\$a export PATH=$PATH" \
      -e '$a export PATH=$PATH:/usr/local/cuda-12.4/bin' \
/etc/profile

# 刷新 /etc/profile 文件
$ source /etc/profile

# 配置库文件
$ sed -i '$a /usr/local/cuda-12.4/lib64' /etc/ld.so.conf

# 刷新动态链接库
$ ldconfig

# 查看 Nvidia 驱动版本
$ nvidia-smi

# 查看 cuda 版本
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Tue_Feb_27_16:19:38_PST_2024
Cuda compilation tools, release 12.4, V12.4.99
Build cuda_12.4.r12.4/compiler.33961263_0


1.3 安装 docker

1.3.1 安装 docker

# 定义要安装的 docker 版本及架构(x86_64、aarch64)
$ DOCKER_VERSION=26.0.0; DOCKER_ARCH=x86_64

# 从官方仓库下载二进制 docker 压缩包
$ wget https://download.docker.com/linux/static/stable/"${DOCKER_ARCH}"/docker-"${DOCKER_VERSION}".tgz -P /root

# 解压下载的压缩包
$ tar -xvf /root/docker-"${DOCKER_VERSION}".tgz -C /root

# 复制解压的命令到 /usr/bin 目录
$ cp /root/docker/* /usr/bin

# 创建 docker 组,否则会有 could not change group /var/run/docker.sock to docker: group docker not found 的警告信息,并且 cir-docker 会启动失败
$ groupadd docker

# 编写启动文件
$ cat > /etc/systemd/system/docker.service <<"EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

# 配置代理
$ mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://${PROXY_IP}:${PROXY_PORT}"
Environment="HTTPS_PROXY=http://${PROXY_IP}:${PROXY_PORT}"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF

# 修改 cgroup 为 systemd,修改日志驱动
$ [ ! -d "/etc/docker" ] && mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

# 重新加载配置
$ systemctl daemon-reload

# 启动(重启) docker
$ systemctl restart docker && systemctl enable docker

# 查看代理、Cgroup 驱动、日志驱动配置
$ docker info | grep -E "Proxy|Cgroup Driver|Logging Driver"
Logging Driver: json-file
Cgroup Driver: systemd
HTTP Proxy: http://192.168.230.1:10809
HTTPS Proxy: http://192.168.230.1:10809
No Proxy: localhost,127.0.0.1

1.3.2 安装 docker-compose

# 创建插件目录
$ mkdir -p /usr/libexec/docker/cli-plugins

# 定义要安装的 docker-compose 版本及架构(x86_64、aarch64)
$ COMPOSE_VERSION=2.33.0; COMPOSE_ARCH=x86_64

# 从官方仓库下载二进制 docker-compose 命令
$ wget https://github.com/docker/compose/releases/download/v"${COMPOSE_VERSION}"/docker-compose-linux-"${COMPOSE_ARCH}" -P /root

# 安装 docker-compose
$ install -m 755 /root/docker-compose-linux-"${COMPOSE_ARCH}" /usr/libexec/docker/cli-plugins/docker-compose

# 验证 docker-compose 是否安装成功
$ docker compose version
Docker Compose version v2.33.0


2 安装(卸载)ollama

2.1 安装 ollama

2.1.1 在线安装

参考文档:ollama/docs/linux.md at main · ollama/ollama · GitHub

# 安装 ollama(若不指定版本则安装最新版本)
$ curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.11 sh

# 修改 ollama 监听地址,默认监听在回环网卡
$ sed -i '/^Environment=.*/i Environment="OLLAMA_HOST=0.0.0.0:11434"' /etc/systemd/system/ollama.service

# 重新加载配置
$ systemctl daemon-reload

# 重新启动 ollama
$ systemctl restart ollama

# 查看监听的地址
$ netstat -anpt | grep ollama
tcp6       0      0 :::11434        :::*         LISTEN      110562/ollama

2.1.2 本地安装

参考文档:ollama/docs/linux.md at main · ollama/ollama · GitHub

# 指定要安装的 ollama 版本及架构(amd64、arm64)
$ OLLAMA_VERSION=0.5.11; OLLAMA_ARCH=amd64

# 下载安装包
$ wget https://github.com/ollama/ollama/releases/download/v"${OLLAMA_VERSION}"/ollama-linux-"${OLLAMA_ARCH}".tgz -P /root

# 解压并安装
$ tar -xvf /root/ollama-linux-"${OLLAMA_ARCH}".tgz -C /usr

# 创建 ollama 用户、组
$ useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
usermod -a -G ollama $(whoami)

# 编写 service 文件
$ cat > /etc/systemd/system/ollama.service <<EOF
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="PATH=$PATH"

[Install]
WantedBy=default.target
EOF

# 重载配置文件
$ systemctl daemon-reload

# 启动 ollama 并设置开机自启
$ systemctl start ollama && systemctl enable ollama

# 查看监听的地址
$ netstat -anpt | grep ollama
tcp6       0      0 :::11434        :::*         LISTEN      2650/ollama


2.2 卸载 ollama

# 停止 ollama 服务
$ systemctl stop ollama && systemctl disable ollama

# 删除 service 文件
$ rm -rf /etc/systemd/system/ollama.service

# 删除 ollama 二进制文件
$ rm -rf $(which ollama)

# 删除 ollama 库文件
$ rm -rf /usr/local/lib/ollama

# 删除 ollama 用户、组
$ groupdel ollama
userdel ollama

# 删除家目录(同时会删除家目录下的大模型文件)
$ rm -rf /usr/share/ollama


2.3 ollama 使用指南

2.3.1 命令使用指南

$ ollama 
Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama                            # 启动 ollama 服务
  create      Create a model from a Modelfile        # 从 Modelfile 文件创建模型
  show        Show information for a model            # 显示模型信息
  run         Run a model                            # 运行模型,若不存在则先下载
  stop        Stop a running model                    # 停止正在运行的模型
  pull        Pull a model from a registry            # 从仓库拉取模型
  push        Push a model to a registry            # 推送模型到仓库
  list        List models                            # 列出所有模型
  ps          List running models                    # 列出正在运行的模型并查看资源消耗
  cp          Copy a model                            # 复制模型
  rm          Remove a model                        # 删除模型
  help        Help about any command                # 查看命令帮助

Flags:
  -h, --help      help for ollama                    # 查看命令帮助
  -v, --version   Show version information            # 查看版本

2.3.2 相关环境变量

(1)OLLAMA_HOST:指定 ollama 服务的监听地址及端口

(2)OLLAMA_NUM_PARALLEL:每个模型同时处理的并行请求的最大数量

(3)OLLAMA_MAX_QUEUE:当 ollama 忙碌时,它在拒绝额外请求之前将排队的最大请求数量

(4)OLLAMA_MAX_LOADED_MODELS:可同时加载的最大模型数量

  • 参考文档:ollama/docs/faq.md at main · ollama/ollama · GitHub
  • 使用场景:同时需要加载多个模型(如果已加载一个或多个模型时,没有足够的可用内存来加载新的模型请求,所有新的请求将被排队,直到新模型能够被加载。当先前的模型变为闲置时,将卸载一个或多个模型以腾出空间给新模型。排队的请求将按顺序处理。在使用 GPU 推理时,新模型必须能够完全适应 VRAM,以允许并发加载模型。)
  • 使用方法:默认值为 CPU 或 GPU 的 3 倍,若有需要可以手动调整 OLLAMA_MAX_LOADED_MODELS=6

(5)CUDA_VISIBLE_DEVICES:限制 ollama 可使用的 NVIDIA 显卡

  • 参考文档:ollama/docs/gpu.md at main · ollama/ollama · GitHub
  • 使用场景:系统中有多块 NVIDIA 显卡,需要限制 ollama 只使用其中一部分或完全不使用显卡
  • 使用方法:

    • 使用数字 ID:执行 nvidia-smi 命令获取显卡的序号,然后定义环境变量 CUDA_VISIBLE_DEVICES=0,1
    • 使用 UUID:执行 nvidia-smi -L 命令获取显卡 UUID,然后定义环境变量 CUDA_VISIBLE_DEVICES=GPU-1831a5ee-622a-7e65-06cc-d57de8902585,GPU-d21e966e-7a89-884f-d0b2-444d371bb8f9
    • 不使用显卡:若想忽略显卡并强制使用 CPU,可以使用一个无效的 GPU ID,例如 CUDA_VISIBLE_DEVICES=-1


3 安装(使用)Dify

3.1 安装 Dify

参考文档:Docker Compose 部署 | Dify

# 克隆 Dify 源代码至本地环境
$ git clone https://github.com/langgenius/dify.git

# 进入 Dify 源代码目录
$ cd dify

# 切换到需要的版本
$ git checkout 0.15.3

# 进入 Dify 源代码的 Docker 目录
$ cd docker

# 复制环境配置文件
$ cp .env.example .env

# 启动 Docker 容器
$ docker compose up -d
[+] Running 74/74
 ✔ api Pulled                                          211.9s 
 ✔ sandbox Pulled                                      213.7s 
 ✔ redis Pulled                                        161.0s 
 ✔ weaviate Pulled                                       8.8s 
 ✔ worker Pulled                                       211.9s 
 ✔ db Pulled                                           157.2s 
 ✔ web Pulled                                          133.0s 
 ✔ ssrf_proxy Pulled                                    83.6s 
 ✔ nginx Pulled                                         19.2s 
[+] Running 11/11
 ✔ Network docker_default             Created            0.0s 
 ✔ Network docker_ssrf_proxy_network  Created            0.0s 
 ✔ Container docker-web-1             Started            0.4s 
 ✔ Container docker-sandbox-1         Started            0.3s 
 ✔ Container docker-ssrf_proxy-1      Started            0.5s 
 ✔ Container docker-redis-1           Started            0.3s 
 ✔ Container docker-weaviate-1        Started            0.4s 
 ✔ Container docker-db-1              Started            0.4s 
 ✔ Container docker-api-1             Started            0.5s 
 ✔ Container docker-worker-1          Started            0.6s 
 ✔ Container docker-nginx-1           Started            0.7s 

# 查看 3 个业务服务 api/worker/web,以及 6 个基础组件 weaviate/db/redis/nginx/ssrf_proxy/sandbox 是否运行
$ docker compose ps

在 Windows 浏览器中访问 http://${your_server_ip}/install 进入管理员初始化页面,设置管理员账户

在 Windows 浏览器中访问 http://${your_server_ip} 进入主页面

0

评论

博主关闭了当前页面的评论