惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Security Latest
Security Latest
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
小众软件
小众软件
A
About on SuperTechFans
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
Cyberwarzone
Cyberwarzone
K
Kaspersky official blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
Spread Privacy
Spread Privacy
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
V
Vulnerabilities – Threatpost
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
博客园 - 叶小钗
AWS News Blog
AWS News Blog
The Hacker News
The Hacker News
O
OpenAI News
S
Securelist
S
Secure Thoughts
H
Help Net Security
D
DataBreaches.Net
S
Schneier on Security
T
Threatpost
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threat Research - Cisco Blogs
S
Security Archives - TechRepublic
量子位
NISL@THU
NISL@THU
Attack and Defense Labs
Attack and Defense Labs
Last Week in AI
Last Week in AI
Project Zero
Project Zero
Microsoft Azure Blog
Microsoft Azure Blog
F
Full Disclosure
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Help Net Security
Help Net Security
The Register - Security
The Register - Security

博客园 - GKLBB

软件神器 --- ctf靶场 之 pwn.college 术语俗话 --- 什么是加密狗 软件神器 --- 自动电脑锁屏软件 软件研发 --- 网络安全 之 putty生成无密码登录密钥 软件神器 --- 视频剪辑 之 Avidemux MP4Joiner Shotcut 软件神器 --- 视频格式转化 之 handbrake 软件研发 --- 经验之谈 这个是什么图标,经常看到 软件研发 --- 术语俗话 之 多模态 术语俗话 --- 什么是大数据开发 软件研发 --- 术语俗话 之 什么是边缘计算 软件研发 --- 应知应会 之 什么是云计算开发 应知应会 --- 如何不装软件查看网速 常见问题解决 --- 360拦截接触 常见问题解决 --- 加入会议摄像头无法打开 网络安全 --- CTF打靶 之 ZIP伪加密 → Robot36慢扫电视 → 二维码补齐 → DeepSound隐写 → GPG解密 → Base64图片 → SilentEye隐写 软件研发 --- 应知应会 之 无错误的闪退如何解决 软件研发 --- 应知应会 之 为什么别人的软件如此复杂我的如此简单 网络安全 --- 应知应会 之 什么是旁站 应知应会 --- 如何查询备案 软件神器 --- 格式转化 之 jpg 2 svg 网络安全 --- CTF打靶 之 flag搜索 软件神器 --- 互联网测速 之 软件神器 --- 局域网测速 之 iperf 常见问题解决 --- 模拟器USG6000打开后,启动设备失败,错误40 软件研发 --- AI网络 之 ensp配置生成 软件研发 --- AI编程 之 极简流程 软件研发 --- AI生图产品比较 常见问题解答 --- 为什么我的服务一直被人DDOS 软件研发 --- 开发万能格式转化工具 网站神器 --- 在线格式转化 之 文档转md 术语俗话 --- 什么是云电脑 常见问题解决 --- 如何在没有安装杀毒软件的情况下知道这个文件是不是牧马 常见问题解决 --- Win10下VMware 17安装VMware Tools选项灰色/失效解决办法 常见问题解决 --- 云电脑报错 :PAGE FAULT IN NONPAGED AREA 记一次牧马的发现 人生感悟 --- 为什么我们生活中同一件事有多个品牌,他们到底有什么区别 软件运维 --- 云电脑安装打印机 常见问题解决 --- 网络打印默认端口 常见问题解决 --- 京瓷打印云电脑无法设置双面打印 软件研发 --- 网络安全 之 brupsuite如何设置上游袋里 术语俗话 --- 什么是同步和异步 我的目标 软件研发 --- dify配置 之 markword转word带有简单样式的方法 软件研发 --- 接口文档格式 常见问题 --- dify 的 deepseek是旧模型版本 OWASP 非营利性开源社区 计算机标准化组织 术语俗话 --- POSIX 就是 Unix 世界的"普通话",大家说同一种语言就能互相理解。 我的数字生活唯一选择 软件开发 --- 安卓开发 之 命名空间隔离 术语俗话 --- 页面对齐、 跨页 计算机的哪些人 --- 社交之王 马克·扎克伯格 计算机的哪些人 --- 重新定义新能源 之 埃隆·马斯克 软件研发 --- AI生成ppt word excel pdf的开发关键 软件研发 --- AI应用开发 之 AI生成Word 人生感悟 --- 致可悲的人 软件研发 --- pdf 表格图片 转 excel 常见问题解决 --- 装有系统的固态硬盘错误 人生感悟 --- 什么是行业黑话 术语俗话 --- Kubernetes 术语俗话 --- 什么是DBI,和hook什么区别 答疑解惑 --- 为什么苹果手机电池不允许拆卸 代码可视化技术 术语俗话 --- Wrap 函数 人生感悟 --- 逆向工程为什么十分枯燥且无聊 --- 这里引用一句逆向工程核心原理的话 人生感悟 --- 为什么干活时不见同事,活干完了就来了 软件研发 --- AI应用研发 之 提炼提示词 软件研发 --- AI应用开发 之 AI生成PPT最佳方案 基于屏幕-摄像头的单向数据传输方案设计 俗语俗话 --- 纯虚函数 硬件研发 --- 产品介绍 之 AX6 硬件研发 --- 产品大全 之 SUMAVISION CM50X 应知应会 --- 为什么U盘不识别但是还是可以数据恢复回来 应知应会 --- 为什么我删除了一个文件但是还是可以恢复回来 软件研发 --- AI UI设计 之 PC端效果比对 常见问题修复 --- chrome浏览器白屏 应用安全 --- 逆向工程 之 C++类的本质 软件研发 --- AI提示词开发 之 代码注释提示词 dobby反编译 https://www.cnblogs.com/Un1corn/p/18615567 应知应会 --- 手机作为热点,windows电脑临时作为网关,给其他电脑上网 应知应会 --- 大量小文件如何快速迁移 常见问题解决 --- apk安装过程中闪退 应用安全 --- 安卓逆向 之 dobby框架 在线生成 APK 图标工具推荐 一个开源库 术语俗话 --- 什么是软件即服务 软件神器 --- 常用谷歌插件 应用安全 --- 逆向技巧 之 识别未知函数 人生感悟 --- 为什么两句话可以说明白的事情要500字说明 软件研发 --- Dify 生成 PPT 方案分析 应用安全 --- 逆向技巧 之 IDA未知函数如何识别 https://yuuki.cool/ 应用安全 --- 逆向技巧 之 ELF节(Section) 与 段(Segment) 硬件研发 --- 接口 人生感悟 --- 为什么ld一直爱开会 应用安全 --- 逆向技巧 之 IDA和claude反编译缺陷 应用安全 --- 逆向技巧 之 ida反编译yahfa的so和源码的差异化比对
软件研发 --- AI LLM RAG 之 Dify安装
GKLBB · 2026-06-17 · via 博客园 - GKLBB

Dify 完整安装部署总结

环境信息

操作系统: 红帽系列 Linux (RPM-based)
服务器IP: 192.168.2.5
代理地址: 192.168.2.2:6382
Dify安装目录: /opt/dify/docker
本地模型: Ollama (deepseek-r1:32b 等)

第一阶段:系统基础环境

1. 系统更新与工具安装

sudo dnf update -y
sudo dnf install -y git curl wget vim net-tools dnf-plugins-core

2. 安装 Docker

# 添加 Docker 仓库
sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
sudo dnf install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 当前用户加入 docker 组
sudo usermod -aG docker $USER
newgrp docker

# 验证
docker --version
docker compose version

第二阶段:Docker 代理配置

⚠️ 重要:只能保留一个代理配置文件,多个文件会导致 Docker 启动卡死

# 创建配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d

# 只创建一个代理文件
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://192.168.2.2:6382"
Environment="HTTPS_PROXY=http://192.168.2.2:6382"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.2.5,10.0.0.0/8,172.16.0.0/12"
EOF

# 验证只有一个配置文件
ls /etc/systemd/system/docker.service.d/
# 正确输出:只有 http-proxy.conf 一个文件

Docker Daemon 配置

sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "proxies": {
    "http-proxy": "http://192.168.2.2:6382",
    "https-proxy": "http://192.168.2.2:6382",
    "no-proxy": "localhost,127.0.0.1,192.168.2.5,10.0.0.0/8,172.16.0.0/12"
  },
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

# 重载并重启
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证 Docker 正常启动
systemctl status docker --no-pager

第三阶段:克隆 Dify

# Git 配置代理
git config --global http.proxy http://192.168.2.2:6382
git config --global https.proxy http://192.168.2.2:6382

# 克隆到 /opt 目录
git clone https://github.com/langgenius/dify.git /opt/dify

# 进入 docker 目录
cd /opt/dify/docker

# 复制配置文件
cp .env.example .env

第四阶段:配置 .env 文件

cd /opt/dify/docker

# 生成安全密钥
SECRET_KEY=$(openssl rand -base64 42)
echo "密钥: $SECRET_KEY"

vim .env

修改以下关键配置:

# 安全密钥
SECRET_KEY=上面生成的密钥

# 服务访问地址
CONSOLE_WEB_URL=http://192.168.2.5
CONSOLE_API_URL=http://192.168.2.5
SERVICE_API_URL=http://192.168.2.5
APP_WEB_URL=http://192.168.2.5

# 数据库密码(务必修改)
POSTGRES_PASSWORD=your-strong-db-password
DB_PASSWORD=your-strong-db-password

# Redis 密码(务必修改)
REDIS_PASSWORD=your-strong-redis-password

# Sandbox 代理(.env 中已有)
SANDBOX_HTTP_PROXY=http://192.168.2.2:6382
SANDBOX_HTTPS_PROXY=http://192.168.2.2:6382

# SSRF 代理(保持默认)
SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128
SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128

第五阶段:创建 docker-compose.override.yaml

⚠️ 关键:必须包含 plugin_daemon,否则插件无法下载

cd /opt/dify/docker

tee docker-compose.override.yaml > /dev/null <<'EOF'
version: '3'

services:

  api:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  worker:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  worker_beat:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  api_websocket:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # ★ 插件守护进程(插件下载核心,不能缺少)
  plugin_daemon:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,api,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  sandbox:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  web:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

EOF

第六阶段:防火墙与 SELinux

# 防火墙
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --permanent --zone=public --add-masquerade
sudo firewall-cmd --reload

# SELinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

第七阶段:启动 Dify

cd /opt/dify/docker

# 拉取镜像
docker compose pull

# 启动服务
docker compose up -d

# 等待启动
sleep 15

# 查看状态(所有服务应为 Up)
docker compose ps

正常状态:

NAME                      STATUS
docker-nginx-1            Up
docker-api-1              Up (healthy)
docker-worker-1           Up (healthy)
docker-worker_beat-1      Up
docker-api_websocket-1    Up
docker-plugin_daemon-1    Up          ← 插件守护进程
docker-web-1              Up (healthy)
docker-sandbox-1          Up (healthy)
docker-db_postgres-1      Up (healthy)
docker-ssrf_proxy-1       Up
docker-weaviate-1         Up
docker-redis-1            Up (healthy)

第八阶段:配置 Ollama 本地模型

安装 Ollama

# 走代理安装
curl -x http://192.168.2.2:6382 -fsSL https://ollama.com/install.sh | sh

# 启动服务
systemctl enable ollama
systemctl start ollama

拉取模型

# 设置代理后拉取
export HTTPS_PROXY=http://192.168.2.2:6382
ollama pull deepseek-r1:32b

⚠️ 解决上下文截断问题(重要)

问题现象:

# Ollama 日志出现警告
n_ctx_per_seq (2048) < n_ctx_train (32768)
-- the full capacity of the model will not be utilized

# Dify 节点输出 prompt_tokens 异常少
"prompt_tokens": 30  ← 正常应该是几万

原因: Ollama 默认 num_ctx=2048,大量 prompt 被截断丢失

修复:创建大上下文模型

# 先确认显存是否充足
nvidia-smi --query-gpu=index,memory.used,memory.free \
  --format=csv,noheader,nounits

# 创建 16k 上下文模型
cat > /tmp/Modelfile << 'EOF'
FROM deepseek-r1:32b
PARAMETER num_ctx 16384
PARAMETER num_predict 4096
PARAMETER num_batch 256
EOF

ollama create deepseek-r1-32b-16k -f /tmp/Modelfile

# 验证参数
ollama show deepseek-r1-32b-16k --parameters

# 测试运行并验证日志
ollama run deepseek-r1-32b-16k "你好"
journalctl -u ollama -n 20 --no-pager | grep -E "n_ctx_per_seq|capacity"

⚠️ 显存管理(多模型并存时必看)

# 查看当前显存占用
nvidia-smi --query-gpu=index,memory.used,memory.free \
  --format=csv,noheader,nounits

# 查看正在运行的模型
ollama ps

# 停止不用的模型释放显存
ollama stop 模型名称

# 删除不需要的模型
ollama rm 模型名称

显存需求参考(Tesla T4 16GB):

模型模型显存16k ctx KV Cache合计
deepseek-r1:32b Q4 ~19 GB ~8 GB ~27 GB
deepseek-v2:16b ~9 GB ~4 GB ~13 GB

第九阶段:在 Dify 中配置 Ollama

Dify 控制台
→ 设置 → 模型供应商 → Ollama
→ 添加模型
  模型名称: deepseek-r1-32b-16k
  基础URL:  http://192.168.2.5:11434
→ 保存

访问 Dify

🌐 http://192.168.2.5
首次访问设置管理员账号

踩坑总结

#问题原因解决方案
1 Docker 启动卡死在 activating /etc/systemd/system/docker.service.d/ 下存在多个代理配置文件冲突 只保留一个 http-proxy.conf
2 插件无法下载安装 docker-compose.override.yaml 缺少 plugin_daemon 服务的代理配置 在 override 中添加 plugin_daemon
3 容器内无法访问代理 容器内不能用 127.0.0.1 访问宿主机 使用宿主机真实 IP 192.168.2.5
4 内部服务走了代理 NO_PROXY 未排除内部容器服务名 NO_PROXY 加入所有内部服务名
5 prompt_tokens 异常少仅30 Ollama 默认 num_ctx=2048,大量数据被截断 创建 num_ctx=16384 的自定义模型
6 显存不足模型加载失败 多个大模型同时加载占满显存 停止/删除不用的模型释放显存

日常管理命令

cd /opt/dify/docker

# 查看状态
docker compose ps

# 查看日志
docker compose logs -f
docker compose logs -f plugin_daemon  # 插件日志
docker compose logs -f api            # API 日志

# 重启服务
docker compose restart

# 停止服务
docker compose down

# 更新 Dify
cd /opt/dify
git pull origin main
cd docker
docker compose down
docker compose pull
docker compose up -d

# Ollama 模型管理
ollama list        # 查看所有模型
ollama ps          # 查看运行中的模型
ollama stop 模型名  # 停止模型
ollama rm 模型名    # 删除模型

# 显存监控
nvidia-smi
watch -n 2 nvidia-smi  # 每2秒刷新

环境信息

操作系统: 红帽系列 Linux (RPM-based)
服务器IP: 192.168.2.5
代理地址: 192.168.2.2:6382
Dify安装目录: /opt/dify/docker

完整部署流程

第一步:安装系统依赖

# 更新系统
sudo dnf update -y

# 安装必要工具
sudo dnf install -y git curl wget vim net-tools

# 安装 Docker 依赖
sudo dnf -y install dnf-plugins-core

# 添加 Docker 官方仓库
sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
sudo dnf install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 当前用户加入 docker 组
sudo usermod -aG docker $USER
newgrp docker

# 验证安装
docker --version
docker compose version

第二步:配置 Docker 拉取镜像代理

# 创建配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d

# 写入代理配置(只保留一个代理配置文件)
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://192.168.2.2:6382"
Environment="HTTPS_PROXY=http://192.168.2.2:6382"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.2.5,10.0.0.0/8,172.16.0.0/12"
EOF

# ⚠️ 注意:只能有一个代理配置文件,多个会导致 Docker 启动卡死
ls /etc/systemd/system/docker.service.d/

# 重载并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证代理配置
sudo systemctl show --property=Environment docker

第三步:配置 Docker Daemon

sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "proxies": {
    "http-proxy": "http://192.168.2.2:6382",
    "https-proxy": "http://192.168.2.2:6382",
    "no-proxy": "localhost,127.0.0.1,192.168.2.5,10.0.0.0/8,172.16.0.0/12"
  },
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

# 重启 Docker 使配置生效
sudo systemctl restart docker

# 验证
docker info | grep -i proxy

第四步:配置 Git 代理并克隆 Dify

# 配置 Git 走代理
git config --global http.proxy http://192.168.2.2:6382
git config --global https.proxy http://192.168.2.2:6382

# 克隆 Dify 到 /opt 目录
git clone https://github.com/langgenius/dify.git /opt/dify

# 进入 docker 目录
cd /opt/dify/docker

# 复制环境配置文件
cp .env.example .env

第五步:配置 .env 文件

cd /opt/dify/docker

# 生成安全密钥
SECRET_KEY=$(openssl rand -base64 42)
echo "生成的密钥: $SECRET_KEY"

# 编辑 .env
vim .env

修改以下配置项:

# 核心安全配置
SECRET_KEY=your-generated-secret-key

# 服务访问地址
CONSOLE_WEB_URL=http://192.168.2.5
CONSOLE_API_URL=http://192.168.2.5
SERVICE_API_URL=http://192.168.2.5
APP_WEB_URL=http://192.168.2.5

# 数据库密码(务必修改)
POSTGRES_PASSWORD=your-strong-db-password
DB_PASSWORD=your-strong-db-password

# Redis 密码(务必修改)
REDIS_PASSWORD=your-strong-redis-password

# Sandbox 代理(.env 中已有此配置)
SANDBOX_HTTP_PROXY=http://192.168.2.2:6382
SANDBOX_HTTPS_PROXY=http://192.168.2.2:6382

# SSRF 代理(保持默认)
SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128
SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128

第六步:创建 docker-compose.override.yaml(核心关键)

✅ 使用 override 文件注入容器代理,不修改原始文件便于升级
⚠️ 必须包含 plugin_daemon,否则插件无法下载

cd /opt/dify/docker

tee docker-compose.override.yaml > /dev/null <<'EOF'
version: '3'

services:

  # API 服务
  api:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # Worker 服务
  worker:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # Worker Beat 服务
  worker_beat:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # API WebSocket 服务
  api_websocket:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,plugin_daemon,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # ★ 插件守护进程(插件下载安装核心服务)
  plugin_daemon:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,db,redis,sandbox,ssrf_proxy,weaviate,api,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # Sandbox 服务
  sandbox:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

  # Web 前端
  web:
    environment:
      HTTP_PROXY: "http://192.168.2.2:6382"
      HTTPS_PROXY: "http://192.168.2.2:6382"
      NO_PROXY: "localhost,127.0.0.1,192.168.2.5"
    extra_hosts:
      - "host-gateway:192.168.2.5"

EOF

# 验证文件
cat docker-compose.override.yaml

第七步:防火墙配置

# 开放 Web 端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp

# 允许 Docker 容器网络通信
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0

# 开启 IP 伪装(容器访问外网必须)
sudo firewall-cmd --permanent --zone=public --add-masquerade

# 重载防火墙
sudo firewall-cmd --reload

# 验证
sudo firewall-cmd --list-all

第八步:SELinux 配置

# 检查状态
getenforce

# 设置为 Permissive 模式
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

# 验证
getenforce

第九步:启动 Dify

cd /opt/dify/docker

# 拉取镜像
docker compose pull

# 后台启动
docker compose up -d

# 等待启动完成
sleep 15

# 查看服务状态
docker compose ps

正常状态输出:

NAME                      STATUS
docker-nginx-1            Up
docker-api-1              Up (healthy)
docker-worker-1           Up
docker-worker_beat-1      Up
docker-api_websocket-1    Up
docker-plugin_daemon-1    Up          ← 插件守护进程
docker-web-1              Up (healthy)
docker-sandbox-1          Up (healthy)
docker-db_postgres-1      Up (healthy)
docker-ssrf_proxy-1       Up
docker-weaviate-1         Up
docker-redis-1            Up (healthy)

第十步:验证代理配置

# 验证各容器代理注入
echo "=== plugin_daemon 代理 ===" 
docker exec docker-plugin_daemon-1 env | grep -i proxy

echo "=== api 代理 ===" 
docker exec docker-api-1 env | grep -i proxy

# 测试插件市场连通性
docker exec docker-plugin_daemon-1 \
    curl -x http://192.168.2.2:6382 \
    https://marketplace.dify.ai \
    -I --connect-timeout 10 -s | head -5

访问 Dify

🌐 http://192.168.2.5
首次访问设置管理员账号即可使用

关键经验总结

坑点问题解决方案
Docker 启动卡死 /etc/systemd/system/docker.service.d/ 下有多个代理配置文件冲突 只保留一个 http-proxy.conf
插件无法下载 override 文件缺少 plugin_daemon 服务的代理配置 在 override 中添加 plugin_daemon 代理
容器访问代理失败 容器内无法访问 127.0.0.1 上的宿主机服务 使用宿主机真实 IP 192.168.2.5
内部服务走代理 NO_PROXY 未排除内部容器服务名 NO_PROXY 中加入所有内部服务名

日常管理命令

cd /opt/dify/docker

# 查看状态
docker compose ps

# 查看日志
docker compose logs -f
docker compose logs -f plugin_daemon   # 插件日志

# 重启服务
docker compose restart

# 停止服务
docker compose down

# 更新 Dify 版本
cd /opt/dify
git pull origin main
cd docker
docker compose down
docker compose pull
docker compose up -d

# 查看资源占用
docker stats --no-stream

免责声明 本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。