云计算百科
云计算领域专业知识百科平台

Dify离线部署方案-以华为昇腾Arm架构服务器为例

Dify离线部署方案

  • 1. 本地拉取对应架构镜像
    • 1.1 本地Docker安装
    • 1.2 镜像拉取
    • 1.3 镜像打包
    • 1.4 源码下载
  • 2. 服务器端部署
    • 2.1 文件传输
    • 2.2 Dify依赖加载
    • 2.3 启动 Dify

服务器为Arm架构的华为昇腾AI服务器

1. 本地拉取对应架构镜像

本地环境:cat /etc/os-release

PRETTY_NAME="UOS Desktop 20 Pro"
NAME="uos"
VERSION_ID="20"
VERSION="20"
ID=uos
HOME_URL="https://www.chinauos.com/"
BUG_REPORT_URL="http://bbs.chinauos.com"

1.1 本地Docker安装

# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装必要的依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add
# 设置 Docker 的软件源
echo \\
"deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \\
$(lsb_release -cs) stable"
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 并设置为开机启动(如需要)
sudo systemctl start docker
sudo systemctl enable docker

Docker安装验证:

docker –version
docker info

1.2 镜像拉取

Dify所需镜像依赖(images):

langgenius/dify-web 0.15.3
langgenius/dify-api 0.15.3
langgenius/dify-sandbox 0.2.10
postgres 15-alpine
node 20-alpine3.20
python 3.12-slim-bookworm
redis 6-alpine
ubuntu/squid latest
semitechnologies/weaviate 1.19.0
nginx latest

docker pull –platform linux/arm64 langgenius/dify-web:0.15.3
docker pull –platform linux/arm64 <images>

  • 出现问题与解决方式:
  • “–platform” is only supported on a Docker daemon with experimental features enabled:
  • # 报错1
    "–platform" is only supported on a Docker daemon with experimental features enabled
    # 检查是否开启experimental功能
    docker info | grep -i 'experimental'
    #
    vim /etc/docker/daemon.json
    # Add 并保存
    {
    "experimental": true
    }

  • Error response from daemon: Get “https://registry-1.docker.io/v2/”: context deadline exceeded (Client.Timeout exceeded while awaiting headers) :
  • # 报错2
    Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

    # 修改daemon.json 增加国内源
    {
    "registry-mirrors":[
    "https://9cpn8tt6.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.1panel.live",
    "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://your_preferred_mirror",
    "https://dockerhub.icu",
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
    ]
    }

    • 最终 Daemon.json

    {
    "dns": [
    "8.8.8.8",
    "8.8.4.4"
    ],
    "experimental": true,
    "registry-mirrors": [
    "https://9cpn8tt6.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.1panel.live",
    "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://your_preferred_mirror",
    "https://dockerhub.icu",
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
    ],
    }

    重启Docker:

    sudo systemctl daemon-reload
    sudo systemctl restart docker

    1.3 镜像打包

    # 确认好该image是arm64架构
    docker inspect langgenius/dify-web:0.15.3 | grep Architecture
    # 打包输出为tar文件
    docker save langgenius/dify-web:0.15.3 -o /home/Cyan/dify/dify_web.tar
    docker save langgenius/dify-api:0.15.3 -o /home/Cyan/dify/dify_api.tar
    # 将所有镜像依次打包
    docker save <image_name>:<image_version> -o <save_path>
    # 分片传输 (如需要)
    split -b 100M dify.tar dify_part_
    # dify文件夹下包含dify_web.tar, dify_api.tar等Docker镜像包
    # 打包dify
    tar -cvf dify.tar dify/

    1.4 源码下载

    假设所需版本为 0.15.3

    git clone https://github.com/langgenius/dify.git –branch 0.15.3

    或手动从 https://github.com/langgenius/dify/releases 下载所需版本

    dify-0.15.3.tar.gz

    2. 服务器端部署

    2.1 文件传输

    • 将打包好的镜像传入所需的服务器中(SFTP方式)[过程略][SSO+FileZilla]
    • 将打包好的镜像传入所需的服务器中(SCP方式)

    # 传输至服务器 | 回车后键入密码
    scp dify.tar root@remote_host:/remote/path/
    scp dify-0.15.3.tar.gz root@remote_host:/remote/path/
    # 解包dify
    tar -xvf dify.tar
    # 解包dify源码
    tar -xzvf dify-0.15.3.tar.gz

    2.2 Dify依赖加载

    • 加载Docker镜像(Dify依赖)

    cd dify
    docker load -i dify_web_xxxx.tar.gz
    docker load -i dify_web_xxxx.tar.gz
    docker load -i dify_web_xxxx.tar.gz
    docker compose ps
    # or
    docker-compose ps

    • 缺少Docker Compose环境的解决方法:

    # 注:docker-compose-linux-aarch64根据Docker部署的系统决定
    # 1.在线环境下
    wget https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-aarch64 -O /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    # 2.离线环境下
    # 下载好文件 docker-compose-linux-aarch64
    cp docker-compose-linux-aarch64 /usr/local/bin
    cd /usr/local/bin
    mv docker-compose-linux-aarch64 docker-compose
    # 检查安装是否成功
    docker-compose –version

    2.3 启动 Dify

    • 启动容器:

    tar -xzvf dify-0.15.3.tar.gz
    # 进入Dify源代码的Docker目录
    cd dify-0.15.3/docker/
    # 复制环境配置文件
    cp .env.example .env
    # 启动 Docker 容器
    docker-compose up -d

    • 部署正常输出:

    [+] Running 11/11
    ✔ Network docker_ssrf_proxy_network Created 0.1s
    ✔ Network docker_default Created 0.0s
    ✔ Container docker-redis-1 Started 2.4s
    ✔ Container docker-ssrf_proxy-1 Started 2.8s
    ✔ Container docker-sandbox-1 Started 2.7s
    ✔ Container docker-web-1 Started 2.7s
    ✔ Container docker-weaviate-1 Started 2.4s
    ✔ Container docker-db-1 Started 2.7s
    ✔ Container docker-api-1 Started 6.5s
    ✔ Container docker-worker-1 Started 6.4s
    ✔ Container docker-nginx-1 Started 7.1s

    • Docker 容器启动问题: 若存在Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers),检查docker images中的tags与dify-0.15.3/docker/中的docker-compose.yaml里的images名称是否匹配,如不匹配则需找到对应的Docker依赖镜像,执行如下命令:

    # 修改镜像Tag
    docker tag [Hash] image_name:image_version
    # 例:docker tag f5d091 langgenius/dify-web:0.15.3
    # 再运行docker-compose up -d即可

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Dify离线部署方案-以华为昇腾Arm架构服务器为例
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!