当前位置: 首页 > article >正文

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中,我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台,以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分:Ollama部署、Dify环境配置和Docker环境管理,适合需要在本地或私有环境中运行AI服务的开发者和运维人员参考。

文章目录

    • 一、Ollama部署
      • 1.1 二进制文件安装方法
      • 1.2 Docker安装方法(推荐)
    • 二、Dify部署与配置
      • 2.1 Dify项目打包与迁移
      • 2.2 Dify与Ollama集成
      • 2.3 Dify数据持久化
    • 三、Docker环境管理
      • 3.1 Docker Compose安装
      • 3.2 Docker Compose命令更新
      • 3.3 完整的项目迁移流程
    • 总结


🎉进入云端运维专栏 | 🚀查看更多专栏内容


一、Ollama部署

Ollama是一个优秀的开源工具,可以帮助我们在本地或服务器上轻松运行各种大语言模型。以下介绍两种安装方法及其优缺点。

1.1 二进制文件安装方法

按照ollama的Linux安装教程,我们可以通过以下步骤安装Ollama:

curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
sudo tar -C /usr -xzf ollama-linux-amd64.tgz

命令解析:

第一条命令使用curl下载Ollama的压缩包:

  • -L参数允许curl跟随HTTP重定向
  • 将下载的文件保存为ollama-linux-amd64.tgz

第二条命令解压文件到系统目录:

  • sudo使用管理员权限
  • tar是Linux的归档处理工具
  • -C /usr指定解压目标为/usr目录
  • -x表示解压模式
  • -z表示处理gzip压缩格式
  • -f指定文件名

解压完成后,理论上可以直接运行ollama serve启动服务,但在实际操作中可能会遇到错误:

ollama serve

如下图所示,执行命令后出现错误提示:

在这里插入图片描述

此类错误可能是由系统依赖项缺失或权限问题导致的,解决起来可能比较复杂。

1.2 Docker安装方法(推荐)

考虑到二进制安装的复杂性,我们可以转向使用Docker安装Ollama,这种方式更加可靠和一致。参考ollama的docker安装教程,执行以下命令:

docker run -d -v /root/models:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:0.5.3

进入ollama的命令是

docker exec -it ollama /bin/bash

命令详解:

  • docker run:创建并启动容器
  • -d:后台运行容器
  • -v /root/models:/root/.ollama:数据卷挂载,将主机目录映射到容器内部,用于持久化存储模型文件
  • -p 11434:11434:端口映射,使Ollama服务可通过主机11434端口访问
  • --name ollama:容器命名为"ollama"
  • ollama/ollama:0.5.3:指定使用的镜像及版本

也可以使用不同的挂载路径:

docker run -v /usr/share/ollama/.ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:0.5.3

使用Docker部署的优势:

  • 减少了依赖项冲突
  • 环境隔离,不影响主机系统
  • 便于版本管理和迁移
  • 一致的运行环境,减少"在我机器上能运行"的问题

二、Dify部署与配置

Dify是一个强大的LLM应用开发平台,支持快速构建基于大语言模型的应用。考虑到Dify的Docker很多,下载很慢。我们可以基于别的服务器上可以用的Dify,打包其Docker环境,实现Dify的离线高效部署。

2.1 Dify项目打包与迁移

为了实现Dify项目的离线部署,我们需要先打包现有项目的所有Docker镜像,进入Dify的docker目录下,执行下面的命令:

docker-compose images | awk 'FNR > 1 {print $2":"$3}' | sort -u | xargs docker save -o all_images.tar

这条命令的作用是将当前Dify项目中使用的所有Docker镜像打包成一个单一的tar文件,以便于离线环境下的安装与迁移。命令细节解析:

  1. docker-compose images:列出当前Compose项目中使用的所有镜像
  2. awk 'FNR > 1 {print $2":"$3}':提取每个镜像的名称和标签
  3. sort -u:排序并去除重复项
  4. xargs docker save -o all_images.tar:将所有镜像保存到一个tar文件中

2.2 Dify与Ollama集成

Dify平台需要与Ollama服务进行集成才能正常工作。一般来说,我们需要在Dify的配置中指定Ollama服务的地址:

  • 同一主机上:可以使用http://localhost:11434或Docker网络名称http://ollama:11434
  • 不同主机上:使用目标服务器IP,如http://192.168.1.100:11434

2.3 Dify数据持久化

与Ollama类似,Dify也需要配置数据持久化,以确保用户创建的应用、提示词库和配置信息不会因容器重启而丢失。这通常通过Docker卷挂载实现,例如:

-v /path/to/dify/data:/app/data
-v /path/to/dify/uploads:/app/uploads

三、Docker环境管理

Docker是实现Ollama和Dify高效部署的关键工具,掌握Docker的基本操作和环境管理对于成功部署至关重要。

3.1 Docker Compose安装

如果您的系统中尚未安装Docker Compose,可以通过以下命令进行安装:

curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o docker-compose-linux-x86_64
cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

这组命令的作用是:

  1. 下载与当前系统架构匹配的Docker Compose二进制文件
  2. 将文件复制到系统PATH路径中
  3. 添加执行权限

执行完成后,可以验证安装结果:

在这里插入图片描述

3.2 Docker Compose命令更新

需要注意的是,Docker的新版本已将Docker Compose集成到Docker CLI中,命令格式有所变化:

  • 旧版命令:docker-compose(带连字符)
  • 新版命令:docker compose(无连字符)

对应的,更新后的打包命令应为:

docker compose images | awk 'FNR > 1 {print $2":"$3}' | sort -u | xargs docker save -o all_images.tar

您可以通过docker compose versiondocker --version检查系统中的Docker版本和Compose支持情况。

3.3 完整的项目迁移流程

使用Docker进行项目迁移的完整流程包括三个主要步骤:

  1. 打包阶段(源服务器上):

    mkdir project-backup
    cp docker-compose.yml .env config/* project-backup/
    mv all_images.tar project-backup/
    tar -czvf project-backup.tar.gz project-backup
    
  2. 传输阶段
    project-backup.tar.gz传输到目标服务器(可以使用scp、rsync等工具)

  3. 部署阶段(目标服务器上):

    tar -xzvf project-backup.tar.gz
    cd project-backup
    docker load -i all_images.tar
    docker-compose up -d
    

这种方法的优势在于可以实现完全离线的部署,不需要目标服务器具有互联网连接,非常适合在隔离网络或有严格安全要求的环境中部署Ollama和Dify项目。

总结

在CPU服务器上成功部署Ollama和Dify环境需要掌握以下关键要点:

  1. Ollama部署:优先考虑Docker安装方式,确保正确配置数据卷挂载和端口映射
  2. Dify配置:实现与Ollama的正确集成,确保数据持久化
  3. Docker管理:掌握Docker Compose的使用,熟悉项目的打包、迁移和部署流程

通过这些步骤,您可以在标准CPU服务器上构建一个完整的AI应用开发环境,运行大语言模型并基于它们构建应用,即使在离线环境中也能高效运作。

相关文章:

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中,我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台,以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分:Ollama部署、Dify环境配置和Docker环境管理,适合需要在本地或私有环境中运行A…...

【计网】TCP 协议详解 与 常见面试题

三次握手、四次挥手的常见面试题 不用死记,只需要清楚三次握手,四次挥手的流程,回答的时候心里要记住,假设网络是不可靠的 问题(1):为什么关闭连接时需要四次挥手,而建立连接却只要三次握手? 关…...

Java 基础-31-枚举-认识枚举

在Java编程语言中,枚举(Enum)是一种特殊的类,它允许一组固定的常量。它们非常适合用来表示一组固定的值,比如星期几、季节、颜色等。枚举自Java 5开始引入,为定义常量提供了一种更强大和方便的方式。本文将…...

7.4 SVD 的几何背景

一、SVD 的几何解释 SVD 将矩阵分解成三个矩阵的乘积: ( 正交矩阵 ) ( 对角矩阵 ) ( 正交矩阵 ) (\pmb{正交矩阵})\times(\pmb{对角矩阵})(\pmb{正交矩阵}) (正交矩阵)(对角矩阵)(正交矩阵),用几何语言表述其几何背景: ( 旋转 ) ( 伸缩 )…...

低延迟云网络的核心技术

低延迟云网络通过架构优化、协议创新、硬件加速等多维度技术手段,将数据传输延迟降低至毫秒级甚至微秒级。 1. 网络架构优化 1.1 扁平化网络Leaf-Spine 架构 减少网络层级,缩短数据转发路径(如数据中心内部一跳可达)。 扁平化网络Leaf-Spine(叶子-脊椎)架构是一种现代…...

C++的多态-上

目录 多态的概念 多态的定义及实现 1.虚函数 2. 多态的实现 2.1.多态构成条件 2.2.虚函数重写的两个例外 (1)协变(基类与派生类虚函数返回值类型不同) (2)析构函数的重写(基类与派生类析构函数的名字不同) 2.3.多态的实现 2.4.多态在析构函数中的应用 2.5.多态构成条…...

内存与显存:从同根生到殊途异路的科技演进

在现代计算机的世界里,内存和显存是两个不可或缺的硬件组件。它们看似功能相近,却在发展历程中逐渐分道扬镳,各自服务于不同的计算需求。今天,我们将从一根内存条和一块显卡入手,深入探讨内存与显存的异同,…...

手搓多模态-04 归一化介绍

在机器学习中,归一化是一个非常重要的工具,它能帮助我们加速训练的速度。在我们前面的SiglipVisionTransformer 中,也有用到归一化层,如下代码所示: class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&am…...

【C++】第八节—string类(上)——详解+代码示例

hello,又见面了! 云边有个稻草人-CSDN博客 C_云边有个稻草人的博客-CSDN博客——C专栏(质量分高达97!) 菜鸟进化中。。。 目录 一、为什么要学习string类? 1.1 C语言中的字符串 1.2 面试题(暂不做讲解) …...

Java 数组与 ArrayList 核心区别解析:从源码到实战!!!

🌟 Java 数组与 ArrayList 核心区别解析:从源码到实战 💡 Java 开发者必读! 数组(Array)和 ArrayList 是 Java 中最常用的数据存储结构,但它们的底层设计、性能表现和适用场景差异显著。本文通…...

【易飞】易飞批量选择品号处理方法,工作效率提升300%

开窗选择品号方式要么手动输入,要么以什么开头、包含、从A物料到B物料查询后返回的有规律的品号。对于没有规律且大量品号的处理方式是否有便捷的方法呢? 尤其在通常在查询多阶材料清单,查询库存明细表,整批变更元件等如品号无规律情况下,只能一个个选择,无法通过EXCEL方…...

【最新版】啦啦外卖v64系统独立版源码+全部小程序APP端+安装教程

一.系统介绍 啦啦外卖跑腿平台独立版,使用的都知道该系统功能非常强大,应该说是目前外卖平台功能最全的一套系统。主要是功能非常多,拿来即用,包括客户端小程序、配送端小程序、商户端小程序,还有对应四个端的APP源码…...

iproute2 工具集使用详解

目录 一、iproute2 核心命令:ip二、常用功能详解1. 管理网络接口(link 对象)2. 管理 IP 地址(address 对象)3. 管理路由表(route 对象)4. 管理 ARP 和邻居缓存(neigh 对象&#xff0…...

项目总结之常问的一些问题

1.项目功能介绍,重难点 重难点: mock工具使用(涉及到的三方接口过多,由于网络等原因无法调通,所以测试的时候,采用mock工具来模拟返回接口真正调用后响应数据) 2.项目负责哪部分?…...

C语言查漏补缺:占位符篇

占位符篇 1. 整数类型2. 字符类型3. 浮点数类型4. 指针类型5. 字符串6. 修饰符 1. 整数类型 %d / %i:用于 int(有符号十进制整数)。int num -42; printf("%d", num); // 输出: -42%u:用于 unsigned int(无…...

cut命令用法

cut 是 Linux/Unix 系统中一个用于按列提取文本内容的命令,常用于处理结构化文本(如 CSV、日志、配置文件等)。它通过分隔符、字符位置或字节位置来切割文本,提取指定部分。 核心功能 按字段(列)提取&#…...

java 正则表达式优化

1,什么是正则表达式 正则表达式使用一些特定的元字符来检索、匹配以及替换符合规则的字符串。 构造正则表达式语法的元字符,由普通字符、标准字符、限定字符(量词)、定位字符(边界字符)组成 普通字符 字母[…...

AD(Altium Designer)更换PCB文件的器件封装

一、确定是否拥有想换的器件PCB封装 1.1 打开现有的原理图 1.2 确定是否拥有想换的器件PCB文件 1.2.1 如果有 按照1.3进行切换器件PCB封装 1.2.2 如果没有 按照如下链接进行添加 AD(Altium Designer)已有封装库的基础上添加器件封装-CSDN博客https://blog.csdn.net/XU15…...

【文献研究】含硼钢中BN表面偏析对可镀性的影响

《B 添加钢的溶融 Zn めっき性に及ぼす BN 表面析出の影響》由JFE公司田原大輔等人撰写。研究聚焦 B 添加钢在低露点退火时 BN 形成对镀锌性的影响,对汽车用高强度钢镀锌工艺优化意义重大。通过多组对比实验,结合多种分析手段,明确了相关因素…...

React学习-css

W3Schools Tryit Editor CSS 教程 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: p { /* 这是个注释 */ color:red; text-align:center; }选择器 CSS Id: #para1{ text-align:center; color:red; } Class: .center {text-align:center;} p…...

AIP-215 API特定proto

编号215原文链接AIP-215: API-specific protos状态批准创建日期2018-10-01更新日期2018-10-01 API通常使用API特定proto定义,偶尔依赖通用组件。保持API相互隔离可以避免版本问题和客户端库打包问题。 指南 所有特定于某个API的protos 必须 位于带有主版本号的包…...

C++ 获取一整行(一行)字符串并转换为数字

代码很简单&#xff0c;主要是自己总是忘记&#xff0c;记录一下&#xff1a; #include <iostream> #include <cstdlib> #include <cstring>#include <string> #include <vector> #include <sstream>using namespace std;void print_int_…...

数据分析-Excel-学习笔记Day1

Day1 复现报表聚合函数&#xff1a;日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格&#xff0c;首先要看这个表格的构成&#xff08;包含了哪些数据&#xff09;&#xff0c;几行几列&#xff0c;每一列的名称…...

树莓派PICO 设备烧录成cmsis dap

文章目录 1. 实际操作2. IO连接 1. 实际操作 2. IO连接...

【数据结构】图的存储

目录 邻接矩阵 表示方法 代码定义 结构特点与度的信息 邻接表 表示方法 代码定义 结构特点与度的信息 十字链表 表示方法 第二步&#xff0c;将顶点x的firstIn域与所有headvex域为x的弧连起来。 结构特点与度的信息 邻接多重表 表示方法 结构特点与度的信息 图…...

如何解决uniapp打包安卓只出现功能栏而无数据的问题

如何解决uniapp打包安卓只出现功能栏而无数据的问题 经验来自&#xff1a;关于Vue3中调试APP触发异常&#xff1a;exception:white screen cause create instanceContext failed,check js stack -> at useStore (app-service.js:2309:15)解决方案 - 甲辰哥来帮你算命 - 博客…...

kotlin,数字滚动选择

用国内的通义灵码和codegeex都没有弄出来&#xff0c;最后只得用墙外的chatgpt才弄出一个满意的。kotlin真的有点难&#xff0c;好在有AI&#xff0c;让学习没这难了。 package com.example.mynumsetimport android.os.Bundle import androidx.activity.ComponentActivity imp…...

【4】搭建k8s集群系列(二进制部署)之安装master节点组件(kube-apiserver)

一、下载k8s二进制文件 下载地址&#xff1a; https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG -1.20.md 注&#xff1a;打开链接你会发现里面有很多包&#xff0c;下载一个 server 包就够了&#xff0c;包含了 Master 和 Worker Node 二进制文件。…...

每日c/c++题 备战蓝桥杯(小球反弹)[镜像思路求解,最小公倍数]

思路&#xff1a; 错解&#xff1a;对于这道题而言&#xff0c;有的同学会选择用计算每次碰撞的坐标&#xff0c;直到坐标等于原点的方法来做&#xff0c;但这种方法实现起来比较繁琐&#xff0c;并且由于碰撞点的坐标有可能是浮点数&#xff0c;而浮点数会丢失精度&#xff0…...

新潮透明液体水珠水滴失真故障扭曲折射特效海报字体标题设计ps样机动作素材 Bubble Photoshop Templates

只需单击几下即可创建引人注目的视觉效果&#xff01;您需要做的就是将您的文本或图像放入智能对象中并应用作。 包中包含&#xff1a; 15 个静态 Photoshop 模板&#xff08;PS 2019 及更高版本&#xff09; 01-05 垂直布局 &#xff08;22504000&#xff09;06-10 水平布局…...