> 技术文档 > Dify离线部署方案-以华为昇腾Arm架构服务器为例_dify arm部署

Dify离线部署方案-以华为昇腾Arm架构服务器为例_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=uosHOME_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 Enginesudo apt-get updatesudo apt-get install -y docker-ce docker-ce-cli containerd.io# 启动 Docker 并设置为开机启动(如需要)sudo systemctl start dockersudo systemctl enable docker

Docker安装验证:

docker --versiondocker info

1.2 镜像拉取

Dify所需镜像依赖(images):

langgenius/dify-web 0.15.3 langgenius/dify-api 0.15.3 langgenius/dify-sandbox 0.2.10postgres  15-alpinenode 20-alpine3.20python3.12-slim-bookwormredis 6-alpineubuntu/squid latestsemitechnologies/weaviate 1.19.0nginx latest
docker pull --platform linux/arm64 langgenius/dify-web:0.15.3docker pull --platform linux/arm64 <images>
  • 出现问题与解决方式:
  1. “–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}
  1. Error response from daemon: Get “https://registry-1.docker.io/v2/”: context deadline exceeded (Client.Timeout exceeded while awaiting headers) :
# 报错2Error 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-reloadsudo 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.tardocker 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镜像包# 打包difytar -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/# 解包difytar -xvf dify.tar# 解包dify源码tar -xzvf dify-0.15.3.tar.gz

2.2 Dify依赖加载

  • 加载Docker镜像(Dify依赖)
cd difydocker load -i dify_web_xxxx.tar.gzdocker load -i dify_web_xxxx.tar.gzdocker load -i dify_web_xxxx.tar.gzdocker compose ps# ordocker-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-composechmod +x /usr/local/bin/docker-compose# 2.离线环境下# 下载好文件 docker-compose-linux-aarch64cp docker-compose-linux-aarch64 /usr/local/bincd /usr/local/binmv 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依赖镜像,执行如下命令:
# 修改镜像Tagdocker tag [Hash] image_name:image_version# 例:docker tag f5d091 langgenius/dify-web:0.15.3# 再运行docker-compose up -d即可