背景:由于项目需求,本人需要在 ctyunos 2.0.1 信创系统 + 内网环境中搭建 dify 用于应用本地大模型。本篇用于记录整个搭建流程,以供参考。

P.S. 涉及 ctyunos 本地测试可参考在 win11 (x86) docker destop 部署 ctyunos 2.0.1 (aarch64) 环境做(伪)容器嵌套

1. 安装 docker-ce

需要在联网环境下载 docker-ce 所需依赖文件,并导入至内网环境进行离线安装。

由于担心 dify 项目无法被老版本 docker 和 docker-compose 带动,因此选择直接安装推荐的 docker-ce。经实战测试可行,下面为 docker-ce 24.0.6-1 版本的安装步骤(其他版本不保证 ctyunos 可支持)。

1.1. 获取依赖 rpm 文件

下载地址:
1、ctyunos 官方下载源 [everything、update、extras]
2、Docker CE 官方下载源 [stable]
3、centos7 依赖下载源:非 x86 的其他架构阿里镜像x86 架构阿里镜像

  • 请根据 ctyunos 服务器环境已安装情况选择性下载下述依赖。具体查询依赖是否已安装可通过命令 yum list install | grep 依赖包名称 查看。
依赖名称 版本 下载源
container-selinux 2.138.0-1 ctyunos – everything
iptables 1.8.5-2 ctyunos – everything
iptables-help 1.8.5-2 ctyunos – everything
libcgroup 0.42.2-1 ctyunos – everything
policycoreutils 3.1-6 ctyunos – everything
selinux-policy 3.14.2-64 ctyunos – everything
selinux-policy-targeted 3.14.2-64 ctyunos – everything
tar 1.32-1 ctyunos – everything
fuse-overlayfs 0.7.6-2 ctyunos – update
fuse3 3.9.2-11 ctyunos – update
fuse3-help 3.9.2-11 ctyunos – update
docker-ce 24.0.6-1 docker ce – stable
docker-buildx-plugin 0.11.2-1 docker ce – stable
docker-ce-cli 24.0.6-1 docker ce – stable
docker-ce-rootless-extras 24.0.6-1 docker ce – stable
containerd.io 1.6.24-3.1 docker ce – stable
docker-compose-plugin 2.21.0-1 docker ce – stable
slirp4netns 0.4.3-4 centos7 – packages

1.2. rpm 离线安装

参考:Linux RPM包安装、卸载和升级(若安装有问题请按该链接方法卸载)

  • 利用命令 rpm -ivh --nodeps rmp依赖包全程(空格分割多个) 在内网环境中进行安装。
    • -i:安装
    • -v:显示更详细的信息
    • -h:打印,显示安装进度
    • –nodeps:不检测依赖性安装
  • 安装结束后通过命令 docker version 查看是否成功安装(只要不提示无法识别 docker 即算成功安装,由于服务未启动,存在 server 的错误提示)。
  • 通过命令 sudo systemctl start docker 启动 docker server 服务。(可通过 sudo systemctl enable docker 设置开机自启动)

1.3. 更改存储位置【推荐】

鉴于 dify 所需容器较多,因此提前变更 docker 的存储路径,将其迁移到挂载较多空间的数据盘下。

参考:

  • 通过命令 docker info 查看 Docker Root Dir 存储路径,通常默认存储在 /var/lib/docker。
  • 通过命令 sudo systemctl stop docker.service 停止 docker 服务。
  • 通过命令 sudo cp -r /var/lib/docker/* 新的存储路径 复制原始 docker 相关所有文件至新的存储路径(即希望后续 docker info 显示的 Docker Root Dir 路径)。
  • 新增或修改 /etc/docker/daemon.json 文件改变 docker 守护进程配置:
{
    "data-root": "/data/docker"
}
  • 通过命令 sudo systemctl daemon-reload 加载上述更新后的 daemon.json 配置,再通过命令 sudo systemctl restart docker.service 重新启动 docker 服务。
  • P.S. 若当前非 root 用户查询 docker 命令可能涉及权限问题,可添加用户到 docker 组解决,或 chmod -R 777 新的存储路径 开放所有 docker 文件权限(不推荐)。


2. 部署 dify

需要在联网环境下载指定版本的 dify 工程项目,并导入至内网环境。

2.1. 获取项目文件

参考:dify GitHub 项目主页

  • 进入 dify 开源 GitHub 项目中 release 下载最新稳定版本的 tar.gz 文件,后续导入内网环境解压。本文选择部署的是 v1.10.1 版本。

release code

2.2. 获取并导入镜像

  • 下面为 v1.10.1 版本必要镜像及版本,需提前在联网环境下载,具体流程参考:直接下载镜像的 tar 包。其他额外需求详见 dify 项目中 docker/docker-compose.yaml 文件中各个 image 的要求。
镜像名称 版本
langgenius/dify-api 1.10.1
langgenius/dify-web 1.10.1
langgenius/dify-plugin-daemon 0.4.1-local
langgenius/dify-sandbox 0.2.12
postgres 15-alpine
redis 6-alpine
semitechnologies/weaviate 1.27.0
ubuntu/squid latest
nginx latest
  • 通过命令 docker load -i 镜像tar.gz包 在内网中依次导入上述下载的镜像文件。

2.3. 启动 dify

进入 dify 项目的 docker 目录中进行配置和启动操作。

参考:dify 官网本地部署 FAQ

  • 启动前通过命令 cp .env.example .env 复制并配置环境变量文件。
    • 若需要变更网页代理映射端口可参考修改 nginx 访问端口(建议使用前完成环境参数的各项配置,否则迁移较麻烦)。
  • 其他前置配置需根据官网 release 文件说明进行操作。
    • 对于 v1.10.1 版本,需要额外执行命令 sudo chown -R 1001:1001 ./volumes/app/storage ,否则打开网页会报错。
  • 前置配置结束后,通过命令 docker compose up -d 启动容器。待容器启动结束后可通过命令 docker ps 查看是否启动正常,若有问题可通过命令 docker logs 查看启动日志详情。

docker ps

  • 访问 http://localhost/install 进行 dify 管理员配置,后续可通过 http://localhost/sign 进行登录。
    • 若通过内网其他通联服务器访问,则需要将 localhost 改为启动 dify 的服务器 ip 地址。
    • 若变更了 nginx 映射端口,则需要在访问时加上指定端口。


3. 安装 dify 插件

需要联网环境下载并编译插件,再通过本地安装插件方式在内网安装。

详细过程参考:Dify 实战:纯内网 1.0+ 版本,攻克模型工具插件离线安装难题

3.1. 模拟环境编译插件

  • 在联网环境中到 GitHub 下载 dify-plugin-repackaging 项目用于编译打包 dify 插件。
  • 编译命令 ./plugin_repackaging.sh local 插件difypkg包 。建议采用 miniconda 配置 python>=3.12 的环境编译。
  • 注意:鉴于该文本自动识别环境架构,因此建议联网编译环境尽量模拟内网环境。
    1. 方案一【推荐】:本地启动 ctyunos 容器环境进行打包(环境可参考在 win11 (x86) docker destop 部署 ctyunos 2.0.1 (aarch64) 环境
    2. 方案二:同内网服务器 cpu 架构的 OpenEuler 或 centos 虚拟机进行编译打包(ctyunos 与上述两个架构类似)。
    3. 方案三:写死 shell 脚本的架构直接编译,不保证打包插件可迁移。

3.2. 配置 .env 环境参数

  • 通过命令 docker compose down 下线 dify,并重新配置环境参数:
    • 必须】取消插件验证:FORCE_VERIFYING_SIGNATURE=falseENFORCE_LANGGENIUS_PLUGIN_SIGNATURES=false
    • 插件传输与安装最大限制:NGINX_CLIENT_MAX_BODY_SIZE=500MPLUGIN_MAX_PACKAGE_SIZE=52428800
  • 配置好后通过命令 docker compose up -d 重新启动服务。

3.3. 本地安装插件

  • 将 3.1 小节中编译打包好的插件(带有 offline 字样的 difypkg 包)导入内网环境,并在插件中本地插件项加载。

本地插件

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐