信创环境实战:CTyunOS 2.0.1离线部署Dify 1.10.1全流程解析
在国产化操作系统浪潮下,信创环境的软件部署成为技术团队必须面对的挑战。不同于通用Linux发行版,CTyunOS这类专为国产芯片优化的系统,在依赖管理、架构兼容性方面存在独特要求。本文将基于真实项目经验,详细拆解在CTyunOS 2.0.1(aarch64架构)上离线部署Dify 1.10.1的全流程,重点解决三个核心难题:基础环境配置、离线资源获取和架构适配优化。
1. 环境准备:构建离线部署的基础设施
1.1 系统兼容性检查
CTyunOS基于OpenEuler优化,其软件生态与CentOS/RHEL存在差异。部署前需确认:
- 系统架构:执行
uname -m确认是否为aarch64 - 内核版本:
cat /etc/ctyunos-release查看具体系统版本 - 已安装依赖:通过
yum list installed检查基础开发工具链
关键组件版本要求:
| 组件名称 | 最低版本 | 备注 |
|---|---|---|
| Docker CE | 24.0.6 | 需包含rootless-extras |
| containerd | 1.6.24 | 容器运行时 |
| iptables | 1.8.5 | 网络配置工具 |
| fuse-overlayfs | 0.7.6 | 存储驱动 |
1.2 离线资源包获取策略
在内网环境中,所有依赖必须预先下载完整。建议建立以下目录结构:
/opt/offline_pkgs/ ├── docker/ # Docker主程序及依赖 │ ├── rpm_packages/ # 所有RPM文件 │ └── daemon.json # 配置文件模板 ├── dify/ # Dify应用 │ ├── v1.10.1.tar.gz # 源码包 │ └── images/ # Docker镜像集合 └── plugins/ # 插件编译环境 ├── miniconda.sh # Python环境 └── repackaging/ # 插件打包工具提示:使用相同架构的跳板机下载资源时,建议通过
rsync -avz保持文件完整性,避免传输损坏。
2. Docker离线安装与调优
2.1 分步安装流程
依赖包安装顺序:
# 基础依赖 rpm -ivh --nodeps container-selinux-2.*.rpm \ iptables-1.8*.rpm \ fuse3-3.*.rpm # 容器运行时 rpm -ivh --nodeps containerd.io-*.rpm \ docker-ce-*.rpm \ docker-ce-cli-*.rpm服务配置关键命令:
# 存储目录迁移(假设新路径为/data/docker) sudo mkdir -p /data/docker sudo chmod 711 /data/docker sudo tee /etc/docker/daemon.json <<EOF { "data-root": "/data/docker", "storage-driver": "fuse-overlayfs" } EOF
2.2 常见问题解决方案
- 依赖冲突:使用
rpm -e --nodeps卸载冲突包 - SELinux干扰:临时设置为permissive模式
sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config - 用户权限问题:
sudo usermod -aG docker $USER newgrp docker # 立即生效
3. Dify核心组件部署
3.1 镜像导入与验证
采用分层加载策略提高成功率:
# 基础镜像优先加载 docker load -i postgres15-alpine.tar docker load -i redis6-alpine.tar # 应用镜像次之 docker load -i dify-api-1.10.1.tar docker load -i dify-web-1.10.1.tar # 验证镜像标签 docker image list --format "table {{.Repository}}\t{{.Tag}}"3.2 存储卷权限配置
Dify对存储路径有严格的权限要求:
mkdir -p ./volumes/app/storage chown -R 1001:1001 ./volumes # 容器内用户UID find ./volumes -type d -exec chmod 755 {} \;3.3 网络端口规划建议
| 服务类型 | 默认端口 | 内网访问建议 |
|---|---|---|
| Web界面 | 80 | 映射到主机8080 |
| API服务 | 5001 | 保持默认 |
| Weaviate | 8081 | 可调整为18081 |
| PostgreSQL | 5432 | 限制仅本地访问 |
配置示例:
# docker-compose.yaml片段 services: nginx: ports: - "8080:80" weaviate: ports: - "18081:8081"4. 插件系统的离线适配
4.1 编译环境搭建
在联网环境使用QEMU模拟目标架构:
# 创建arm64v8环境 docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker run -it --platform linux/arm64/v8 ctyunos:2.0.1 /bin/bash # 容器内安装编译工具链 yum install -y gcc make python3.12-devel curl -L https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -o miniconda.sh4.2 插件打包关键参数
修改plugin_repackaging.sh避免架构检测:
# 原检测逻辑注释掉 # ARCH=$(uname -m) ARCH="aarch64" # 强制指定4.3 安全策略调整
.env中必须修改的配置项:
# 插件签名验证关闭 FORCE_VERIFYING_SIGNATURE=false ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES=false # 文件大小限制提升 NGINX_CLIENT_MAX_BODY_SIZE=500M PLUGIN_MAX_PACKAGE_SIZE=52428800实际部署中发现,某些插件需要额外依赖库。建议在CTyunOS上预先安装:
yum install -y libX11-devel libXext-devel mesa-libGL-devel整个部署过程中,最耗时的环节是插件编译环境的搭建。采用Docker-in-Docker方案虽然复杂,但能100%还原生产环境架构特性。对于需要频繁部署的场景,建议将验证过的镜像导出为模板:
docker save -o ctyunos-dify-builder.tar my_builder:1.0