2.1 Docker部署:把工作台装起来


2.1 Docker 部署:把工作台装起来

Docker Compose 部署是 Dify 自部署的标准路径:一条 docker compose up -d 拉起网关、API、数据库、缓存、向量库等一组互相配合的容器。装得快不稀奇,装得明白才重要——本节带你边装边对照 1.3 的架构图,每个容器都能对上号。

承接第 1 章的架构草图,本节把它落到你的机器上。它直接通向 2.2 节:平台跑起来后,第一件正经事就是去设置页挂模型。

先把地基备好

Dify 自部署只硬性依赖两样:Docker(20.10 以上)与 Docker Compose(v2 插件形态即可)。Linux 是最顺滑的宿主;Windows 用户建议走 WSL2,把 Docker 装在 Linux 子系统里,而不是依赖桌面版的复杂网络转发。验证地基一行命令:

docker --version && docker compose version # 期望输出示例: # Docker version 27.x, build xxx # Docker Compose version v2.29.x

版本号能打出来,地基就是好的。磁盘方面给 Dify 留 10 GB 以上富余——镜像本体几个 GB,知识库与日志会持续生长。内存建议 4 GB 起步,8 GB 从容;这里的占用与模型无关,模型跑在供应商或你另配的推理服务上。

四步装完主体

**第一步,取代码。**官方仓库提供稳定的发布分支,克隆下来就有一份现成的 Compose 编排与示例环境变量:

git clone https://github.com/langgenius/dify.git --depth 1 # --depth 1 只取最新快照,省时间省磁盘 cd dify/docker

**第二步,准备环境变量文件。**编排目录里有一份 .env.example,复制为 .env 再改,这是唯一需要动手改的配置文件:

cp .env.example .env

第三步,改三处再启动。.env 几百行,第一遍只需要看懂三处:

# 1) 对外端口:宿主机 80 被占用时换一个,比如 8088 EXPOSE_NGINX_PORT=8088 # 2) 控制台与 API 的对外地址:填别人访问你这套环境时用的地址 # 本机自用就填 http://localhost:8088;给团队用就填服务器内网 IP CONSOLE_API_URL=http://localhost:8088 SERVICE_API_URL=http://localhost:8088 # 3) 发布出去的 WebApp 地址:影响发布页里嵌入代码指向哪个域名 APP_WEB_URL=http://localhost:8088

这四个 URL 不改的典型症状:发布应用后,嵌入外部网站的客服组件白屏——因为页面脚本还在指向容器内部的旧地址。装完再改也来得及,但要重启容器生效。

第四步,拉起并验证。

docker compose up -d # 首次会拉镜像,视网速几分钟 docker compose ps # 应看到约十个服务全部 Up # NAME STATUS # docker-api-1 Up # docker-worker-1 Up # docker-web-1 Up # docker-db-1 Up # docker-redis-1 Up # ...(向量库、沙箱、插件守护、网关等)

浏览器访问宿主机对应端口,第一次打开会让你创建管理员账号。到这里,1.3 节架构图上的每个部件都活了。

三个不显眼但重要的配置

SECRET_KEY。.env 里的会话加密密钥,示例文件带的是占位值。生成一个自己的随机值替换掉,团队成员的登录态、加密存储的供应商密钥都依赖它。换密钥会让已存的加密数据无法解密,所以要在接模型之前定下来,之后不再更换:

# 生成一个 42 字符以上的随机串,粘进 .env 的 SECRET_KEY openssl rand -base64 42

**数据卷。**数据库、缓存、向量库的数据都落在命名卷里(docker volume ls 可见)。这意味着 docker compose down 不丢数据,但换机器、重装时要显式迁移卷,第 7 章的备份一节会给出完整做法。

**镜像版本。**默认拉取的是当前稳定版。生产环境建议固定到具体版本号再上线,避免某次重建环境时静默升到不兼容的大版本。

升级的三步节奏

平台会持续发版,健康的升级节奏是"拉代码、拉镜像、滚动重启",全程几分钟:

git pull # 取最新发布分支 docker compose pull # 只拉有更新的镜像 docker compose up -d # 重建有变化的容器,数据卷不动

升级前做一次数据库卷备份(第 7 章给出脚本),升级后跑一遍 2.3 节的体检清单。跳版本的注意事项很简单:跨多个大版本时逐版本升,不要一步登天。

⚠️ 常见坑一:80 端口被占用导致网关容器起不来,报 bind 报错——改 EXPOSE_NGINX_PORT 就解决,不用去停别的服务。常见坑二:改了 .env 不重启容器,以为没生效是 bug——环境变量在容器创建时注入,docker compose up -d 一次即可重建。常见坑三:把 Dify 装在有全局代理的机器上,容器解析外部模型域名失败——需要给 Docker 守护进程配代理或 DNS,这属于宿主机网络层问题,Dify 日志里只会看到超时。

💡 关键直觉:自部署 Dify 的本质是"用磁盘和内存换控制权"。你得到的不是更快,而是数据不出内网、版本自己定、成本可预期的整套自主性——这也是很多合规敏感团队选它的第一理由。

本节要点回顾

  • 地基两项:Docker 与 Compose 插件,版本够新即可,Windows 走 WSL2 少踩网络坑;
  • 三处配置:对外端口、控制台与 API 地址、WebApp 地址——四个 URL 决定发布出去的东西指向哪里;
  • SECRET_KEY 哲学:接模型之前定死,之后永不更换;
  • 数据在卷里:重建容器不丢数据,换机器要显式迁移卷;
  • 升级三步:拉代码、拉镜像、滚动重启,跨大版本逐级走。

平台已经是活的了,但它现在还是哑巴。下一节去设置页,把第一个大模型挂上工作台。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U