Skip to content

在智算云平台上部署 Dify

Dify 是一个开源项目,旨在提供可视化编排生成式 AI 应用的专业工作站。该项目的 Github 仓库地址为:<https://github.com/langgenius/dify>,截止本教程最新版 tag 为 1.1.3。

信息

如果只需要了解在 Dify 中如何配置 GenStudio API,请参见在 Dify 中使用 GenStudio API

方案概述

我们将使用智算云平台「开发机」功能来部署 Dify。

  • 使用 Dify 官方文档基于 Docker Compose 的部署方案: Docker Compose 部署
  • 使用 AIStudio 开发机的 Docker 容器功能。该功能允许用户在开发机内(主容器)运行其他容器,并创建挂载 GPU 的容器,测试容器化应用,从而提供更高的灵活性和隔离性:Docker 容器
  • 使用 AIStudio 开发机的 Web 应用预览功能。该功能允许用户提供一个开发机内部 Web UI 服务端口,由平台监听并生成访问链接:Web 应用预览

本方案仅用于在智算云平台 AIStudio 开发机上测试、体验 Dify 平台,非生产级别服务部署方案。

实施障碍

在智算云平台的开发机中安装 Dify 时,如果根据 Dify 官方文档进行操作,可能会遇到一些障碍:

  • 开发机默认未预装 Docker Compose 工具,需要自行安装 Docker Compose
  • 由于运营商网络限制,可能无法顺利拉取 GitHub 代码仓库,需要使用第三方学术加速服务或代理工具
  • 由于运营商网络限制,不支持直接从 Docker Hub(docker.io)拉取镜像(包括未指定 Registry 前缀和显式指定 docker.io 的命令),需要自行获取镜像并提前存入租户在平台的私有镜像仓库,或使用代理工具

环境准备

创建一台开发机,要求如下:

  • 推荐使用 Ubuntu 22.04 操作系统镜像
  • Dify 不使用 GPU,CPU/内存基本要求为 2c4g。开发机算力规格主要由您的本地模型推理需求决定,如简单测试,选择单卡 GPU 即可。
  • 请确保为开发机开启 Docker 容器 功能,请在创建开发机时启用「Docker 容器」开关。
  • 请确保为开发机填写 Web 应用预览端口,用于后续访问 Dify 控制台。本教程假设端口号为 9999。

提示

开发机系统盘大小为 100GiB,存储容量有限。如果需要使用 Ollama 等框架进行本地推理,建议为开发机提供更大的持久化存储,例如云盘共享高性能存储

安装 Docker Compose

验证 Docker Compose 是否已安装。

language-shell
docker compose version

如已安装,将正常输出版本号。如未安装 Docker Compose,请移步自行安装 Docker Compose

拉取 Dify 项目代码

拉取 Dify GitHub 代码仓库。以下示例中已添加第三方加速服务前缀。

language-bash
cd /root
# 拉取 Dify 代码仓库
git clone https://ghfast.top/https://github.com/langgenius/dify.git --branch 1.1.3

如遇到问题,可尝试替换为其他加速服务。详见第三方学术加速服务指南

处理 Docker 镜像问题

Dify 原始 Docker Compose 文件中定义了多个服务,使用了 Docker Hub 镜像。由于运营商网络原因,直接从 Docker Hub(docker.io)拉取镜像时会下载失败(包括未指定 Registry 前缀和显式指定 docker.ioregistry-1.docker.io 的命令)。

警告

以下方案均需要您自行寻找代理工具,或第三方 Docker 镜像加速服务。智算云平台不提供此类服务。请务必解决镜像问题,否则无法继续执行后续步骤。

方案一 使用 Docker 服务代理工具

在有自备代理工具的情况下,该方案较为简便。本教程中采用方案一。

  1. 以 Clash 类工具为例,从第三方获取相关服务凭证后,可在 AIStudio 开发机中安装客户端。详见 第三方学术加速服务或代理工具

  2. 在开发机中启动您的代理服务,假设您的本地 HTTP 代理服务运行在 127.0.0.1,端口为 7890。

  3. 为开发机 Docker 服务配置代理。

    language-shell
    # 创建目录
    mkdir -p /etc/docker
    # 创建 Docker 服务配置文件
    touch /etc/docker/daemon.json

    /etc/docker/daemon.json 写入如下内容:

    language-json
    {
        "proxies": {
        "http-proxy": "`http://127.0.0.1:7890`",
        "https-proxy": "`http://127.0.0.1:7890`",
        "no-proxy": "*.test.example.com,.example.org,127.0.0.0/8,*.infini-ai.com"
        },
        "registry-mirrors": ["https://<my-docker-mirror-host>"]
    }

    信息

    建议在 no-proxy 字段合理配置不需要通过代理访问的服务。

  4. 使用 Dockerctl 重启 Docker 服务。

    language-shell
    dockerctl restart

方案二 提前拉取 Docker 镜像

您也可以提前手动拉取 Docker Compose 服务镜像,保存到租户私有仓库

  • 使用第三方镜像加速服务,拉取 amd64 架构的镜像到本地,推送到租户镜像仓库。请参考迁移外部镜像
  • 或直接在 Compose 文件使用第三方镜像加速服务,例如直接在 Compose 文件中采用增加前缀的方式拉取镜像。

修改环境变量

进入 Dify 源代码的 Docker 目录。

language-shell
cd dify/docker

复制环境配置文件。

language-shell
cp .env.example .env

需要修改 Dify 项目中 NGINX 配置,默认为 80,请修改 EXPOSE_NGINX_PORT 为开发机的 Web 应用预览端口(本教程中该端口号为 9999)。

language-yaml
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
EXPOSE_NGINX_PORT=9999
EXPOSE_NGINX_SSL_PORT=44443

启动 Dify 服务

language-shell
docker compose up -d

启动完成后,可通过 docker ps 检查服务健康状态。输出示例:

language-shell
root@is-dazzy7xv2ymalks7-devmachine-0:~/dify/docker# docker ps
CONTAINER ID   IMAGE                                       COMMAND                  CREATED         STATUS                   PORTS                                                                              NAMES
7c123a7bedcd   nginx:latest                                "sh -c 'cp /docker-e…"   2 minutes ago   Up 2 minutes             0.0.0.0:9999->80/tcp, :::9999->80/tcp, 0.0.0.0:44443->443/tcp, :::44443->443/tcp   docker-nginx-1
69b1d31195b2   langgenius/dify-api:1.1.3                   "/bin/bash /entrypoi…"   2 minutes ago   Up 2 minutes             5001/tcp                                                                           docker-worker-1
2dc5392950b3   langgenius/dify-api:1.1.3                   "/bin/bash /entrypoi…"   2 minutes ago   Up 2 minutes             5001/tcp                                                                           docker-api-1
dca4f37622bc   langgenius/dify-plugin-daemon:0.0.6-local   "/bin/bash -c /app/e…"   2 minutes ago   Up 2 minutes             0.0.0.0:5003->5003/tcp, :::5003->5003/tcp                                          docker-plugin_daemon-1
0d0f4cb537c3   langgenius/dify-web:1.1.3                   "/bin/sh ./entrypoin…"   5 hours ago     Up 2 minutes             3000/tcp                                                                           docker-web-1
49c6fc2ef344   langgenius/dify-sandbox:0.2.11              "/main"                  5 hours ago     Up 2 minutes (healthy)                                                                                      docker-sandbox-1
f59502e8a3a2   postgres:15-alpine                          "docker-entrypoint.s…"   5 hours ago     Up 2 minutes (healthy)   5432/tcp                                                                           docker-db-1
5aa727dec5d1   ubuntu/squid:latest                         "sh -c 'cp /docker-e…"   5 hours ago     Up 2 minutes             3128/tcp                                                                           docker-ssrf_proxy-1
e76499e67c2c   redis:6-alpine                              "docker-entrypoint.s…"   5 hours ago     Up 2 minutes (healthy)   6379/tcp                                                                           docker-redis-1
ae9da2cc6734   semitechnologies/weaviate:1.19.0            "/bin/weaviate --hos…"   5 hours ago     Up 2 minutes                                                                                                docker-weaviate-1

访问 Dify 控制面板

前往开发机详情页,点击 Web 应用预览,点击弹窗中的跳转链接。

警告

Web 应用预览链接仅在登录智算云平台账号后可用,因此不适用于对外发布应用服务。

参考资源

  • 在 Dify 中使用 GenStudio API
  • 科学安装 Ollama:如果需要在同一台开发机上安装和访问 Ollama,请注意通过 OLLAMA_HOST 环境变量将 Ollama 服务绑定至 0.0.0.0。请注意通过 OLLAMA_ORIGINS 环境变量允许跨域访问。