全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)

全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)

本文主要针对Dify(1.7.2)最新版本 + 国产操作系统环境进行 离线部署,通过本地以及服务器线上、线下操作,对ARM架构操作系统进行全面的适配,满足政企私有化部署的需要。



前言

Dify是一个强大的开源大模型应用开发平台,目前版本也在不断地持续迭代中。目前针对Dify的部署,一般在线部署会更加容易一些,但是对于特定的一些场景、特别的需求,需要进行私有化、本地化离线部署,还是存在一定的难度。今天就针对国产环境,对Dify最新版本进行整体的部署。


一、本地操作

1. 离线下载dify最新版本的包

从github上下载dify1.7.2最新版的安装包。
Github地址:https://github.com/langgenius/dify/releases/
在这里插入图片描述

2.windows本机环境检查安装

检查本机电脑是否安装Docker以及Docker Compose。建议直接下载安装docker-desktop,其包含DockerDocker Compose

# 打开cmd,输入 docker
docker -v
Docker version 28.3.2, build 578ccf6
docker-compose -v
Docker Compose version v2.38.2-desktop.1

官方下载地址:https://www.docker.com/products/docker-desktop/

3. 离线拉取Dify相关依赖(ARM)镜像

(1)在本地目录创建一个新的docker-compose.yam配置文件,用于下载Dify相关arm架构的镜像,其中主要包括:dify-api、dify-web等核心组件,直接拷贝以下内容即可!

services:
  # The nginx reverse proxy.
  # used for reverse proxying the API service and Web service.
  nginx:
    image: nginx:latest
    platform: arm6

  # API service
  api:
    image: langgenius/dify-api:1.7.2
    platform: arm64

  # worker service
  # The Celery worker for processing the queue.
  worker:
    image: langgenius/dify-api:1.7.2
    platform: arm64

  # Frontend web application.
  web:
    image: langgenius/dify-web:1.7.2
    platform: arm64

  # The postgres database.
  db:
    image: postgres:15-alpine
    platform: arm64

  # The DifySandbox
  sandbox:
    image: langgenius/dify-sandbox:0.2.12
    platform: arm64

  # The Weaviate vector store.
  weaviate:
    image: semitechnologies/weaviate:1.19.0
    platform: arm64

  plugin_daemon:
    image: langgenius/dify-plugin-daemon:0.2.0-local
    platform: arm64

  ssrf_proxy:
    image: ubuntu/squid:latest
    platform: arm64

  certbot:
    image: certbot/certbot
    platform: arm64

  pgvector:
    image: pgvector/pgvector:pg16
    platform: arm64

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    platform: arm64

  milvus-standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.0-beta
    platform: arm64

  opensearch:
    container_name: opensearch
    image: opensearchproject/opensearch:latest
    platform: arm64
  
  redis:
    container_name: redis
    image: redis:7.2.4
    platform: arm64
    
    

(2)采用docker-compose pull离线下载Dify相关依赖镜像,大约需要下载半个小时。

# 拉取镜像
docker-compose pull
# 查看镜像
docker images

下载镜像:
在这里插入图片描述

(3)下载完成之后,采用上述命令 docker images 查看下载后的镜像是否完整。

在这里插入图片描述

要注意检查镜像的系统架构,有可能不是arm架构的。通过 'docker inspect 镜像名称|findstr Architecture进行检查,是否为ARM架构。

(base) PS C:\Users\76539> docker inspect 46312be3b2c3|findstr Architecture
        "Architecture": "arm64",

4. 打包镜像上传至服务器

支持批量单独打包两种方式,为保险起见,该文采用的是单独打包方式。

4.1. 批量打包:将所有的镜像一次性的打包到一个文件中。例如:all_images.tar

docker save \
  langgenius/dify-web:1.7.2  --platform=linux/arm64 \
  langgenius/dify-api:1.7.2 --platform=linux/arm64 \
  langgenius/dify-plugin-daemon:0.2.0-local --platform=linux/arm64 \
  nginx:latest --platform=linux/arm64 \
  ubuntu/squid:latest --platform=linux/arm64 \
  certbot/certbot:latest --platform=linux/arm64 \
  langgenius/dify-sandbox:0.2.12 --platform=linux/arm64 \
  pgvector/pgvector:pg16 --platform=linux/arm64 \
  postgres:15-alpine --platform=linux/arm64 \
  milvusdb/milvus:v2.5.0-beta --platform=linux/arm64 \
  semitechnologies/weaviate:1.19.0 --platform=linux/arm64 \
  minio/minio:RELEASE.2023-03-20T20-16-18Z --platform=linux/arm64 \
  opensearchproject/opensearch:latest --platform=linux/arm64 \
  quay.io/coreos/etcd:v3.5.5 --platform=linux/arm64 \
  redis:7.2.4 --platform=linux/arm64 \
  -o all_images.tar

4.2. 单个打包命令docker save -o xxx.tar 原始镜像名称:版本号 --platform=linux/arm64

# 批量打包下载到本地 
docker save -o dify-web172.tar langgenius/dify-web:1.7.2  --platform=linux/arm64
docker save -o dify-api172.tar langgenius/dify-api:1.7.2  --platform=linux/arm64
docker save -o dify-plugin-daemon.tar langgenius/dify-plugin-daemon:0.2.0-local  --platform=linux/arm64
docker save -o nginx.tar nginx:latest --platform=linux/arm64
docker save -o squid.tar ubuntu/squid:latest --platform=linux/arm64
docker save -o certbot.tar certbot/certbot:latest --platform=linux/arm64
docker save -o dify-sandbox.tar langgenius/dify-sandbox:0.2.12 --platform=linux/arm64
docker save -o pgvector.tar pgvector/pgvector:pg16 --platform=linux/arm64
docker save -o postgres.tar postgres:15-alpine --platform=linux/arm64
docker save -o milvus.tar milvusdb/milvus:v2.5.0-beta --platform=linux/arm64
docker save -o weaviate.tar semitechnologies/weaviate:1.19.0 --platform=linux/arm64
docker save -o minio.tar minio/minio:RELEASE.2023-03-20T20-16-18Z --platform=linux/arm64
docker save -o opensearch.tar opensearchproject/opensearch:latest --platform=linux/arm64
docker save -o etcd.tar quay.io/coreos/etcd:v3.5.5 --platform=linux/arm64
docker save -o redis.tar redis:7.2.4 --platform=linux/arm64

4.3. 将tar镜像包从本地传至服务器。

在这里插入图片描述
在这里插入图片描述

二、服务器操作

1.服务器环境检查以及解压images

1.1 检查服务器docker 以及docker-compose版本,没有环境的可以自行安装。

# 检查docker
root@test-PC:/work/docker# docker -v
Docker version 28.3.3, build 980b856

# 检查docker-compose
root@test-PC:/work/docker# docker-compose -v
Docker Compose version v2.33.1

1.2 解压上传的images tar包。

root@test-PC:/work/dify-images# ls -l
total 7352568
-rw-r--r-- 1 root root   90970624 Aug 12 14:08 certbot.tar
-rw-r--r-- 1 root root 1395456000 Aug 12 14:51 dify-api172.tar
-rw-r--r-- 1 root root  987888640 Aug 12 14:20 dify-plugin-daemon.tar
-rw-r--r-- 1 root root  376519168 Aug 12 14:34 dify-sandbox.tar
-rw-r--r-- 1 root root  357552128 Aug 12 14:47 dify-web172.tar
-rw-r--r-- 1 root root  145932800 Aug 12 14:30 etcd.tar
-rw-r--r-- 1 root root 1252281856 Aug 12 14:22 milvus.tar
-rw-r--r-- 1 root root  199900672 Aug 12 14:50 minio.tar
-rw-r--r-- 1 root root  140978176 Aug 12 14:24 nginx.tar
-rw-r--r-- 1 root root 1874550272 Aug 12 14:43 opensearch.tar
-rw-r--r-- 1 root root  310468096 Aug 12 14:28 pgvector.tar
-rw-r--r-- 1 root root  213669376 Aug 12 14:52 postgres.tar
-rw-r--r-- 1 root root  144076800 Aug 12 14:53 squid.tar
-rw-r--r-- 1 root root   38720512 Aug 12 14:53 weaviate.tar

针对上述包,依次进行解压即可。输入命令:docker load -i xxxx.tar

# 以 certbot为例
root@test-PC:/work/dify-images# docker load -i certbot.tar
994456c4fd7b: Loading layer [==================================================>]  3.627MB/3.627MB
742e38c37a3d: Loading layer [==================================================>]  459.8kB/459.8kB
7b7e15815a1d: Loading layer [==================================================>]  13.55MB/13.55MB
dbb969ba5eaf: Loading layer [==================================================>]     249B/249B
b049911687c7: Loading layer [==================================================>]     113B/113B
84548760d4f4: Loading layer [==================================================>]  38.67kB/38.67kB
eb744668f70e: Loading layer [==================================================>]  32.08kB/32.08kB
ad53d46c6418: Loading layer [==================================================>]  94.13kB/94.13kB
a09c21b51e5a: Loading layer [==================================================>]  434.7kB/434.7kB
01d2240e864a: Loading layer [==================================================>]  7.424MB/7.424MB
c194e2b50c30: Loading layer [==================================================>]  19.29MB/19.29MB
Loaded image: certbot/certbot:latest

2.整理源码中的docker-compose配置

路径:/work/dify-source/dify-1.7.2/docker

由于在Dify的官方源码中提供了很多的vertor database向量数据库,在实际的使用过程中我们可能用不到,如果直接按照官方配置启动,则可能会占用额外的存储空间或者其他未知的报错,因此我们要对其进行删减。只保留了主要的一些配置和pgvector、Milvus等向量数据。

代码如下(示例):

pgvector:
    image: pgvector/pgvector:pg16
    profiles:
      - pgvector
    restart: always
    environment:
      PGUSER: ${PGVECTOR_PGUSER:-postgres}
      # The password for the default postgres user.
      POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456}
      # The name of the default postgres database.
      POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify}
      # postgres data directory
      PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata}
      # pg_bigm module for full text search
      PG_BIGM: ${PGVECTOR_PG_BIGM:-false}
      PG_BIGM_VERSION: ${PGVECTOR_PG_BIGM_VERSION:-1.2-20240606}
    volumes:
      - ./volumes/pgvector/data:/var/lib/postgresql/data
      - ./pgvector/docker-entrypoint.sh:/docker-entrypoint.sh
    entrypoint: [ '/docker-entrypoint.sh' ]
    healthcheck:
      test: [ 'CMD', 'pg_isready' ]
      interval: 1s
      timeout: 3s
      retries: 30



  # Milvus vector database services
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.5
    profiles:
      - milvus
    environment:
      ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision}
      ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000}
      ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296}
      ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000}
    volumes:
      - ./volumes/milvus/etcd:/etcd
    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: [ 'CMD', 'etcdctl', 'endpoint', 'health' ]
      interval: 30s
      timeout: 20s
      retries: 3
    networks:
      - milvus

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    profiles:
      - milvus
    environment:
      MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin}
      MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin}
    volumes:
      - ./volumes/milvus/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: [ 'CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live' ]
      interval: 30s
      timeout: 20s
      retries: 3
    networks:
      - milvus

  milvus-standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.15
    profiles:
      - milvus
    command: [ 'milvus', 'run', 'standalone' ]
    environment:
      ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379}
      MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000}
      common.security.authorizationEnabled: ${MILVUS_AUTHORIZATION_ENABLED:-true}
    volumes:
      - ./volumes/milvus/milvus:/var/lib/milvus
    healthcheck:
      test: [ 'CMD', 'curl', '-f', 'http://localhost:9091/healthz' ]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    depends_on:
      - etcd
      - minio
    ports:
      - 19530:19530
      - 9091:9091
    networks:
      - milvus

3. 启动Dify所有的服务以及查看状态

输入:docker-compose up -d

root@test-PC:/work/dify-source/dify-1.7.2/docker# docker-compose up -d

在这里插入图片描述

通过docker-compose ps -a 查看Dify服务启动状态:

在这里插入图片描述

常用命令:

####   `必须要在docker-compose.yaml所在的目录`
# 启动命令 
docker-compose up -d 

# 关闭命令:
docker-compose down

# 查看所有服务运行状态:
docker-compose ps -a

### 查看报错的命令,比如在启动的过程中,有哪个容器没有起来。可以通过docker logs进行查看
docker logs 容器名称

展示才艺:服务完全启动之后,可以在浏览器输入ip地址进行愉快的访问和自由的玩耍啦!

在这里插入图片描述
在这里插入图片描述


三、总结

整篇文章的主要逻辑,就是 现在本地把Dify所需要的依赖包都下载下来‘对应操作系统的版本ARM’,然后传入服务器、解压、修改配置、启动等。当然部署的过程中,肯定也不是一番风顺的,其中也包括了包的适配以及服务启动过程中遇到的问题。

关注我,下期我将针对部署过程中遇到的问题,进行展开讲解!
在这里插入图片描述
📌 关注我,获取更多 Dify 私有化部署实战技巧!

Dify最新版私有化部署遇坑指南一:Unable to create manifests file: NotFound: content digest sha256:c0a3caf:
Dify私有化离线部署redis启动问题:Restarting (11) Less than a second ago

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二号小明

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值