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 會自動解析并關聯到對話中。
- 深度思考模式:在提示詞前添加?
[請啟用深度思考]
。