Docker Compose 部署 Dify 教程 - LLM应用开发平台
前言
Dify 是一个开源的 LLM 应用开发平台,支持可视化编排 Prompt、Agent、RAG 知识库和工作流,可本地私有化部署。
本文基于官方 Docker Compose 方式,在 Rocky Linux / RHEL 系上完成一键部署。
官方文档:https://docs.dify.ai/en/self-host/deploy/quick-start/docker-compose
项目地址:https://github.com/langgenius/dify
环境要求
硬件(最低)
| 项目 | 要求 |
|---|---|
| CPU | >= 2 核 |
| 内存 | >= 4 GiB(生产建议 8 GiB+) |
| 磁盘 | 建议预留 40 GiB+(镜像 + 向量库 + 知识库文件) |
软件
| 项目 | 要求 |
|---|---|
| 操作系统 | Linux(本文以 Rocky Linux 9 为例) |
| Docker | 19.03+ |
| Docker Compose | 2.24.0+(必须) |
环境配置
1 | systemctl disable --now firewalld |
Docker-CE 环境安装
1 | yum install -y yum-utils |
参考清华大学源:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
Docker 国内镜像加速器配置
1 | sudo mkdir -p /etc/docker |
PS:也可参考 https://songxwn.com/cf-works-DockerHub-Proxy/ 自行搭建镜像加速。
部署 Dify
1. 克隆官方仓库(指定最新 Release)
1 | cd /opt |
2. 进入 docker 目录并生成配置
1 | cd /opt/dify/docker |
常用 .env 项(按需修改)
用 vim .env 编辑,重点关注:
1 | 对外暴露端口(默认 80 / 443) |
单域名 + Nginx 默认部署时,上述 URL 可留空,系统会按请求自动识别。
1.16.1 Docker启动问题
这是 Dify 1.16.1 中广泛报道的问题,由 Collaboration/WebSocket 子系统 [1] 中的两个漏洞引起:
在 Socket.IO 发布/订阅监听器上——用于 Redis 连接继承 A(默认 5s),导致它多次超时和重新连接,默默丢弃协作事件。这样工作流编辑器就会永远卡在加载/同步界面。pubsub.listen()socket_timeout
不匹配——容器可以自动生成与容器不同的密钥,导致每个WebSocket连接的JWT验证失败[2]。api_websocketapi
在文件.env 找到下面选项,改为false,然后重启容器。
ENABLE_COLLABORATION_MODE=false
1 | docker compose down |
PS:如果还有问题,请清理浏览器缓存,重启登录。
更多变量说明见:https://docs.dify.ai/en/self-host/deploy/configuration/environments
3. 启动服务
1 | cd /opt/dify/docker |
启动后会拉起大致如下组件:
- 核心服务:
api、api_websocket、worker、worker_beat、web、plugin_daemon、agent_backend - 依赖组件:
weaviate、db_postgres、redis、nginx、ssrf_proxy、agent_ssrf_proxy、sandbox、local_sandbox - 一次性任务:
init_permissions(初始化存储权限后自动退出,状态为Exited属正常)
4. 检查容器状态
1 | docker compose ps |
访问与初始化
浏览器打开管理员初始化页面,创建管理员账号:
1 | # 本机 |
初始化完成后,通过以下地址登录使用:
1 | http://localhost |
默认对外端口为 80。若 .env 中修改了 EXPOSE_NGINX_PORT,访问时请带上对应端口。
反向代理(可选)
Dify 自带 Nginx 容器。若前面还有宿主机 Nginx / 宝塔 / 1Panel,可再做一层反向代理,注意 WebSocket(协作编辑)与大文件上传超时。
示例(宿主机 Nginx):
1 | server { |
开启 HTTPS 也可参考仓库内 Certbot 说明:docker/certbot/README.md。
自定义配置
修改配置后需重启生效:
1 | cd /opt/dify/docker |
说明:
- 必改/启动项 写在
docker/.env - 可选/厂商相关 模板在
docker/envs/,去掉.example后缀后编辑 .env中的值优先于envs/*.env
升级
不同版本升级步骤可能不同,请先阅读目标版本的 Releases 说明。通用流程:
1 | cd /opt/dify |
升级后务必核对 .env / envs/ 是否有新增或变更项,避免服务因缺变量起不来。
常用运维命令
1 | cd /opt/dify/docker |
数据一般保存在 Docker Volume 中,备份时可一并备份 docker/.env 与 volumes 数据。
常见问题
docker compose报错或版本过低
使用docker compose version确认 >= 2.24.0,并安装docker-compose-plugin。镜像拉取超时
配置国内 Registry Mirror,或自建 Docker Hub 代理。页面能开但接口异常 / 白屏
检查防火墙、端口映射、反向代理是否转发 WebSocket;若改过域名,补全.env中的*_URL。init_permissions显示 Exited
正常现象,该容器只负责初始化权限。内存不足容器反复重启
至少保证 4 GiB,生产建议 8 GiB+,并可用docker stats观察占用。
实际应用
接入系统的MCP,比如Zabbix、MCP,让Agent去自动分析现有内部系统信息进行查询汇总。
接入日志,实时分析每个日志。
技术交流群
发送邮件到 ➡️ [email protected]
或者关注 WX 公众号:网工格物
