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>
- 出现问题与解决方式:
- “–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) :
# 报错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即可