📌 摘要

本文以中国开发者视角出发,手把手教你用 Docker Compose 在本地或轻量云主机上部署 Dify + Ollama 组合栈,实现“安全、可观测、可扩展”的私有化 AI 应用平台。全文约 8 000 字,包含:

  • 架构图、流程图、甘特图、思维导图等 6 种图表;
  • 10+ 段可直接复制的 Python 示例代码;
  • 5 大实战场景(RAG 知识库、代码助手、企业内部问答等);
  • 常见 15 个“坑”及解决方案;
  • 从裸奔到 HTTPS + Basic Auth + IP 白名单的完整安全加固方案。

读完即可在生产环境落地。


📖 目录

  1. 背景知识
  2. 整体架构
  3. 环境准备
  4. 一键部署
  5. 安全加固
  6. 可观测性
  7. 实战案例
  8. 常见问题 FAQ
  9. 扩展阅读
  10. 总结与展望

1️⃣ 背景知识 {#背景知识}

名词作用本次使用场景
Dify开源 LLMOps 平台(对标 LangChain+LangSmith)提供 UI、RAG、API 网关
Ollama本地大模型运行时(支持 Llama3、Qwen、CodeLlama 等)私有化模型推理
Docker Compose容器编排一键拉起全栈

思维导图:为何选 Dify+Ollama?
在这里插入图片描述

mindmaproot((选择 Dify+Ollama))数据不出内网低成本可插拔模型社区活跃

2️⃣ 整体架构 {#整体架构}

2.1 逻辑架构图

HTTPS
Basic Auth
REST
SQL
HTTP
用户
反向代理
80/443
Web UI
3000
API 服务
5001
PostgreSQL
Ollama 服务
11434

2.2 数据流图

用户DifyOllama输入问题构建 Prompt/api/generate返回文本展示答案用户DifyOllama

3️⃣ 环境准备 {#环境准备}

3.1 硬件与系统

  • CPU:4 核以上
  • 内存:≥8 GB(跑 7B 模型)
  • 系统:Ubuntu 22.04 / Debian 12 / CentOS 9 Stream
  • GPU(可选):NVIDIA RTX 3060+(CUDA ≥11.8)

3.2 软件依赖

# 更新系统
sudo apt update && sudo apt upgrade -y# Docker & Compose
curl -fsSL https://get.docker.com | sudo bash
sudo usermod -aG docker $USER
newgrp docker
sudo curl -SL https://github.com/docker/compose/releases/download/v2.28.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3.3 目录结构

dify-ollama/
├── .env               # 环境变量
├── docker-compose.yml # 主编排
├── nginx/             # 反向代理
│   ├── nginx.conf
│   └── .htpasswd
└── logs/              # 日志持久化

4️⃣ 一键部署 {#一键部署}

4.1 编写 docker-compose.yml

# 版本:Compose v3.9
version: "3.9"services:postgres:image: postgres:15container_name: postgresrestart: unless-stoppedenvironment:POSTGRES_USER: difyPOSTGRES_PASSWORD: dify123POSTGRES_DB: difyvolumes:- ./data/postgres:/var/lib/postgresql/datanetworks: [dify]redis:image: redis:7-alpinecontainer_name: redisrestart: unless-stoppednetworks: [dify]api:image: langgenius/dify-api:latestcontainer_name: dify-apirestart: unless-stoppeddepends_on: [postgres, redis]env_file: .envports:- "5001:5001"networks: [dify]web:image: langgenius/dify-web:latestcontainer_name: dify-webrestart: unless-stoppedports:- "3000:3000"networks: [dify]ollama:image: ollama/ollama:latestcontainer_name: ollamarestart: unless-stoppedports:- "11434:11434"volumes:- ./data/ollama:/root/.ollamanetworks: [dify]# 如需 GPU# runtime: nvidia# environment:#   - NVIDIA_VISIBLE_DEVICES=allnetworks:dify:

4.2 环境变量 .env

# === 数据库 ===
DB_USERNAME=dify
DB_PASSWORD=dify123
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=dify# === Redis ===
REDIS_HOST=redis
REDIS_PORT=6379# === Ollama ===
OLLAMA_API_BASE=http://ollama:11434

4.3 启动

docker-compose up -d
docker-compose logs -f api

5️⃣ 安全加固 {#安全加固}

5.1 生成 SSL 证书(Let’s Encrypt)

sudo apt install certbot
sudo certbot certonly --standalone -d your-domain.com

5.2 Nginx 反向代理 + Basic Auth

# ./nginx/nginx.conf
server {listen 80;server_name your-domain.com;return 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name your-domain.com;ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;location / {auth_basic "Dify Auth";auth_basic_user_file /etc/nginx/.htpasswd;proxy_pass http://web:3000;}location /api {proxy_pass http://api:5001;}
}

生成密码文件:

sudo apt install apache2-utils
htpasswd -c ./nginx/.htpasswd admin

5.3 IP 白名单(可选)

location / {allow 10.0.0.0/8;deny all;...
}

6️⃣ 可观测性 {#可观测性}

6.1 日志收集

# 增加日志驱动
services:api:logging:driver: "json-file"options:max-size: "100m"max-file: "3"

6.2 Prometheus + Grafana(可选)

metrics
Dify API
Prometheus
Grafana

7️⃣ 实战案例 {#实战案例}

7.1 场景:企业内部知识库问答

  • 数据:Markdown 技术文档 5000 篇
  • 模型:Qwen-14B-Chat
  • 效果:回答准确率 85%+
7.1.1 上传文档
import requestsAPI_BASE = "https://your-domain.com/api"
API_KEY = "your-api-key"files = {"file": open("docs.zip", "rb")}
r = requests.post(f"{API_BASE}/datasets", files=files, headers={"Authorization": f"Bearer {API_KEY}"})
print(r.json())
7.1.2 创建应用
curl -X POST https://your-domain.com/api/apps \-H "Authorization: Bearer $API_KEY" \-d '{"name":"企业知识库","model":"qwen:14b"}'

8️⃣ 常见问题 FAQ {#常见问题}

问题原因解决
get custom model schema failed模型未配置或网络不通检查 Ollama 运行、API_BASE
容器无法访问 Ollama网络隔离使用同一 Docker 网络
HTTPS 证书过期90 天有效期certbot renew --dry-run
GPU 报错 nvidia-smi not found驱动未装安装 nvidia-driver-550

9️⃣ 扩展阅读 {#扩展阅读}

  • Dify 官方文档
  • Ollama 模型库
  • Docker Compose 官方手册

🔟 总结与展望 {#总结}

维度达成情况
安全性HTTPS + Basic Auth + IP 白名单
可观测日志、指标、告警
可扩展支持 GPU、水平扩容
成本0 元起步,按需弹性

下一步:接入 SSO、使用 Helm 部署到 K8s、灰度发布模型版本。


📚 参考资料

  1. Dify GitHub: https://github.com/langgenius/dify
  2. Ollama GitHub: https://github.com/ollama/ollama
  3. Let’s Encrypt: https://letsencrypt.org/zh-cn/
  4. Docker Docs: https://docs.docker.com/compose/compose-file/

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

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

相关文章

「源力觉醒 创作者计划」_全方面实测文心ERNIE-4.5-VL-28B-A3B开源大模型

「源力觉醒 创作者计划」_全方面实测文心ERNIE-4.5-VL-28B-A3B开源大模型1. 文心大模型4.5-28B概述2. 部署ERNIE-4.5-VL-28B-A3B文心大模型2.1. 创建GPU云主机2.2. ERNIE-4.5-VL-28B-A3B部署2.3. 创建大模型API交互接口3. 文心大模型4.5-28B多方面性能评测3.1. 语言理解方面3.2…

数据库学习------数据库事务的特性

在数据库操作中,事务是保证数据一致性和完整性的核心机制。无论是简单的单表更新,还是复杂的多表关联操作,事务都扮演着至关重要的角色。那么什么是数据库事务?数据库事务是一个不可分割的操作序列,它包含一个或多个数…

18-C语言:第19天笔记

C语言:第19天笔记 内容提要 构造类型 结构体共用体/联合体构造类型 数据类型 基本类型/基础类型/简单类型 整型 短整型:short – 2字节基本整型:int – 4字节长整型:long – 32位系统4字节/ 64位系统8字节长长整型&…

centos下安装anaconda

下载 anaconda 安装包 wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh 2. 授权 chmod x Anaconda3-2022.05-Linux-x86_64.sh 3. 安装 ./Anaconda3-2022.05-Linux-x86_64.sh 此时显示Anaconda的信息,并且会出现More,继续…

MySQL(172)如何进行MySQL的全局变量设置?

MySQL的全局变量是影响整个服务器设置和行为的参数。可以在服务器启动时通过配置文件设置这些变量,也可以在服务器运行时通过SQL命令动态调整。以下是关于如何设置和管理MySQL全局变量的详细说明和示例代码。 一、通过配置文件设置全局变量 在MySQL服务器启动时&…

【最后203篇系列】030 强化学习探索

前言 我发现在csdn写完一篇文章越来越难了,有n篇写了一半没往下写。原来我觉得补完203篇,凑到一千篇是个很简单的事,没想到还挺难的。 我回想了一下,过去一年大模型领域继续发生这很剧烈的变化,这是一种新的模式 &…

fastGEO v1.7.0 大更新,支持PCA、差异分析、火山图、热图、差异箱线图、去批次等分析

前言 之前一篇文章【fastGEO V1.6.1 这个版本强的可怕,GEO数据自动下载、探针注释、Shiny App】介绍了fastGEO用于GEO数据下载和探针注释的核心功能。 虽然是付费50获取安装包(刚开始是20),但也深受欢迎,说明这个R包…

LLM 典型模型技术特性及项目落地全流程实践

在大语言模型(LLM)技术快速迭代的当下,开发者面临的核心挑战已从 “是否使用” 转变为 “如何正确选型并高效落地”。本文将系统剖析当前主流 LLM 的技术特性,结合实际项目架构,提供从模型选型、接口集成到性能优化的全流程技术方案,并附关键代码实现,为工业级 LLM 应用…

机器学习消融实验:方法论演进、跨领域应用与前沿趋势

一、定义与起源 消融实验(Ablation Study)是一种系统性移除或修改模型关键组件以评估其对整体性能贡献的实验方法论。其术语源于神经科学和实验心理学(20世纪60-70年代),指通过切除动物脑区研究行为变化的实验范式。2…

北京-4年功能测试2年空窗-报培训班学测开-今天来聊聊我的痛苦

最近状态很不对劲,因为我很少花时间好好思考,只是处于执行状态,甚至也不太写笔记了,我原以为这样会更高效,现在想想,开始不愿花时间深思才是断弦的开始吧而且从结课后我有了隐瞒,我不想过多透露…

深度解析 | AI 幻觉的形成和应对路径

写这一篇的缘由一是因为我也在摸索如何降低 AI 幻觉提升 AI 工具使用效率,二是因为前两周在MIT学习时老师讲的一节课,刚好也解释了这个问题,所以一并做个总结,分享给大家。 近几年,大型语言模型(LLM&#…

Java把word转HTML格式

Java把word转HTML格式&#xff0c;两种方式方式一&#xff1a;maven引入依赖,pom.xml<dependency><groupId>e-iceblue</groupId><artifactId>spire.office.free</artifactId><version>5.3.1</version> </dependency>然后代码读…

#C语言——学习攻略:探索字符函数和字符串函数(一)--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现

&#x1f31f;菜鸟主页&#xff1a;晨非辰的主页 &#x1f440;学习专栏&#xff1a;《C语言学习》 &#x1f4aa;学习阶段&#xff1a;C语言方向初学者 ⏳名言欣赏&#xff1a;"编程的本质是理解问题&#xff0c;然后把它分解成可执行的步骤。" 目录 1. 字符分类函…

(吃饭)质数时间

题目描述如果把一年之中的某个时间写作 a 月 b 日 c 时 d 分 e 秒的形式&#xff0c;当这五个数都为质数时&#xff0c;我们把这样的时间叫做质数时间&#xff0c;现已知起始时刻是 2022 年的 a 月 b 日 c 时 d 分 e 秒&#xff0c;终止时刻是 2022 年的 u 月 v 日 w 时 x 分 y…

【RK3568 RTC 驱动开发详解】

RK3568 RTC 驱动开发详解一、Linux RTC 子系统架构​二、设备树配置​三、驱动四、时间相关命令实时时钟&#xff08;RTC&#xff09;是嵌入式系统中不可或缺的硬件模块&#xff0c;负责在系统断电后继续计时&#xff0c;为设备提供稳定的时间基准。本文将以瑞芯微 RK3568 平台…

文本编码检测库`chardet` 和 `uchardet`对比使用示例及注意事项

在处理未知编码的二进制数据时&#xff0c;chardet 和 uchardet 是两个非常实用的字符编码自动检测库&#xff0c;尤其适用于从卫星通信、文件、网络流等来源获取的未标明编码的文本数据。一、chardet&#xff08;Python版&#xff09; ✅ 简介 chardet 是一个用 Python 编写的…

[Windows]Postman-app官方历史版本下载方法

Postman-app官方历史版本下载方法最新版&历史版本官网地址最新版本下载历史版本下载禁止自动更新方法Postman最新版安装后必须要登录才能使用某些特定功能&#xff0c;多有不便&#xff0c;因此花了点时间整理了一下历史版本如何下载的方法&#xff0c;链接均为官网链接&am…

【Spring Boot 快速入门】三、分层解耦

目录分层解耦案例&#xff1a;将 emp.xml 中的数据解析并响应三层架构分层解耦IOC & DI 入门IOC 详解DI 详解分层解耦 案例&#xff1a;将 emp.xml 中的数据解析并响应 emp.xml 内容如下&#xff1a; <emps><emp><name>Tom</name><age>18…

井云科技2D交互数字人:让智能服务触手可及的实用方案

在如今的数字化时代&#xff0c;智能交互已成为各行业提升服务质量的重要方向。而井云 2D 交互数字人系统凭借其独特的技术优势&#xff0c;正逐渐成为众多企业实现智能服务升级的优选。它无需复杂的操作和高昂的成本&#xff0c;就能让数字人在各类线下场景中发挥重要作用&…

本地部署VMware ESXi,并实现无公网IP远程访问管理服务器

ESXi&#xff08;VMware ESXi&#xff09;是VMware公司推出的一款企业级虚拟化平台&#xff0c;基于裸机&#xff08;bare-metal&#xff09;安装的虚拟化操作系统。它可以在一台物理服务器上运行多个虚拟机&#xff0c;广泛应用于数据中心和云计算环境中。很多公司为了方便管理…