1. 基础环境配置

1.1 anaconda安装

系统:openeuler22.03(CentOs)

架构:arrch64

anaconda对应安装资源包下载地址:

Index of /archivehttps://repo.anaconda.com/archive/

下载好后cd到安装包路径,使用安装指令如下:

bash Anaconda3-2025.06-1-Linux-aarch64.sh

按照提示接受协议,并选择安装目录。安装完成后,更新环境变量

source ~/.bashrc

1.2 anconda中创建虚拟环境

这部分同windows下的anconda env设置相同。

对于Qwen3模型的下载,配置modelscope环境,代码如下:

#创建新环境,环境名为modelscope
conda create -n modelscope python=3.9#这里必须使用python3.9及以上版本,否则在后续下载编译modelscope或者qwen3模型时,会提示no moudle named zoneinfo,因为只有3.9以上的该模型才被假如系统模型库
#激活环境
conda activate modelscope

安装modelscope

pip install modelscope -i https://mirrors.aliyun.com/pypi/simple/ #使用阿里镜像源,下载更快

2. 下载模型库和模型权重

2.1 下载模型权重

如需下载完整模型库:
modelscope download --model Qwen/Qwen3-32B

(只需要下载部分文件:modelscope download --model Qwen/Qwen3-32B README.md --local_dir ./dir #例如下载readme到本地dir文件夹)

*这种方法会把权重默认下载在路径~/.cache/modelscope/下,但是很有可能占用系统盘,影响系统使用,因此把权重下载到指定硬盘,步骤如下。

(1)搜索系统所有硬盘

lsblk -o NAME,SIZE,MOUNTPOINT

输出如下,分别代表了硬盘名字,内存和地址:

NAME   SIZE MOUNTPOINT
sda    200G 
├─sda1  50G /
├─sda2 150G /data
sdb    500G /mnt/disk1
sdc    1T   /mnt/disk2

(2)把模型权重下载到指定的sdc盘中的models文件夹(自己新建一个文件夹命名models,需要定位到指定文件夹路径,不要直接下到盘的路径,否则可能还是无法下载到指定盘中!),--local_dir后接本地需要下载到的文件夹路径位置;或者直接cd到需要下载位置的路径下在进行下载也可以!

modelscope download --model Qwen/Qwen3-32B --local_dir /mnt/disk2/models

下载完成后,模型权重会放在/mnt/disk2/models/Qwen/Qwen3-32B/路径下

*删除之前默认下载地址的模型权重,以防占用系统内存:

全盘搜索Qwen3-32B的储存路径:

# 搜索包含 Qwen3-32B 的目录
sudo find / -type d -name "Qwen3-32B" 2>/dev/null

会输出包含该模型名字的目录路径,假如为/root/dir

删除该路径的模型权重

# 确认路径后再删除
rm -rf /root/dir

2.2 下载华为适配的加速推理引擎MindIE

下载模型适配的推理引擎MindIE,在terminal中输入以下命令行(魔乐社区镜像下载),即开始下载适配本模型Qwen3-32B的镜像包mindie:2.0.T17.B010-800I-A2-py3.11-openeuler24.03-lts-aarch64.tar.gz(也可以进入华为社区下载,MindIE 系列 昇腾计算 2.0.T17 软件补丁下载

wget https://modelers.cn/coderepo/web/v1/file/xieyuxiang/mindie_2.0.RC1_image/main/media/2.0.RC1-800I-A2-py311-openeuler24.03-lts.tar.gz

*!!注意:后续部署大模型时发现上述版本的mindie太老了!!服务挂不起来!!会一直报如下问题!!二更:一般提示如下问题且不报其他错误,log日志中也不提示其他问题报错记录的话,一般都是mindle镜像的原因!!报错后重新在docker中pull下镜像地址即可!

LLMInferEngine failed to init LLMInferModels

Killed

因此需要下载新版本的mindie安装包后,后续即可正常使用!!

mindie镜像下载最新地址:

https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f 

选择所需镜像,点击“立即下载”(1.0.0及以后版本支持DeepSeekR1蒸馏模型):

立即下载后,会弹出:

我们使用的华为服务器是基于arm架构,因此用以下命令下载即可

docker pull --platform=arm64 swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC2-800I-A2-py311-openeuler24.03-lts

3. docker镜像加载

3.1 配置docker环境

环境:华为arm架构服务器

版本:openeuler22.03

先禁用/移除导致失败的第三方 repo(之前添加过 docker-ce 的镜像仓库),避免影响其他相关下载和更新,如果之前没有配置好DNS直接用repo不禁用的话,后续重新配置docker也可能会有各种报错!!因此优先推荐先禁用!

# 禁用 docker-ce 的 repo(通常是 docker-ce-stable)
sudo dnf config-manager --set-disabled docker-ce-stable || true

# 或者直接删除 repo 文件(如果你知道文件在哪里,例如 /etc/yum.repos.d/docker-ce.repo)
sudo rm -f /etc/yum.repos.d/docker-ce* || true

(1) 更新下相关的dnf 下载包

sudo dnf update -y  # 更新系统的软件包
*搜索是否dnf中有所需要的安装包/命令
dnf search yum-utils #yum-utils是包的名字,可替换为其他

(2)确认目前系统版本

cat /etc/openEuler-release

若输出类似openEuler release 22.03 LTS的信息,则符合安装条件。

(3)卸载旧版本docker,避免版本冲突

yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

(4)配置DNS,保证网络和下载

编辑DNS配置文件:

vi /etc/resolv.conf

按i进入编辑模式,添加以下DNS服务器地址:

nameserver 114.114.114.114 # 国内通用DNS
nameserver 8.8.8.8 # 谷歌公共DNS

    按Esc退出编辑,输入:wq保存并退出

    测试网络连接:

    ping www.baidu.com # 出现回显信息说明网络正常

    *注意:/etc/resolv.conf可能被 NetworkManager 自动覆盖,若后续网络异常,可通过网卡配置文件永久设置 DNS,步骤如下:

    *编辑网卡文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),添加:

    DNS1=114.114.114.114
    DNS2=8.8.8.8
     
    保存后重启网络:systemctl restart network

    (5)配置docker仓库repo

    新建并编辑docker仓库repo配置文件

    vi /etc/yum.repos.d/docker-ce.repo

    添加以下内容,这里使用华为云镜像源加速:

    [docker-ce-stable]
     
    name=Docker CE Stable - $basearch
    baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

    输入:wq保存退出

    (6)安装docker组件

    更新yum缓存

    yum makecache # 生成元数据缓存,加快后续安装速度

    安装docker核心组件

    yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    ❗ 常见问题:若安装时提示container-selinux依赖缺失,先执行以下命令安装依赖:

    yum install -y container-selinux

    (7)启动docker并验证状态

     系统中设置开机自启:

    systemctl enable docker # 避免系统重启后Docker需要手动启动

    系统中启动 Docker

    systemctl start docker

    验证安装版本:

    docker --version # 输出类似Docker version 24.0.7, build xxx的信息即正常

    查看运行状态:

    systemctl status docker # 显示active (running)说明服务正常运行

    *注意:systemctl设置好docker之后千万千万不要再随意动systemctl命令了!!比如systemctl stop docker之类的!!强制stop后可能引发系统问题无法直接通过systemctl restart docker!!设置好之后就基本不要再用systemctl指令操作docker了!血的教训!!

    错误描述:

    本来想停正在运行qwen3的docker的,手贱错误输入了systemctl stop docker,然后悲剧来了,无论是sudo systemctl restart docker/sudo systemctl start docker都不可以,system status docker一直显示failed。。。

    解决方案:临时清空 Docker 配置文件

    有时 Docker 的配置文件 /etc/docker/daemon.json 中的错误配置会导致启动失败。可以将该配置文件恢复到默认值(空配置),然后尝试重新启动 Docker。命令如下:

    sudo echo '{}' > /etc/docker/daemon.json
    

    然后重启docker成功:

    sudo systemctl restart docker
    

    如果配置文件中有语法错误或不兼容的设置,清空配置文件并重启应该能够解决问题。

     (8) docker镜像加速优化

    创建 Docker 配置文件:

    vi /etc/docker/daemon.json

    添加更多镜像源地址:

    {
        "registry-mirrors": [
        "https://hub-mirror.c.163.com", # 网易镜像
        "https://mirror.baidubce.com", # 百度镜像
        "https://ccr.ccs.tencentyun.com", # 腾讯云镜像
        "https://docker.1panelproxy.com",
        "https://5e96702d4787418295070cded678a7b6.mirror.swr.myhuaweicloud.com",
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker.wanpeng.life",
        "https://docker.1panel.live",
        "https://hk11.606166.xyz",
        "https://docker.1ms.run",
        "https://docker.domys.cc",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com",
        "https://cjie.eu.org",
        "https://hub.rat.dev",
        "https://docker.rainbond.cc"
        ]
    }

    重启docker使配置生效:

    systemctl daemon-reload
     
    systemctl restart docker

    (9)docker相关的启动/查询/删除等

    查看所有已经配置好的docker(包括运行和停止状态):

    docker ps -a #一定要加-a,不加-a则只能输出在运行状态的docker,无法输出已停止状态的
    

    停止某正在运行的docker:

    docker stop qwen3-32b #qwen3-32b是docker name
    

    删除某docker:

    #方法一:先停止运行后删除
    docker stop qwen3-32b #先停止该docker
    docker rm qwen3-32b #删除docker
    
    #方法二:强制删除(无论是否运行)
    docker rm -f qwen3-32b
    

    stop docker后,如需运行docker,需要重新启动后才可以继续使用docker exec -it contain_name bash进入容器::

    docker start qwen3-32b

    3.2  启动容器

    首先查询docker中的mindie镜像:

    docker images

    输出如下:


    红框中圈出的是新版本的mindie镜像,在下面的docker启动中需要用到。

    启动docker:

    docker run -it -d --shm-size 200g  --net=host  --name qwen3-32b \ #--shm-size表示共享内存大小 --name后面填写容器名
        --privileged \
        --device=/dev/davinci_manager \ #固定参数,用于访问华为固定设备,达芬奇芯片管理器
        --device=/dev/hisi_hdc \ #固定参数,用于访问华为固定设备,海思芯片控制器
        --device=/dev/devmm_svm \ #固定参数,用于访问固定设备,内存管理和虚拟机
        --device=/dev/davinci0 \ #表示访问调用几个npu芯片,davinci0,davinci1....想调用几个npu芯片就可以设置几个,可以在系统中使用npu-smi info查看系统的npu情况
        --device=/dev/davinci1 \
        --device=/dev/davinci2 \ 
        --device=/dev/davinci3 \
        --device=/dev/davinci4 \ 
        --device=/dev/davinci5 \
        --device=/dev/davinci6 \ 
        --device=/dev/davinci7 \
        -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \#固定参数,与 Ascend 相关的驱动文件夹,:前是主机地址,;后是容器中的地址(可自定义)
        -v /usr/local/sbin:/usr/local/sbin \#固定参数,系统的管理工具和二进制文件。:前是主机地址,;后是容器中的地址(可自定义)
        -v /path/to/model:/path/to/model/in/container \ #:前是主机中实际下载放置的模型路径,:后是要映射到容器中的路径(自定义),例如 -v /run/media/root/2c929422-a9a8-4a9f-a594-bbe16904232d/Qwen3:/data/Qwen3将主机中的模型映射到docker中的/data/Qwen3路径下
        a4708118cd12  /bin/bash #a4708118cd12:对应mindie版本在docker image中的image id(也可以用TAG,都是同一个定位),最后用/bin/bash进行命令执行
    

    修改权限:

    chown -R root:root /path-to-weights  #path-to-weights替换为主机的模型权重路径;如果是非root账户安装,则将root:root改为1000:1000
    chmod -R 750 /path-to-weights     #path-to-weights替换为主机的模型权重路径
    

    --user:如果您的环境中 HDK 是通过普通用户安装(如默认的 HwHiAiUser),请设置对应的用户组,例如用户组 ID 为 1001,则使用 --user mindieuser:1001;镜像中默认使用的是用户组 1000。
    设置容器名称 --name 与镜像名称,例如 800I A2 服务器使用 mindie:2.0.T17.B010-800I-A2-py3.11-openeuler24.03-lts-aarch64。

    3.3 进入容器:

    docker exec -it qwen3-32b bash #qwen3-32b是上一步设置的容器名称
    

    打开配置文件:

    vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
    

    按i进入编辑模式,修改下图红框部分内容。

    需要修改的参数意义:
    ipAddress    “XX.XX.XX.XX”    主机IP
    port    XXXX    端口号,自定义。不要使用ss -tuln中正在使用监听的端口
    httpsEnabled    false    关闭HTTPS通信
    npuDeviceIds    [[0,1,2,3...]]    NPU编号,与容器设置保持一致,想要调哪几张npu跑就写入其编号worldSize    4    NPU数量,由npuDeviceIds决定
    modelName    “qwen3-32b”    模型名称,自定义。调用模型时即使用此名称
    modelWeightPath    “/path/to/model/in/container”    容器内模型映射路径,与docker run设置保持一致

    maxSeqLen    XXXX    输入和输出的最大总长度,需大于等于maxInputTokenLen和maxIterTimes的和
    maxInputTokenLen    XXXX    输入部分的最大token数量,必须小于maxSeqLen,如果输入被截断,可能需要增加这个参数的值
    maxPrefillBatchSize    XXXX    预填充阶段一个batch中的请求个数上限,范围在[1,maxBatchSize]之间,建议设置为maxBatchSize的一半
    maxPrefillTokens    XXXX    预填充阶段一个batch中包含的Input token总数的上限,设置为与maxInputTokenLen相同
    maxBatchSize    XXXX    解码阶段的最大batch size,影响并发能力,取值范围[1,5000]
    maxIterTimes    XXXX    最大迭代次数,即输出的最大token数,必须小于maxSeqLen

     查看ip地址:

    # 查看所有网卡信息
    ip addr show
    
    #或者,简略版查询
    ip a
    

    查看port端口占用情况:

    ss -tuln
    #或者
    ss -tulnp

    下面是一个实际例子:

    {
        "Version" : "1.0.0",
    
        "ServerConfig" :
        {
            "ipAddress" : "172.16.23.55",
            "managementIpAddress" : "127.0.0.2",
            "port" : 1025,
            "managementPort" : 1026,
            "metricsPort" : 1027,
            "allowAllZeroIpListening" : false,
            "maxLinkNum" : 1000,
            "httpsEnabled" : false,
            "fullTextEnabled" : false,
            "tlsCaPath" : "security/ca/",
            "tlsCaFile" : ["ca.pem"],
            "tlsCert" : "security/certs/server.pem",
            "tlsPk" : "security/keys/server.key.pem",
            "tlsPkPwd" : "security/pass/key_pwd.txt",
            "tlsCrlPath" : "security/certs/",
            "tlsCrlFiles" : ["server_crl.pem"],
            "managementTlsCaFile" : ["management_ca.pem"],
            "managementTlsCert" : "security/certs/management/server.pem",
            "managementTlsPk" : "security/keys/management/server.key.pem",
            "managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
            "managementTlsCrlPath" : "security/management/certs/",
            "managementTlsCrlFiles" : ["server_crl.pem"],
            "kmcKsfMaster" : "tools/pmt/master/ksfa",
            "kmcKsfStandby" : "tools/pmt/standby/ksfb",
            "inferMode" : "standard",
            "interCommTLSEnabled" : true,
            "interCommPort" : 1121,
            "interCommTlsCaPath" : "security/grpc/ca/",
            "interCommTlsCaFiles" : ["ca.pem"],
            "interCommTlsCert" : "security/grpc/certs/server.pem",
            "interCommPk" : "security/grpc/keys/server.key.pem",
            "interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
            "interCommTlsCrlPath" : "security/grpc/certs/",
            "interCommTlsCrlFiles" : ["server_crl.pem"],
            "openAiSupport" : "vllm",
            "tokenTimeout" : 600,
            "e2eTimeout" : 600,
            "distDPServerEnabled":false
        },
    
        "BackendConfig" : {
            "backendName" : "mindieservice_llm_engine",
            "modelInstanceNumber" : 1,
            "npuDeviceIds" : [[0,1,2,3]],
            "tokenizerProcessNumber" : 8,
            "multiNodesInferEnabled" : false,
            "multiNodesInferPort" : 1120,
            "interNodeTLSEnabled" : true,
            "interNodeTlsCaPath" : "security/grpc/ca/",
            "interNodeTlsCaFiles" : ["ca.pem"],
            "interNodeTlsCert" : "security/grpc/certs/server.pem",
            "interNodeTlsPk" : "security/grpc/keys/server.key.pem",
            "interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
            "interNodeTlsCrlPath" : "security/grpc/certs/",
            "interNodeTlsCrlFiles" : ["server_crl.pem"],
            "interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
            "interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
            "ModelDeployConfig" :
            {
                "maxSeqLen" : 25600,
                "maxInputTokenLen" : 20480,
                "truncation" : false,
                "ModelConfig" : [
                    {
                        "modelInstanceType" : "Standard",
                        "modelName" : "qwen3_32b",
                        "modelWeightPath" : "/data/Qwen3",
                        "worldSize" : 4,
                        "cpuMemSize" : 5,
                        "npuMemSize" : -1,
                        "backendType" : "atb",
                        "trustRemoteCode" : false
                    }
                ]
            },
    
            "ScheduleConfig" :
            {
                "templateType" : "Standard",
                "templateName" : "Standard_LLM",
                "cacheBlockSize" : 128,
    
                "maxPrefillBatchSize" : 50,
                "maxPrefillTokens" : 25600,
                "prefillTimeMsPerReq" : 150,
                "prefillPolicyType" : 0,
    
                "decodeTimeMsPerReq" : 50,
                "decodePolicyType" : 0,
    
                "maxBatchSize" : 200,
                "maxIterTimes" : 10240,
                "maxPreemptCount" : 0,
                "supportSelectBatch" : false,
                "maxQueueDelayMicroseconds" : 5000
            }
        }
    }

    3.4 检查资源可用性(可省略)

    这部分内容参考网址,主要防止一些报错:

    ascend-docker-image: 提供Ascend相关的Dockerfile示例,展示如何创建docker镜像。 - Gitee.com

    (1) 检查HDK

    (2) 检查torch

    (3) 检查mindle组件

    3.5 服务化推理-模型测试

    拉起服务化,启动模型

    cd /usr/local/Ascend/mindie/latest/mindie-service/bin
    ./mindieservice_daemon

    新建测试窗口(OpenAI接口)

    curl -X POST 172.16.23.55:1060/v1/chat/completions \#POST后接172.16.23.55是ip address,1060是json中设置的port端口号,后面v1...等是相关模型服务
    -d '{
    "messages": [
    {"role": "system", "content": "you are a helpful assistant."},
    {"role": "user", "content": "帮我写一个上海富婆爱上我的故事"}
    ],
    "max_tokens": 256,
    "stream": false,
    "do_sample": true,
    "temperature": 0.6,
    "top_p": 0.95,
    "top_k": 20,
    "model": "qwen3-32b"
    }'# -d后'{}'输入测试内容即可,其他的都是模型可调参数

    输出如下,即部署成功:

    3.5 可视化交互前端界面

    (1)使用Dify工具包

    简介:Dify 是一款开源的大语言模型(LLM)应用开发平台,通过 ‌低代码/无代码‌ 的模块化设计降低生成式 AI 应用的开发门槛,支持集成 OpenAI、Claude3 等主流模型及自托管模型(如 Ollama)‌。其核心功能包括 ‌后端即服务(BaaS)‌、‌可视化 Prompt 编排‌ 和 ‌LLMOps 工具链‌,可灵活构建智能客服、文本生成等场景‌。平台内置 ‌RAG 引擎‌ 实现知识库检索增强生成,并通过 ‌Agent 框架‌ 支持复杂任务分解与工具调用(如搜索、绘图),结合 ‌Workflow 工作流‌ 实现多步骤业务逻辑自动化‌。

     (2) Dify安装

    版本要求

    系统查询命令:

    cpu信息查询:

    #查询cpu核心数及其他信息:
    lscpu
    #或者可以快速查看cpu核心数量:
    nproc
    

    输出cpu核心数量大于2即可

    ram信息查询:

    #检查内存大小(RAM)
    free -h
    

    RAM输出

                  total        used        free      shared  buff/cache   available
    Mem:            7.7Gi       1.6Gi       3.3Gi       160Mi       2.8Gi       5.3Gi
    Swap:           2.0Gi          0B       2.0Gi
    

    Mem 行,查看 total 字段的值。确保总内存大于或等于 4 GiB

    拉取Dify镜像:

    git clone https://github.com/langgenius/dify.git --branch 0.15.3

    修改配置:

    #进入docker目录
    cd dify/docker
    #复制环境配置文件
    cp .env.example .env
    #vim打开.env文件更改端口号
    vim .env

    将NGINX_PORT与NGINX_PORT_EXPOSE更改为未使用的端口(可自定义)。

    默认使用80端口,若无冲突则无需更改。

    如果不配置docker镜像源,会报错如下:

    Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

    docker镜像配置(国内一般很难直接从docker官方源拉取镜像,因此要配置镜像源如下):

    [root@localhost ~]# vim /etc/docker/daemon.json
    [root@localhost ~]# more /etc/docker/daemon.json
    {
        "default-runtime": "ascend",
        "registry-mirrors":[
            "registry-mirrors": [
            "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"
        ],
        "runtimes": {
            "ascend": {
                "path": "/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime",
                "runtimeArgs": []
                }
        }
    }

    添加完成后,需要重新加载docker的配置文件以生效:

    systemctl daemon-reload

    重启docker服务:

    systemctl restart docker.service

    启动容器:

    docker compose up -d

    如果得到以下输出,代表服务拉起成功:

    检查容器是否正常运行:

    docker compose ps

    所有容器的运行状态与占用端口如下。应该看到包含3个业务服务(api / worker / web)以及6个基础组件(weaviate / db / redis / nginx / ssrf_proxy / sandbox)在内的总共9个容器,且STATUS均为Up,服务全部挂起成功。

    (3)可视化web配置

    登录dify网页

    在浏览器内输入“本机ip:端口号”该端口号为在启动dify时更改的NGINX_PORT(见本章节(2)),若无更改,则使用默认的80端口登录。例如:网址:172.16.23.55:80

    *注意:这里又又又有一个坑啦!

    第一次输入网址大概率无法访问网页,会出现如下界面!

    原因:web 服务没有配置端口映射。需要在 web 服务下添加 ports端口配置。在dify文件夹中找到 docker-compose.yml 文件,并作以下修改:

    (1)查看现有docker端口映射情况:

    docker ps

    输出如下:

    CONTAINER ID   IMAGE          COMMAND   CREATED      STATUS      PORTS                   NAMES
    123456789abc   nginx:latest   "/docker-entrypoint...."  2 days ago   Up 2 days  0.0.0.0:3000->80/tcp   web_container
    

    如果PORT一列显示0.0.0.0:3000->80/tcp 则表明主机中的3000端口正常被映射到docker中设置的80端口,此时web服务可以被启用;若映射不完整,只显示主机端口占用情况0.0.0.0:3000或者只有docker中设置的占用端口80/tcp,那么都无法直接在网页中进行启动。此时就需要设置docker-compose中的映射端口。

    (2)切换到相应目录:

    cd D:\Desktop\dify-main\dify-main\docker  #切换目录

    (3)编辑配置文件:

    vim docker-compose.yml

    (4)在service中找到 web 服务的配置部分,在原文件中的restart:always和environment中间添加ports 映射:

    # Frontend web application.
      web:
        image: langgenius/dify-web:0.14.1
        restart: always
        # 添加以下 ports 配置
        ports:
          - "3000:80"    # 宿主机端口号:容器端口号,将主机端口映射到之前设置的容器NGINX_PORT=80端口,注意缩进格式
        environment:
          CONSOLE_API_URL: ${CONSOLE_API_URL:-}
          APP_API_URL: ${APP_API_URL:-}
          SENTRY_DSN: ${WEB_SENTRY_DSN:-}
          NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0}
          TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000}
          CSP_WHITELIST: ${CSP_WHITELIST:-}

    • 当在宿主机上访问 http://<宿主机IP>:80(例如,http://localhost:80 或者宿主机的 IP 地址),请求将被转发到容器的 80 端口。

    • 如果没有设置端口映射,容器的端口只对容器内部可用,外部无法访问。

    :wq保存并退出后,重启docker服务:

    docker compose down
    docker compose up -d

    输出如下,则代表web端口已映射,可以在网页中打开Dify了:

    docker compose同时管理多个容器,支持web和数据库访问管理

    services 定义了应用的不同服务,如:

    • web 服务使用 Nginx 镜像,并暴露端口 80。

    • db 服务使用 MySQL 镜像,并设置环境变量 MYSQL_ROOT_PASSWORD

    输入网址后界面如下,第一次登陆需要设置邮箱,用户名和密码等。

    模型配置:

    点击右上角用户头像,进入设置。

    (1)大语言模型(LLM)

    选择模型供应商中的OpenAI-API-compatible模块。点击添加模型。

    模型类型选择“LLM”,“模型名称”与Mind IE服务化配置dcoker文件“config.json”中的“modelName”保持一致,例如之前配置的是qwen3-32b模型,“API endpoint URL”填写“http://本机ip:qwen3-32b的port端口/v1”,。“模型上下文长度”与“最大 token 上限”按需填写。例如:http://172.16.23.55:1060

    返回首页,创造一个对话应用窗口

    创建聊天助手,进行测试。

    在右侧的聊天界面中进行Q&A

    参考资料:

    【modelscope安装】

    ModelScope初体验 - Joy-word - 博客园

    【Qwen3-32B模型权重下载】

    通义千问3-32B · 模型库

    Qwen3-32B-模型库-ModelZoo-昇腾社区

    【mindie下载】

    基于Atlas 800I A2的RAG端到端实践

    【docker环境配置】

    华为欧拉系统(openEuler)安装 Docker 容器完整教程_openeuler安装docker-CSDN博客

    解决docker镜像仓库下载慢或Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) - 谢墨尘 - 博客园

    【华为服务器部署大模型+测试】

    (99+ 封私信 / 80 条消息) 华为 Atlas 800I A2 大模型部署实战(三):MindIE 安装与部署 LLM - 知乎

    使用MindIE部署大模型——以Qwen3-32B为例_mindie部署qwen3-CSDN博客

    鲲鹏+昇腾Atlas800IA2(910B4)部署Qwen3-32B【简单自用版】_910b部署qwen3-CSDN博客

    Qwen3-32B-模型库-ModelZoo-昇腾社区

    ascend-docker-image: 提供Ascend相关的Dockerfile示例,展示如何创建docker镜像。 - Gitee.com

    https://mp.weixin.qq.com/s/Q4J77DsnKKzlQeBVbNf2qA?scene=1

    【可视化前端交互】

    【昇腾】单张48G Atlas 300I Duo推理卡MindIE+WebUI方式跑14B大语言模型_20250817_atlas300i duo qwen3-CSDN博客

    https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose

    无法打开Dify网页管理界面_dify打不开-CSDN博客

    Logo

    鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

    更多推荐