ubuntu系统+N卡 | docker compose+ollama+dify(dify和ollama在同一容器)

1、安装NVIDIA驱动

2、安装docker,docker compose

3、安装NVIDIA Container Toolkit

 Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit(仅 GPU 场景需要)

# Configure the production repository:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list# Update the packages list from the repository:
sudo apt-get update# Install the NVIDIA Container Toolkit packages:
sudo apt-get install -y nvidia-container-toolkit# 配置
# Configure the container runtime by using the nvidia-ctk command:
sudo nvidia-ctk runtime configure --runtime=docker# Restart the Docker daemon:
sudo systemctl restart docker# 检查 NVIDIA Container Toolkit 版本
(llm) wangqiang@wangqiang:~$ nvidia-container-cli --version
cli-version: 1.17.8
lib-version: 1.17.8
build date: 2025-05-30T13:47+00:00
build revision: 6eda4d76c8c5f8fc174e4abca83e513fb4dd63b0
build compiler: x86_64-linux-gnu-gcc-7 7.5.0
build platform: x86_64
build flags: -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 -DNDEBUG -std=gnu11 -O2 -g -fdata-sections -ffunction-sections -fplan9-extensions -fstack-protector -fno-strict-aliasing -fvisibility=hidden -Wall -Wextra -Wcast-align -Wpointer-arith -Wmissing-prototypes -Wnonnull -Wwrite-strings -Wlogical-op -Wformat=2 -Wmissing-format-attribute -Winit-self -Wshadow -Wstrict-prototypes -Wunreachable-code -Wconversion -Wsign-conversion -Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections# 确认 Docker 是否已正确配置为使用 NVIDIA 运行时:
(llm) wangqiang@wangqiang:~$ docker info | grep -i runtimeRuntimes: io.containerd.runc.v2 nvidia runcDefault Runtime: runc

4、docker compose部署ollama

# 创建自定义网络,实现dify和ollama容器通信
docker network create ollama_dify_network
mkdir ollama && cd ollamanano docker-compose.yml
# 写入如下内容:
“”“services:ollama:image: ollama/ollama:latestcontainer_name: ollamavolumes:- ./data:/root/.ollama  # 持久化存储模型数据ports:- "11434:11434"          # 映射 API 端口runtime: nvidia            # 启用 NVIDIA GPU 支持environment:- NVIDIA_VISIBLE_DEVICES=all  # 可选:暴露所有 GPU- NVIDIA_DRIVER_CAPABILITIES=compute,utility  # 可选:启用计算和工具能力networks:- ollama_dify_network           # 加入自定义网络restart: unless-stopped    # 容器异常退出时自动重启networks:ollama_dify_network:external: true  # 使用已创建的自定义网络
”“”# 启动容器
docker compose up -d# 验证容器状态
(llm) wangqiang@wangqiang:~/ollama$ docker ps
CONTAINER ID   IMAGE                                       COMMAND                   CREATED          STATUS                    PORTS                                                                      NAMES
72cdf8be3899   ollama/ollama:latest                        "/bin/ollama serve"       13 minutes ago   Up 13 minutes             0.0.0.0:11434->11434/tcp, :::11434->11434/tcp                              ollama

5、ollama部署模型

(llm) wangqiang@wangqiang:~$ docker exec -it ollama ollama run llama3(llm) wangqiang@wangqiang:~$  docker exec -it ollama ollama run deepseek-r1:32b

6、dify

4.1、dify介绍

dify官网:Dify:企业级 Agentic AI 解决方案开发平台

中文官方帮助文档:Agent - Dify Docs

4.2、安装 Dify(AI 应用平台)

 克隆 Dify 仓库

mkdir dify && cd dify
git clone https://github.com/langgenius/dify.git

(2)直接下载压缩包解压

访问仓库:https://github.com/langgenius/dify/#

直接下载压缩包:

进入 Docker 配置目录

cd dify/docker
# 在顶级 networks 部分添加外部网络声明
networks:# create a network between sandbox, api and ssrf_proxy, and can not access outside.ssrf_proxy_network:driver: bridgeinternal: truemilvus:driver: bridgeopensearch-net:driver: bridgeinternal: trueollama_dify_network:  # 新增声明external: true       # 关键:使用外部网络# 修改 api 和 worker 服务的网络配置
services:api:# ... (其他配置不变)networks:- ssrf_proxy_network- default- ollama_dify_network  # 新增连接worker:# ... (其他配置不变)networks:- ssrf_proxy_network- default- ollama_dify_network  # 新增连接

在 .env 文件中添加以下内容:

# Ollama 配置
OPENAI_API_BASE=http://ollama:11434
OPENAI_API_KEY=sk-no-key-required# 可选:设置默认使用 Ollama 模型
OPENAI_MODEL_NAME=llama3

复制环境变量文件

cp .env.example .env

修改环境配置(可选但推荐)

编辑 .env 文件配置关键参数:

nano .env  # 或使用其他文本编辑器

重点关注以下参数:

# 必填项
POSTGRES_PASSWORD=your_strong_db_password  # 替换为强密码
REDIS_PASSWORD=your_redis_password        # 替换为强密码
SECRET_KEY=your_random_secret_string      # 随机字符串(建议 32 位)# 可选配置
OPENAI_API_KEY=sk-xxx              # 若使用 OpenAI
SERVICE_API_URL=http://api:5001    # 保持默认
APP_API_URL=http://localhost/api    # 后端 API 地址
CONSOLE_WEB_URL=http://localhost   # 前端访问地址

关键配置项:

POSTGRES_PASSWORD=your_password  # 数据库密码
REDIS_PASSWORD=your_password     # Redis 密码
OLLAMA_BASE_URL=http://host.docker.internal:11434  # Ollama 地址
# 重新生成docker compose配置文件
generate_docker_compose

启动 Dify 服务

docker compose up -d

检查容器是否加入同一网络

docker network inspect ollama_dify_network

预期输出ollama 和 dify 容器的 IP 地址应出现在 Containers 列表中

使用curl测试模型服务

(llm) wangqiang@wangqiang:~/dify/dify/docker$ curl -X POST http://localhost:11434/api/generate \-H "Content-Type: application/json" \-d '{"model": "deepseek-r1:32b","prompt": "为什么天空是蓝色的?","stream": false}'
{"model":"deepseek-r1:32b","created_at":"2025-06-15T11:36:27.900708677Z","response":"\u003cthink\u003e\n嗯,今天我突然想到一个问题:为什么天空是蓝色的呢?以前好像学过一些关于这个的知识,但具体细节记不太清楚了。所以决定仔细想一想。\n\n首先,我想起来太阳发出的光看起来是白色的,对吧?那如果太阳光是白色的,为什么我们看到的天空却是蓝色的呢?这一定和大气层有关系,因为地球周围有大气,而太空中没有大气,所以太空中的天空应该是黑色的。那么大气到底做了什么让我们的天空变成蓝色?\n\n接下来,我想到可能与光的颜色有关。我记得不同颜色的光波长不一样,比如红色光波长较长,蓝色光波长较短。也许在大气层中,蓝色光被散射得更多。那为什么会这样呢?是不是因为分子或者微粒更容易散射较短波长的光线?\n\n然后,我联想到瑞利散射这个名字,可能是相关的。瑞利散射是指光在传播过程中与比光波波长小很多的颗粒发生相互作用时产生的散射现象。在这种情况下,散射的强度和波长的四次方成反比,所以蓝色光(较短波长)会被更强烈地散射到各个方向。\n\n再想想,如果太阳光进入大气层后,蓝色光被大量散射,而红色光则较少被散射,继续直射下来。这样当我们在地面抬头看天时,看到的是被散射的蓝色光,所以天空呈现出蓝色。而在日出或日落的时候,阳光需要穿过更厚的大气层,大部分蓝色光已经被散射掉了,剩下的主要是红色和橙色光,所以太阳看起来是红色的。\n\n不过,我是不是漏掉了一些因素?比如大气中的水蒸气、灰尘等是否也起作用?虽然瑞利散射主要由分子引起,但较大的颗粒可能也会有米氏散射。不过在白天,蓝色主导了天空的颜色,而当接近地面时,可能会有一些黄色调出现。\n\n总的来说,天空是蓝色的主要原因是因为太阳光中的蓝色光被大气层中的气体分子强烈散射到各个方向,使得我们无论看向哪里都能看到这些蓝色的光线。这解释了为什么晴朗的天空看起来是蓝色的。\n\u003c/think\u003e\n\n天空之所以呈现蓝色,主要是因为太阳光在经过地球大气层时发生了瑞利散射。以下是详细的解释:\n\n1. **太阳光的颜色**:太阳发出的光实际上是白色的,包含了各种颜色的光,每种颜色对应不同的波长。\n\n2. **大气中的分子作用**:当这些光线进入地球的大气层时,与空气中的气体分子(主要是氮气和氧气)发生相互作用。这种现象被称为散射。\n\n3. **瑞利散射原理**:根据瑞利散射理论,光的散射强度与其波长的四次方成反比。因此,波长较短的蓝光被强烈散射到各个方向,而波长较长的红光则较少受到散射影响,继续直线传播。\n\n4. **观察效果**:由于蓝光在大气中被广泛散射,当我们在地面上看向天空时,无论看向哪个方向,都能接收到大量来自不同分子散射来的蓝光,因此天空呈现出蓝色。\n\n5. **日出和日落的特殊情况**:在日出或日落时分,阳光需要穿过更厚的大气层。此时,大部分蓝光已经被散射掉,剩下的红光和橙光主导了光线的颜色,使得太阳呈现红色。\n\n综上所述,天空呈现蓝色的原因是太阳光中的蓝光被大气分子强烈散射的结果。这种现象不仅在白天让天空显得蔚蓝,也在日出和日落时分带来了色彩斑斓的景象。
curl -X POST http://localhost:11434/api/chat \-H "Content-Type: application/json" \-d '{"model": "llama3","messages": [{"role": "user", "content": "Hello, world!"}]}'

访问 Dify 平台

首次访问 http://localhost/install 初始化管理员账户。

登录后进入工作台:http://192.168.2.22/apps

http://192.168.2.22/install

4.3、4.3、将 DeepSeek 接入 Dify

配置模型供应商

  • 登录 Dify 后,点击右上角头像 → 设置 → 模型供应商
  • 添加 Ollama 模型:
    • 名称:DeepSeek-R1
    • 基础 URL:http://host.docker.internal:11434
    • 模型名称:deepseek-r1
    • 最大上下文长度:根据模型文档填写(如 32768 tokens)。

验证连接

  • 在 Dify 的 模型供应商 页面测试连接,确保无报错。

4.4、创建 AI 应用

  • 新建应用

    • 进入工作台 → 创建空白应用 → 选择 聊天助手 类型 → 输入应用名称 → 创建
  • 配置模型参数

    • 在应用后台:
      • 选择模型:DeepSeek-R1
      • 设置提示词(Prompt)和参数(如温度、最大 token 数)。
  • 测试对话

    • 在应用界面输入问题(如 "周杰伦最新专辑"),观察模型输出。
  • 扩展功能(可选)

    • 本地知识库:上传文档(PDF、TXT 等),Dify 会自动解析并关联到对话中。
    • 深度思考模式:在提示词前添加 [请启用深度思考]

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

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

相关文章

实习手记:基于大模型的搜索引擎开发实践

初入团队:从理论到实践的跨越五月份开始,我怀着忐忑又期待的心情以线上的方式加入了公司AI研发中心的搜索引擎优化小组。作为一名数据科学与大数据技术专业的学生,这是我第一次参与工业级AI项目的开发,团队的任务是构建一个基于大…

用Python实现神经网络(二)

#Overfitting是机器学习的主要问题。下面我们来看一下过拟合现像:import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mplimport tensorflow as tffrom scipy.optimize import curve_fit# Generic matplotlib parameters for plots and figure…

数据结构入门 (二):挣脱连续空间的束缚 —— 单向链表详解

TOC(目录) 引言:整齐的代价 在上一篇文章中,我们一起探索了数据结构大家族的第一位成员——顺序表。我们了解到,顺序表作为一种线性结构,其最大的特点在于逻辑顺序与物理顺序的一致性,即元素之间不仅存在逻辑上的前后关…

AI-视频一致性与多帧控制在AIGC中的技术挑战与突破!

全文目录:开篇语前言1. 视频中人物一致性建模的难点与现有解决方案**人物一致性建模的挑战****现有解决方案****案例代码:基于姿态估计的多帧一致性保持**2. 光照/纹理/姿态跨帧保持方法剖析**跨帧光照与纹理一致性****跨帧姿态一致性**3. 帧间插值与关键…

基于Qwen2.5-3B-Instruct的LoRA微调与推理实战指南

前言 大语言模型(LLM)的微调是当前AI领域的热门话题,而参数高效微调方法(如LoRA)因其低成本和高效率备受关注。本文将手把手教你如何使用Qwen2.5-3B-Instruct模型进行LoRA微调,并构建完整的推理流程。 一、环境准备 1.1 硬件要求 • GPU: 至少16GB显存(如…

电脑插上u盘不显示怎么回事

对于经常使用电脑的用户来说,U盘是一种再熟悉不过的存储工具。不管是拷贝资料、备份文件,还是制作启动盘,U盘都发挥着重要作用。然而,有时候你可能会遇到这样的情况:“U盘插上电脑,灯亮了,但电脑…

2025年6月GESP(C++二级): 幂和数

2025年6月GESP(C++二级): 幂和数 题目描述 对于正整数 n n n,如果 n n n 可以表为两个

Windows、macOS、liunx下使用qemu搭建riscv64/linux

背景 在Windows、macOS和Linux环境下使用QEMU搭建RISC-V 64位Linux系统,网络上存在大量过时、不完整或错误的教程。且部分AI生成的内容“幻觉”现象严重,导致关键步骤错误且难以进行。为确保可靠性,本教程基于最新实测验证,涵盖三…

简单使用MCP

1、说明# 测试环境服务器 CPU数量:2核 内存:4GB 磁盘:50GB# 补充 如果不想使用Docker进行操作,只需要跳过Docker相关命令操作 即:使用Ollama运行模型,使用Python来创建MCP2、安装Docker# 安装Docker https:…

电脑装机软件一键安装管理器

软件使用 现在的装机软件很多,主要几种类型就是办公、看图、影音、下载等,如果每次装机之后,手动一个一个去安装,费时费力还容易安装到全家桶。 就有人整理了网络上常用的一系列装机软件纯净和谐版本,并打包到一起&a…

深度学习入门-深度学习简介

深度学习是加深了层的深度神经网络。只需通过叠加层,就可以创建深度网络。1、 加深网络将深度学习中的重要技术(构成神经网络的各种层、学习时的有效技巧、对图像特别有效的CNN、参数的最优化方法等)汇总起来,创建一个深度网络&am…

Linux 下安装DM8数据库详细教程

Linux 下安装DM8数据库详细教程 一、环境准备 1.操作系统要求 DM 数据库支持多种操作系统,如 Windows、Linux 等。对于 Linux 系统,确保内核版本符合要求,例如 CentOS 7 或更高版本。同时,要保证系统有足够的磁盘空间(建议至少 10GB 以上)和内存(至少 1GB 以上)。 对…

搭建基于Gitee文档笔记自动发布

搭建基于Gitee文档笔记自动发布由于现在gitee不支持代理静态页面,并且github.io需要VPN,实际使用的话gitee更为方便。一、为服务器和个人PC添加免密push和pull 参考链接:https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE…

【Lua】闭包可能会导致的变量问题

先思考下面这个问题:local function counter()local count 0return function()count count 1return countend endlocal a counter() local b counter()print(a()) --> ? print(a()) --> ? print(b()) --> ? print(a()) --> ?输出结果&#xff…

可观测性、OpenTracing、OpenCensus、OpenTelemetry、Jaeger

监控与观测 随着软件应用从单片架构向分布式微服务体系转变,应用监控(Monitoring)和观测(Observability)的需求也随之提升。两者存在相同的定义,目的都是为了发现应用程序中的问题。但还是有差别: 监控:目的是为了捕获已知的问题…

Linux下使用原始socket收发数据包

在Linux系统中,使用非原始的socket,可以收发TCP或者UDP等网络层数据包。如果要处理网络层以下的数据包,比如ICMP、ARP等,或者更底层,比如链路层数据包,就得使用原始socket了。 创建socket 创建socket要使用…

暑期自学嵌入式——Day05补充(C语言阶段)

接续上文:暑期自学嵌入式——Day05(C语言阶段)-CSDN博客 主页点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 主页: 一位搞嵌入式的 genius-CSDN博…

.NET Core EFCore零基础快速入门简单使用

一、什么是 Entity Framework (EF) Core Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的对象关系映射程序 (O/RM)数据访问技术,。 它将开发人员从编写大量 SQL 语句中解放出来。 二、EF的相关程序包 Microsoft.EntityFrameworkCore 核心程序包&#x…

AAC音频格式

目录 AAC音频格式介绍 主要特点 技术优势 常见文件扩展名 应用领域 AAC与PCM的区别与优势对比 基本概念差异 主要技术区别 各自优势 PCM的优势 AAC的优势 应用场景选择 AAC音频数据格式解析 1. AAC 文件格式 (1) ADIF (Audio Data Interchange Format) (2) ADT…

pom.xml文件中的${}变量从哪里传值

在 Maven 的 pom.xml 文件中,${} 格式的变量(称为属性占位符)的值来源主要有以下几种途径: 1. ​内置属性(Maven 预定义)​​ ${project.basedir}:项目根目录${project.version}:项…