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

服务器为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>
  • 出现问题与解决方式:
  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) :
# 报错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即可
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值