跳到主内容
快讯直播
AI智模界
教程

Dify 私有化部署教程:Docker Compose 全流程

适用场景

这套方案适合希望在自有服务器或内网环境中运行 Dify 的团队与个人。通过 Docker Compose 把 API、Worker、Web 前端以及 PostgreSQL、Redis、向量库等依赖服务一起拉起,数据留在自己手里,方便做权限控制、网络隔离和后续二次开发。只要机器能装 Docker,就可以按下面步骤走通。

环境与前置条件

  • 操作系统:常见 Linux 发行版均可,如 Ubuntu、Debian、CentOS。具体支持列表以官方文档当前版本为准。
  • 运行时:Docker Engine 与 Docker Compose v2 插件。docker compose version 能正常输出即可。
  • 内存:建议 8GB 以上。如果同时跑本地向量库和模型服务,建议 16GB 以上。
  • 磁盘:建议 40GB 以上可用空间,用于镜像、数据库和上传文件。
  • 网络:服务器需要能访问外网拉取镜像;对外提供服务的端口如 80、443 或自定义端口需要放行。
  • 可选:一个已解析到服务器的域名,用于配置 HTTPS。

分步骤部署

步骤 1:安装 Docker 与 Compose 插件

如果机器还没装 Docker,可以用官方脚本安装:

```bash

curl -fsSL https://get.docker.com | sh

sudo systemctl enable --now docker

sudo usermod -aG docker $USER

```

执行完最后一条后,退出当前 SSH 会话重新登录,或者执行 newgrp docker 让用户组生效。验证:

```bash

docker version

docker compose version

```

两条命令都能输出版本信息,说明安装成功。具体版本要求以官方文档当前版本为准。

步骤 2:获取 Dify 代码

```bash

git clone https://github.com/langgenius/dify.git

cd dify/docker

```

如果提示 git: command not found,先用系统包管理器安装 git,例如 sudo apt install git。进入 docker 目录后,你会看到 docker-compose.yaml.env.example 等文件。

步骤 3:配置 .env 文件

复制一份环境变量模板:

```bash

cp .env.example .env

```

然后编辑 .env,重点改这几项:

1. SECRET_KEY:用于加密会话等,必须换成随机值。可以用下面的命令生成:

```bash

openssl rand -base64 42

```

把输出内容填到 SECRET_KEY= 后面。

2. 数据库密码:确保 DB_PASSWORDPOSTGRES_PASSWORD 的值一致。不一致会导致 API 连不上数据库。

3. 端口:默认 EXPOSE_NGINX_PORT=80。如果宿主机 80 端口已被占用,改成 8080 或其他空闲端口,后面反向代理会用到。

4. 初始管理员:部分版本支持在 .env 中设置初始管理员邮箱和密码,具体变量名以 .env.example 里的注释为准。如果没有,首次访问页面时按提示创建即可。

步骤 4:启动 Dify 与依赖服务

```bash

docker compose up -d

```

这条命令会拉取镜像并启动 PostgreSQL、Redis、向量库、API、Worker、Web、Nginx 等容器。首次执行需要几分钟,取决于网络速度。看到大量 StartedRunning 字样即表示命令执行完毕。成功标志是:

```bash

docker compose ps

```

输出的 State 列显示 runninghealthy。如果某个容器反复重启,先看日志:

```bash

docker compose logs -f api

```

步骤 5:配置反向代理

Dify 自带 Nginx 容器,默认监听 EXPOSE_NGINX_PORT。如果想让外部通过域名访问,可以在宿主机再装一层 Nginx 做反向代理。安装:

```bash

sudo apt install nginx

```

新建配置文件,例如 /etc/nginx/conf.d/dify.conf

```nginx

server {

listen 80;

server_name your.domain.com;

location / {

proxy_pass http://127.0.0.1:8080;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

client_max_body_size 100m;

}

}

```

注意 proxy_pass 的端口要和 .envEXPOSE_NGINX_PORT 一致。如果 Dify 端口改成了 8080,这里就写 8080。检查并重载:

```bash

sudo nginx -t

sudo systemctl reload nginx

```

需要 HTTPS 时,可以用 certbot 申请证书并自动修改 Nginx 配置,具体步骤以官方文档当前版本为准。

验证部署是否成功

1. 容器状态:

```bash

docker compose ps

```

预期:所有服务均为 runninghealthy,没有 restarting

2. 本地接口:

```bash

curl -I http://127.0.0.1:8080

```

预期:返回 HTTP/1.1 200HTTP/1.1 302。如果返回 Connection refused,说明容器没起来或端口不对。

3. 浏览器访问:

打开 http://你的域名http://服务器IP:端口,能看到 Dify 初始化页面。按提示设置管理员账号后进入控制台,说明 Web 服务正常。

4. 查看 API 日志:

```bash

docker compose logs -f api

```

预期:日志中出现启动完成、监听端口等信息,没有持续报错。

常见报错与解决

1. 报错:Error response from daemon: Ports are not available: bind: address already in use

→ 原因:宿主机的 80 或 8080 端口已被其他程序占用,常见的是系统自带 Nginx 或 Apache。

→ 解决:修改 .envEXPOSE_NGINX_PORT 为其他端口,例如 8081,然后重启:

```bash

docker compose down

docker compose up -d

```

2. 报错:sqlalchemy.exc.OperationalError: connection to server at "db" ... failed

→ 原因:数据库密码不一致,或者数据库容器还没初始化完成。

→ 解决:检查 .envDB_PASSWORDPOSTGRES_PASSWORD 是否相同,然后重启相关服务:

```bash

docker compose restart db api worker

```

3. 报错:Error pulling image ... net/http: TLS handshake timeout

→ 原因:拉取镜像时网络超时,常出现在国内网络环境。

→ 解决:为 Docker 配置镜像加速器或代理,具体配置方式以官方文档当前版本为准。配置完成后重新拉取:

```bash

docker compose pull

docker compose up -d

```

4. 报错:initdb: error: directory "/var/lib/postgresql/data" exists but is not empty

→ 原因:数据卷里残留了旧版本或不同密码初始化的数据,与新配置冲突。

→ 解决:如果不需要旧数据,先备份再清理数据卷:

```bash

docker compose down -v

docker compose up -d

```

注意 -v 会删除数据卷,执行前确认已备份。

后续维护

  • 备份:定期备份 PostgreSQL 数据、上传文件目录和 .env。可以用 docker compose exec db pg_dump -U postgres dify > backup.sql 导出数据库,具体用户名和库名以 .env 为准。文件存储通常在 dify/docker/volumes 下,直接打包该目录即可。
  • 升级:先备份,再拉取新代码并重建容器:

```bash

cd dify

git pull

cd docker

docker compose pull

docker compose up -d --build

```

升级前建议查看官方 release notes,确认是否有数据库迁移或破坏性变更,以官方文档当前版本为准。

  • 日志:用 docker compose logs -f --tail=100 查看实时日志,定位问题时可以只看某个服务,例如 docker compose logs api
  • 监控:用 docker stats 观察容器 CPU、内存和磁盘占用。关注容器重启次数、数据库连接数和磁盘剩余空间,必要时接入 Prometheus 与 Grafana 做长期监控。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。