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

news2025/4/9 16:18:12

在本指南中,我将详细介绍如何在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应用开发环境,运行大语言模型并基于它们构建应用,即使在离线环境中也能高效运作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

7.4 SVD 的几何背景

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

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…

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…

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

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

树莓派PICO 设备烧录成cmsis dap

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

【数据结构】图的存储

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

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

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

kotlin,数字滚动选择

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

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

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

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

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