Docker Compose 部署 Dify + Ollama 全棧指南:從裸奔到安全可觀測的 AI 應用實戰


📌 摘要

本文以中國開發者視角出發,手把手教你用 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;廣泛應用于數據中心和云計算環境中。很多公司為了方便管理…