Ubuntu 22.04 上部署 Dify

一、Docker安装

前提条件

防火墙的局限性

在安装 Docker 之前,请务必考虑以下安全影响和防火墙不兼容的问题。

  • 如果你用 ufw 或 firewalld 来管理防火墙设置,请注意 当你用 Docker 暴露容器端口时,这些端口会绕过你的 防火墙规则。更多信息请参见 Docker 和 UFW
  • Docker 仅兼容 iptables-nftiptables-legacy。用 NFT 创建的防火墙规则在安装了 Docker 的系统上不被支持。确保你使用的任何防火墙规则集都是用 iptablesip6tables 创建的,并且把它们添加到 DOCKER-USER 链中, 参见 数据包过滤和防火墙

操作系统需求

要安装 Docker Engine,你需要以下几个 Ubuntu 版本中的一个 64 位版本:

  • Ubuntu Resolute 26.04 (LTS)
  • Ubuntu Questing 25.10
  • Ubuntu Noble 24.04 (LTS)
  • Ubuntu Jammy 22.04 (LTS)

Ubuntu Docker Engine 兼容 x86_64(或 amd64)、armhf、arm64、s390x 和 ppc64le(ppc64el)架构。

注释:在 Ubuntu 衍生发行版(如 Linux Mint)上安装并不被官方支持(但可能可行)。

卸载旧版本

在安装 Docker Engine 之前,你需要卸载所有冲突包。

你的 Linux 发行版可能提供非官方的 Docker 包,这可能会与 Docker 官方包发生冲突。在安装官方版本的 Docker Engine 之前,必须先卸载这些包。

非官方的卸载包有:

  • docker.io
  • docker-compose
  • docker-compose-v2
  • docker-doc
  • podman-docker

此外,Docker Engine 依赖于 containerdrunc。Docker Engine 将这些依赖捆绑成一个包: containerd.io。如果你之前安装过 containerdrunc,请卸载它们以避免与 Docker Engine 捆绑版本冲突。

执行以下命令卸载所有冲突包:

bash 复制代码
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

APT 可能会报告你没有安装这些软件包。

存储在 /var/lib/docker/ 中的镜像、容器、卷和网络则不是 卸载 Docker 时会自动移除。如果你想从一个 清洁安装,并倾向于清理现有数据,请阅读 卸载 Docker Engine 部分。

安装方法

你可以根据需求以不同方式安装 Docker Engine:

  • Docker Engine 自带 Linux 版 Docker 桌面版。这是最简单、最快速的入门方式。

  • 从以下设备搭建并安装 Docker Engine Docker 的 apt 仓库 。

  • 手动安装并手动管理升级。

  • 使用方便的脚本 。仅推荐用于测试和开发环境。

Apache 许可证,版本 2.0。完整许可请参见许可 。

使用 apt 仓库安装

在你第一次在新主机上安装 Docker Engine 之前,你需要先设置 Docker apt 仓库。之后,你可以从仓库安装并更新 Docker。

  1. 搭建 Docker 的 apt 仓库。

    bash 复制代码
    # Add Docker's official GPG key:
    sudo apt update
    sudo apt install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Add the repository to Apt sources:
    sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
    Types: deb
    URIs: https://download.docker.com/linux/ubuntu
    Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
    Components: stable
    Architectures: $(dpkg --print-architecture)
    Signed-By: /etc/apt/keyrings/docker.asc
    EOF
    
    sudo apt update
  2. 安装 Docker 包。

    要安装最新版本,请运行:

    bash 复制代码
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    注释

    安装后,确认 Docker 是否在运行:
    sudo systemctl status docker

    如果 Docker 未运行,请手动启动:
    sudo systemctl start docker

  3. 通过运行 hello-world 镜像验证安装成功:

    bash 复制代码
    sudo docker run hello-world

    该命令下载测试镜像并在容器中运行。当容器运行时,它会打印确认消息然后退出。

你现在已经成功安装并启动了 Docker Engine。

提示

尝试无 root 运行时会收到错误吗?

docker 用户组存在但没有用户,这就是为什么你需要用 sudo 来运行 Docker 命令。继续 Linux 安装后 允许非特权用户运行 Docker 命令及其他可选配置步骤。

从包安装

如果你不能用 Docker 的 apt 仓库安装 Docker Engine,可以下载你版本的 deb 文件并手动安装。每次升级 Docker Engine 都需要下载一个新文件。

  1. https://download.docker.com/linux/ubuntu/dists/

  2. 在列表中选择你的 Ubuntu 版本。

  3. 进入 pool/stable/,选择适用的架构(amd64ARMMHFARM64S390X)。

  4. 下载以下 Deb 文件,适用于 Docker Engine、CLI、containerd 和 Docker Compose 包:

    • containerd.io<version>_<arch>__.deb
    • <version>docker-ce__<arch>.deb
    • docker-ce-cli_<version>_<arch>.deb
    • docker-buildx-plugin_<version>_<arch>.deb
    • docker-compose-plugin_<version>_<arch>.deb
  5. 安装 .deb 包。将以下示例中的路径更新到你下载的 Docker 包的位置。

    bash 复制代码
    sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
      ./docker-ce_<version>_<arch>.deb \
      ./docker-ce-cli_<version>_<arch>.deb \
      ./docker-buildx-plugin_<version>_<arch>.deb \
      ./docker-compose-plugin_<version>_<arch>.deb

    注释

    安装后,确认 Docker 是否在运行:
    sudo systemctl status docker

    如果 Docker 未运行,请手动启动:
    sudo systemctl start docker

  6. 通过运行 hello-world 镜像验证安装成功:

    bash 复制代码
    sudo docker run hello-world

    该命令下载测试镜像并在容器中运行。当容器运行时,它会打印确认消息然后退出。

你现在已经成功安装并启动了 Docker Engine。

尝试无 root 运行时会收到错误吗?

docker 用户组存在但没有用户,这就是为什么你需要用 sudo 来运行 Docker 命令。继续 Linux 安装后 允许非特权用户运行 Docker 命令及其他可选配置步骤。

二、Dify 安装

1. 克隆 Dify

将 Dify 源代码克隆到本地机器。

bash 复制代码
git clone --branch "$(curl -s https://api.github.com/repos/langgenius/dify/releases/latest | jq -r .tag_name)" https://github.com/langgenius/dify.git

2. 启动 Dify

  1. 导航到 Dify 源代码中的 docker 目录:

    bash 复制代码
    cd dify/docker
  2. 复制示例环境配置文件:

    bash 复制代码
    cp .env.example .env
  3. 根据你的 Docker Compose 版本选择相应命令启动容器:

    bash 复制代码
    docker compose up -d

    运行 docker compose version 检查你的 Docker Compose 版本。

    将启动以下容器:

    • 5 个核心服务:api、worker、worker_beat、web、plugin_daemon
    • 6 个依赖组件:weaviate、db_postgres、redis、nginx、ssrf_proxy、sandbox

    你应该会看到类似以下的输出,显示每个容器的状态和启动时间:

    bash 复制代码
    [+] Running 13/13
    ✔ Network docker_ssrf_proxy_network  Created                                                                10.0s 
    ✔ Network docker_default             Created                                                                 0.1s 
    ✔ Container docker-sandbox-1         Started                                                                 0.3s 
    ✔ Container docker-db_postgres-1     Healthy                                                                 2.8s 
    ✔ Container docker-web-1             Started                                                                 0.3s 
    ✔ Container docker-redis-1           Started                                                                 0.3s 
    ✔ Container docker-ssrf_proxy-1      Started                                                                 0.4s 
    ✔ Container docker-weaviate-1        Started                                                                 0.3s 
    ✔ Container docker-worker_beat-1     Started                                                                 3.2s 
    ✔ Container docker-api-1             Started                                                                 3.2s 
    ✔ Container docker-worker-1          Started                                                                 3.2s 
    ✔ Container docker-plugin_daemon-1   Started                                                                 3.2s 
    ✔ Container docker-nginx-1           Started                                                                 3.4s
  4. 验证所有容器是否成功运行:

    bash 复制代码
    docker compose ps

    你应该会看到类似以下的输出,每个容器的状态应为 Uphealthy

    bash 复制代码
    NAME                     IMAGE                                       COMMAND                  SERVICE         CREATED          STATUS                             PORTS
    docker-api-1             langgenius/dify-api:1.10.1                  "/bin/bash /entrypoi..."   api             26 seconds ago   Up 22 seconds                      5001/tcp
    docker-db_postgres-1     postgres:15-alpine                          "docker-entrypoint.s..."   db_postgres     26 seconds ago   Up 25 seconds (healthy)            5432/tcp
    docker-nginx-1           nginx:latest                                "sh -c 'cp /docker-e..."   nginx           26 seconds ago   Up 22 seconds                      0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
    docker-plugin_daemon-1   langgenius/dify-plugin-daemon:0.4.1-local   "/bin/bash -c /app/e..."   plugin_daemon   26 seconds ago   Up 22 seconds                      0.0.0.0:5003->5003/tcp, :::5003->5003/tcp
    docker-redis-1           redis:6-alpine                              "docker-entrypoint.s..."   redis           26 seconds ago   Up 25 seconds (health: starting)   6379/tcp
    docker-sandbox-1         langgenius/dify-sandbox:0.2.12              "/main"                  sandbox         26 seconds ago   Up 25 seconds (health: starting)   
    docker-ssrf_proxy-1      ubuntu/squid:latest                         "sh -c 'cp /docker-e..."   ssrf_proxy      26 seconds ago   Up 25 seconds                      3128/tcp
    docker-weaviate-1        semitechnologies/weaviate:1.27.0            "/bin/weaviate --hos..."   weaviate        26 seconds ago   Up 25 seconds                      
    docker-web-1             langgenius/dify-web:1.10.1                  "/bin/sh ./entrypoin..."   web             26 seconds ago   Up 25 seconds                      3000/tcp
    docker-worker-1          langgenius/dify-api:1.10.1                  "/bin/bash /entrypoi..."   worker          26 seconds ago   Up 22 seconds                      5001/tcp
    docker-worker_beat-1     langgenius/dify-api:1.10.1                  "/bin/bash /entrypoi..."   worker_beat     26 seconds ago   Up 22 seconds                      5001/tcp

3. 离线部署(403 Forbidden)

  1. 在能联网的电脑上,下载并导出所有镜像

    找一台能正常访问 Docker Hub 的电脑,执行以下命令:

    bash 复制代码
    # 下载所有 Dify 需要的镜像
    docker pull ubuntu/squid:latest
    docker pull nginx:latest
    docker pull redis:6-alpine
    docker pull postgres:15-alpine
    docker pull busybox:latest
    docker pull semitechnologies/weaviate:1.27.0
    docker pull langgenius/dify-api:1.14.0
    docker pull langgenius/dify-web:1.14.0
    docker pull langgenius/dify-sandbox:0.2.15
    docker pull langgenius/dify-plugin-daemon:0.6.0-local
    
    # 把所有镜像打包成一个 tar 文件
    docker save -o dify-images.tar \
    ubuntu/squid:latest \
    nginx:latest \
    redis:6-alpine \
    postgres:15-alpine \
    busybox:latest \
    semitechnologies/weaviate:1.27.0 \
    langgenius/dify-api:1.14.0 \
    langgenius/dify-web:1.14.0 \
    langgenius/dify-sandbox:0.2.15 \
    langgenius/dify-plugin-daemon:0.6.0-local
  2. dify-images.tar 上传到你的 Ubuntu 服务器

    scpFTP 工具,把文件传到服务器的 ~/ 目录:

    bash 复制代码
    # 在本地电脑执行(示例)
    scp dify-images.tar ubuntu@你的服务器IP:~/
  3. 在服务器上导入镜像

    bash 复制代码
    # 进入文件所在目录
    cd ~
    
    # 导入所有镜像
    docker load -i dify-images.tar
    
    # 验证导入是否成功
    docker images

    如果能看到所有镜像列表,说明导入成功。

  4. 启动 Dify

    bash 复制代码
    cd ~/dify/docker
    docker compose up -d

访问

  1. 打开管理员初始化页面以设置管理员账户:

    bash 复制代码
    # 本地环境
    http://localhost/install
    
    # 服务器环境
    http://your_server_ip/install
  2. 完成管理员账户设置后,在以下地址登录 Dify:

    bash 复制代码
    # 本地环境
    http://localhost  
    
    # 服务器环境
    http://your_server_ip

参考:

https://docs.docker.com/engine/install/ubuntu/

https://docs.dify.ai/zh/self-host/quick-start/docker-compose

相关推荐
Agent手记1 小时前
空运智能装箱规划自动化、落地方法与合规适配:2026年Agent矩阵驱动的技术演进与实操指引
运维·人工智能·ai·矩阵·自动化
开开心心_Every1 小时前
进程启动瞬间暂停工具,适合调试多开
运维·服务器·gitee·pdf·开源·电脑·excel
进击切图仔1 小时前
linux 终端通过命令使用 cursor
linux·运维·服务器
坚持就完事了1 小时前
$在Linux中的作用
linux·运维·服务器
Mr. zhihao1 小时前
从救火到防火:解读华为的确定性运维方法论,以及AI扮演的真正角色
运维·人工智能·华为
wufeng无峰2 小时前
docker国内镜像源
运维·docker·容器·镜像
OpenCSG2 小时前
CSGClaw v0.3.0版本更新
运维·docker·容器
噗噗122 小时前
从零到一:如何通过 QiweAPI 快速实现企业微信自动化集成
运维·自动化·企业微信
月昤昽2 小时前
KDE面板背景个性化设置技巧
linux