ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Dify 1.17部署指南:Docker Compose与Ollama接入全解析

Dify 1.17部署指南:Docker Compose与Ollama接入全解析 先别急着搜教程我先把Dify 1.17这版部署的坑给你捋一遍。做AI应用开发的大概都绕不开Dify这个名字。它是一个开源的LLM应用开发平台把模型接入、知识库、工作流编排、Agent这些能力全封装成可视化操作说白了就是让你不用从头写代码也能快速搭出一个带业务逻辑的AI应用。Dify 1.17这版本在编排节点和模型接入的体验上确实做了不少优化但部署这件事本身尤其是新手第一次上手还是会遇到一堆奇奇怪怪的问题。网上教程很多可要么直接甩一个生产环境的compose文件让你自己改要么默认你已经是Docker老手了一个没接触过容器编排的人光在那一堆服务里找哪个是干嘛的就能耗掉半天。这篇文章我就拿Dify 1.17实际部署过一遍从环境准备、docker compose启动、接入本地Ollama模型到常见的启动失败、模型连不上等问题排查给你一条完整能跑通的精简路线。适合第一次部署Dify的新手也适合那些部署过一次但被各种报错折磨过、想重新理清思路的人。1. 部署前的思路整理为什么用Docker Compose最省心1.1 Dify 1.17的服务组成与部署方式选型Dify 1.17整套系统不是单一程序而是一组服务协作。看官方docker compose文件你会发现它至少包含web用户访问的前端界面负责渲染控制台。api核心后端服务处理业务逻辑、对话请求、应用管理。worker异步任务执行者知识库文档解析、队列消息处理等都在这里完成。dbPostgreSQL数据库存应用配置、用户信息、会话记录这些结构化数据。redis缓存和消息队列协调api和worker之间的任务分发。weaviate向量数据库知识库里的文档向量化之后存在这里做检索用的。sandbox代码执行沙箱运行工作流里的Python/Node.js代码片段避免影响主服务。出站请求安全组件负责过滤服务端发起的外部请求防止SSRF这类安全隐患。这还只是精简版完整生产环境可能还有plugin_daemon、nginx等。这么多服务分布在一起部署方式无非三种Docker Compose官方维护一条命令拉起全部服务依赖关系和网络配置都写好了是最适合新手也最适合大多数业务场景的方式。源码部署先把Python、Node.js各种环境装齐再手动建库建索引纯属给自己找罪受除非你要二次开发核心代码否则没必要。Kubernetes除非你一开始就知道自己要面对多节点、高可用这种规模否则对新手来说纯属杀鸡用牛刀光理解那一堆概念就够呛。新人上来直接走Docker Compose这条路没毛病。Dify 1.17的官方compose文件里已经把服务启动顺序、健康检查、依赖关系都定义好了你要做的只是准备好环境、配置好参数、然后启动框架本身的问题基本不用操心。1.2 硬件评估与环境准备先把硬件这块说清楚免得你部署到一半发现服务器性能跟不上。Dify全家桶跑起来内存和磁盘是大头。最低配置2核4G内存30G磁盘。能跑起来但别太乐观启动时几个服务同时拉起内存会很紧张。推荐配置4核8G内存50G以上磁盘。这个配置跑起来就舒服多了之后还要本地部署Ollama模型的话这个配置是起点。操作系统Ubuntu 22.04、Debian 12、CentOS Stream 9这些主流Linux发行版都行Windows环境用Docker Desktop也能跑但生产或长期使用还是建议Linux。Docker环境的安装没什么好说的一条命令curl -fsSL https://get.docker.com | bash安装完之后我建议分别验证一下docker和docker composedocker version docker compose version这里有个容易踩的坑很多教程标题写的是docker-compose但你执行docker-compose version的时候提示命令不存在。那是因为新版Docker已经用docker compose子命令替代了独立的docker-compose如果你习惯旧写法要么按系统包管理器安装docker-compose-plugin要么统一改成docker compose。Dify官方文档和compose文件都兼容这两种写法但命令别混用不然容易出乱子。再一个就是从零开始部署时目录规划要养成好习惯。我一般习惯放在/opt/dify或者home目录下的~/dify不用顶在/root下权限也清爽。还有个绕不开的话题——镜像拉取慢。Dify相关镜像加起来有十几个海外镜像源如果拉不动后续体验会很痛苦。解决办法就是配置registry mirror编辑/etc/docker/daemon.json把公共镜像源地址加进去然后重启docker服务。这一步在国内服务器上基本属于必须操作。2. 精简部署实操一条命令跑通Dify 1.172.1 拉取部署文件并理解目录结构环境准备就绪接下来看怎么把这套服务跑起来。Dify的部署文件在官方仓库里版本对应1.17。以git clone为例cd /opt git clone https://github.com/langgenius/dify.git cd dify/docker没人让你把整个仓库都拉下来反正核心就是docker这个目录下的docker-compose.yaml和.env.example。如果网络条件不方便用git也可以直接从GitHub页面下载zip压缩包解压之后进docker目录效果一样。进到docker目录你会看到一堆文件但别慌你操作的重点就两个一个是docker-compose.yaml一个是.env.example。第一步是把.env.example复制成.envcp .env.example .env这个.env就是整个部署的核心配置Dify的api、worker、web各服务都会读取它。2.2 .env配置里的关键参数打开.env文件不要全是默认值就完事了有几个参数必须改一下。SECRET_KEY加密相关的密钥生产环境必须改成随机串。用命令生成一个openssl rand -base64 42把生成的结果填进去以后升级、重启都要保持一致。POSTGRES_PASSWORD数据库密码默认值一定要改。自己设一个最好字母数字符号混合。VECTOR_STORE向量数据库类型新手先用默认的weaviate就够了后面数据量大了再考虑迁移。EXPOSE_NGINX_PORTDify对外服务的端口默认80。如果服务器上80端口被占了比如你还在跑别的Web服务就改成8080之类的端口。改完之后访问地址就得带上端口号比如http://你的IP:8080。TZ时区改成Asia/Shanghai避免日志时间对不上。这里我特别提一个新手容易犯的错改完.env之后不要急着docker compose up先确认你改的密码和compose文件里引用的变量名是一致的。Dify官方compose文件本身是读.env的变量所以只要你只改.env基本不会出问题。但如果之前已经启动过一次服务再改密码那就得把旧容器彻底清掉重新建不能直接restart否则数据库里的密码还是旧的新容器连接必然报错。2.3 启动服务与初始化验证配置改完后启动其实就一条命令docker compose up -d第一次执行会拉取镜像时间长短取决于网络环境快则几分钟慢的话可能需要更长时间。拉完之后所有服务会在后台启动。这时别急着去打开页面先看一眼所有容器状态docker compose ps正常情况下所有服务的状态都应该是Up如果再等一会儿也没有反复重启的迹象那基本就成功了一半。然后看api服务的日志确认数据库迁移是否完成docker compose logs -f api第一次启动会自动执行数据库初始化这个阶段会看到不少建表、迁移日志等它平稳下来不再刷屏就说明后端ready了。打开浏览器访问http://你的服务器IP如果改了端口就带上端口会进入Dify的初始化页面。设置管理员邮箱和密码提交之后就能登录控制台。到这里Dify 1.17本身已经跑起来了。但场景往往不止于此更多人部署Dify是想接自己的模型。如果你还没有外部API的密钥也没有配置模型供应商那Dify就算空转。下一章我来讲怎么把本地部署的Ollama模型接进来这也是本地部署最常走的一条路径。3. 把本地大模型接进来Ollama与Dify联动3.1 为什么建议新手选OllamaDify本身不产模型它只做编排和应用开发模型全靠外部供应商提供。对新手来说有两个选择注册第三方API服务、或者本地部署开源模型。如果你只是想练手、或者在数据不出内网的环境里做验证我强烈建议先用Ollama托管本地模型。Ollama是一个开源大模型管理工具类比本地装了一套“模型仓库”你告诉它要拉哪个模型它就帮你下到本地并通过一个HTTP API接口对外提供推理服务。好处有三不花钱、不依赖外部网络、数据完全在你自己手里。跑一个7B参数的qwen模型普通4核8G的服务器就能带得动对学习和内部工具来说够用了。3.2 Ollama安装与监听配置Ollama安装本身非常简单curl -fsSL https://ollama.com/install.sh | sh装完之后要做的第一件事不是急着拉模型而是调整监听地址。Ollama默认只监听127.0.0.1也就是只能本机访问。但Dify的api和worker是跑在Docker容器里的它们访问宿主机时需要走另一个网络路径如果不把Ollama的监听地址放开Dify那边肯定是连不上的。修改方法编辑systemd服务文件systemctl edit ollama加入[Service] EnvironmentOLLAMA_HOST0.0.0.0:11434然后重启Ollamasystemctl daemon-reload systemctl restart ollama拉一个模型以qwen2.5:7b为例ollama pull qwen2.5:7b验证一下Ollama的接口是否正常curl http://localhost:11434/api/tags能返回一段带models信息的JSON就说明Ollama已经在正常工作。3.3 Dify中配置Ollama模型供应商打开Dify控制台右上角头像进入设置找到“模型供应商”在列表里找到Ollama点击添加。需要填几个关键信息模型类型选LLM对话生成模型。模型名称必须和你本地ollama pull下载的模型tag保持一致比如qwen2.5:7b填错会直接报模型不存在。Base URL这里有个细节Dify容器访问宿主机时不能填localhost而要填http://host.docker.internal:11434。为什么是host.docker.internal因为Dify的docker compose文件里默认给api和worker容器配置了extra_hosts把host.docker.internal这个域名映射到了宿主机上所以容器里通过它能访问到宿主机服务。这是容器网络的一种常用手法。填好之后点“测试”如果提示连接成功保存即可。接着在你的应用界面里选择这个模型随便输入一句“你好做个自我介绍”走一遍完整链路。首条消息可能会等待的时间长一点因为模型要加载进显存或内存几秒到几十秒都有可能属正常现象。如果连接超时优先检查两件事第一Ollama是否真的监听在0.0.0.0:11434第二在Dify的容器里单独测一下网络连通性docker exec -it dify-api-1 curl http://host.docker.internal:11434/api/tags能通就是网络没问题不能通就是监听地址或者防火墙挡了。Ollama默认的端口11434如果被占用也要注意改端口的话Dify里的Base URL也要跟着变。4. 新手最容易踩的坑问题排查技巧4.1 用容器状态和日志快速定位问题做Dify部署遇到问题不用慌解决问题的思路其实只有三步看容器状态、看日志、根据日志找关键字。最常用的命令docker compose ps docker compose logs --tail200 api docker compose logs --tail200 worker docker compose logs --tail200 webdocker compose ps的输出里重点看STATUS列。Up表示运行中Restarting表示这个容器在反复重启Exited表示已经彻底退出。一个服务反复重启说明它启动时依赖的条件一直没满足最常见的是数据库密码不一致、磁盘满了、内存不够。什么时候看api日志页面打不开、接口报500的时候。什么时候看worker日志知识库上传文档后一直不处理、对话排队消息不消费的时候。什么时候看web日志页面白屏、502的时候先看web能不能连上api。4.2 高频问题排查速查表把部署过程中高频出现的问题整理成了表格便于对照处理问题现象可能原因解决办法80端口被占用页面访问无响应服务器上已有其他进程占用80端口修改.env里EXPOSE_NGINX_PORT为8080重新docker compose up -dapi容器反复重启PostgreSQL密码不匹配或数据库初始化失败检查.env里POSTGRES_PASSWORDdown掉容器后重新up页面502白屏web连不上api或api还没启动完成查看api日志确认数据库迁移结束再刷新页面知识库文档上传后一直等待worker容器挂了或redis队列堆积查看worker日志确认redis连接正常模型调用超时Ollama监听地址不对或模型未加载完毕先测试curl localhost:11434再测试宿主机IP最后在容器内测host.docker.internalmodel not foundDify里填的模型名和ollama拉取的不一致ollama list查看准确名称Dify里同步修改磁盘空间不足导致服务频繁退出镜像和数据增长占满磁盘df -h查看磁盘docker system prune清理无用镜像和缓存weaviate启动不起来内存不够或端口冲突增加内存或者修改weaviate的端口配置4.3 几个容易忽略的细节和建议有些问题不是一次就能全部避开的根据我的经验下面几点多注意一下能省不少事。.env改完后最好用docker compose config检查一遍配置语法它会把最终生效的配置打印出来格式对不上能直接看出来。Dify升级版本和重置容器是两码事。新手折腾环境下想彻底重来执行docker compose down -v会把数据库、向量数据全部清空包括管理员账号、应用配置全都没了。有这个心理准备再操作。内存不够花的服务器建议先加swap。比如4G内存的机器swap给到8G虽然模型推理速度会打折但至少不会出现服务起不来或者被系统OOM杀掉。top或free -h看到内存吃紧swap顶上来总比直接挂掉强。日志文件会持续增长。compose文件里默认的日志驱动虽然会限制单文件大小但长期运行还是要定期清理日志。一条比较稳的清理命令是docker system prune -f只清无用的缓存和停止的容器不会动正在运行的数据。不要为了精简而随手删掉服务。有人觉得sandbox没用有人觉得weaviate没必要想从compose文件里删掉几个服务来省资源。但Dify各服务之间是联动的删一个看似“不常用”的服务很可能导致编排、知识库、安全沙箱功能全部罢工。真要精简应该从模型规模、服务器规格上去做减法而不是拆服务。再补充一点Dify 1.17后端和前端是分离部署的升级的时候用官方提供的docker compose编排直接更新镜像再up -d比东改一个服务西改一个文件可靠得多。我用这个流程部署过好几套环境从空服务器到跑通Dify加Ollama基本能控制在半小时到一小时之间。新手这段时间主要耗在处理环境依赖和镜像拉取上真正卡住的往往是“不知道从哪里看日志”这一步。最后分享一个小习惯每次部署完Dify我第一件事不是急着挂域名、配HTTPS、加知识库而是先用Ollama把qwen2.5这类7B模型跑起来在Dify里建一个最基础的对话应用确认从浏览器到Dify再到本地模型整条链路是通的。这条链路一旦走通之后加知识库、加工作流编排、接外部模型供应商都是一层一层往上叠的增量操作至少不会让你每次都面对一个从头黑屏的启动现场。
返回列表