银河麒麟高级服务器版V11+KVM+Libvirt+WebVirtCloud+OpenStack部署

非常好的选择 👍 您要实现的目标是： 在 银河麒麟高级服务器版V10（Kylin V10） 上，构建一个完整的虚拟化管理平台，包含： 

 

 

 KVM ：提供虚拟化能力（基于CPU硬件虚拟化） 

 

 

 Libvirt ：提供虚拟机管理接口 

 

 

 WebVirtCloud ：提供Web管理界面 

 

 

 OpenStack（可选） ：提供私有云级别的资源调度与自服务管理 

 

 

 下面给出一份 详细、可直接执行的部署文档（生产可用） ，默认系统为 Kylin V10 x86_64 / aarch64，已启用 yum 或 dnf 源。 

 

 🚀 一、环境准备 

 1. 检查CPU是否支持虚拟化 

 egrep -c '(vmx|svm)' /proc/cpuinfo

 

 返回值 > 0 表示支持。 

 2. 确保内核模块支持KVM 

 lsmod | grep kvm

 

 若未加载，则手动加载： 

 modprobe kvm

modprobe kvm_intel # Intel

modprobe kvm_amd # AMD

 

 3. 启用桥接网络（推荐虚拟机可直接联网） 

 创建网桥配置文件 /etc/sysconfig/network-scripts/ifcfg-br0 ： 

 DEVICE=br0

TYPE=Bridge

BOOTPROTO=static

IPADDR=192.168.3.15

NETMASK=255.255.255.0

GATEWAY=192.168.3.1

DNS1=202.96.209.5

ONBOOT=yes

 

 修改物理网卡（如 ifcfg-eno2 ）： 

 DEVICE=ens33

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

BRIDGE=br0

实际如下：

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=eui64

NAME=eno2

UUID=5d9b10e9-49eb-4742-875a-0a6cbc268e9b

DEVICE=eno2

ONBOOT=yes

BRIDGE=br0

#IPADDR=192.168.3.15

#PREFIX=24

#GATEWAY=192.168.3.1

#DNS1=202.96.209.5 

 然后执行： 

 systemctl restart network

实际该命令无效，reboot或其他方法 

 

 🧩 二、安装KVM + Libvirt + QEMU 

 yum install -y qemu-kvm qemu-img virt-manager libvirt python3-libvirt libvirt-client bridge-utils virt-install

 

 启用服务： 

 systemctl enable libvirtd --now

systemctl status libvirtd

 

 验证： 

 virsh list --all

 

 应能返回空虚拟机列表。 

 手动添加 EPEL 仓库 

 cp /etc/yum.repos.d/kylin-extra.repo /etc/yum.repos.d/kylin-extra.repo.bak

vi /etc/yum.repos.d/kylin-extra.repo

[epel]

name=EPEL for Kylin 11 (RHEL8 compatible)

baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/

enabled=1

gpgcheck=0

[powertools]

name=PowerTools for Kylin 11

baseurl=https://mirrors.aliyun.com/centos/8/PowerTools/x86_64/os/

enabled=1

gpgcheck=0

dnf clean all

dnf makecache 

 

 

 🌐 三、安装WebVirtCloud（Web管理界面） 

 1. 安装依赖 

 yum install -y wget git

wget http://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

yum localinstall -y epel-release-latest-8.noarch.rpm --skip-broken

yum clean all

yum makecache

yum install -y git python3 python3-pip nginx supervisor

安装报错的话要用清华源安装

mkdir -p ~/.pip

cat > ~/.pip/pip.conf <<'EOF'

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

timeout = 6000

EOF

pip3 install supervisor

pip3 install --upgrade pip

 

 2. 克隆WebVirtCloud源码 

 cd /opt

git clone https://github.com/retspen/webvirtcloud.git

cd webvirtcloud

如果git失败可调高缓冲区再下载

git config --global http.postBuffer 524288000

git config --global http.lowSpeedLimit 0

git config --global http.lowSpeedTime 999999

git config --global core.compression 0 

 3. 安装Python依赖 

 yum install libvirt-devel gcc python3-devel openldap-devel

pip3 install -r conf/requirements.txt

 

 4. 初始化数据库和配置 

 cp webvirtcloud/settings.py.template webvirtcloud/settings.py

python3 -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

#生成一串字符 c*&2pu%e=m7&r*^r*zp3p*wr!(8w3a$-l^rq@*w5#7ekrwmtpd

vi webvirtcloud/settings.py

#找到或添加 SECRET_KEY 配置）

SECRET_KEY = 'c*&2pu%e=m7&r*^r*zp3p*wr!(8w3a$-l^rq@*w5#7ekrwmtpd'

python3 manage.py migrate

python3 manage.py createsuperuser # 创建管理员账号

#web登录用的账号密码

#账号 shuncom 邮箱：8108@shuncom.com 密码：sh_clighting 

 5. 启动测试 

 方法 A：Gunicorn 自带 --daemon 

 python3 manage.py runserver 0.0.0.0:8000

#如果报错换以下方法

# 安装 gunicorn（你已经安装了）

pip3 install gunicorn

# 启动 WebVirtCloud

gunicorn --workers 3 --bind 0.0.0.0:8000 --daemon webvirtcloud.wsgi:application

#日志默认输出到 gunicorn.log，可通过 --access-logfile 和 --error-logfile 指定日志文件

gunicorn --workers 3 --bind 0.0.0.0:8000 \

 --daemon \

 --access-logfile /var/log/webvirtcloud_access.log \

 --error-logfile /var/log/webvirtcloud_error.log \

 webvirtcloud.wsgi:application

 

 方法 B：使用 systemd 管理 WebVirtCloud 

 创建服务文件 /etc/systemd/system/webvirtcloud.service ： 

 [Unit]

Description=WebVirtCloud Django service

After=network.target

[Service]

User=root

Group=root

WorkingDirectory=/opt/webvirtcloud

ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 webvirtcloud.wsgi:application

Restart=always

[Install]

WantedBy=multi-user.target

 

 然后执行： 

 systemctl daemon-reload

systemctl enable --now webvirtcloud

systemctl status webvirtcloud

#防火墙放行web端口

firewall-cmd --add-port=8000/tcp --permanent

firewall-cmd --add-port=80/tcp --permanent

firewall-cmd --reload

firewall-cmd --list-all 

 访问 http://服务器IP:8000 ，使用创建的管理员账号登录。 

 

 ⚙️ 四、配置Nginx反向代理（生产环境） 

 编辑 /etc/nginx/conf.d/webvirtcloud.conf ： 

 如果没安装：yum install -y nginx 

 server {

 listen 80;

 server_name _;

 location / {

 proxy_pass http://127.0.0.1:8000;

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 proxy_set_header Host $host;

 proxy_redirect off;

 }

}

 

 重启服务： 

 systemctl enable nginx --now

 

 

 🧰 五、配置Supervisor守护WebVirtCloud 

 如果系统没有  /etc/supervisord.conf ，可以创建： 

 

 

 sudo vi /etc/supervisord.conf  

 

 内容示例： 

 [unix_http_server]

file=/tmp/supervisor.sock ; UNIX socket 文件

[supervisord]

logfile=/var/log/supervisord.log

pidfile=/tmp/supervisord.pid

childlogdir=/var/log

[rpcinterface:supervisor]

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]

serverurl=unix:///tmp/supervisor.sock

[include]

files = /etc/supervisord.d/*.ini

 

 mkdir -p /etc/supervisord.d 

 vi /etc/supervisord.d/webvirtcloud.ini 

 [program:webvirtcloud]

command=/usr/bin/python3 /opt/webvirtcloud/manage.py runserver 0.0.0.0:8000

directory=/opt/webvirtcloud

autostart=true

autorestart=true

stderr_logfile=/var/log/webvirtcloud.err.log

stdout_logfile=/var/log/webvirtcloud.out.log

user=root

 

 启用并启动： 

 systemctl enable supervisord --now

supervisorctl restart webvirtcloud 

 验证： 

 supervisorctl status

 

 

 🖥 六、配置WebVirtCloud连接KVM主机 

 

 

 登录WebVirtCloud后台（ http://<服务器IP> ） 

 

 

 “Compute > Add Connection” 

 

 

 填写： 

 

 

 Label : KVM-Host 

 

 

 Hostname/IP : 127.0.0.1 

 

 

 Connection type : SSH 

 

 

 Login user : root 或管理用户 

 

 

 

 

 确保 root 用户可以无密码SSH到本机： 

 ssh-keygen -t rsa

ssh-copy-id root@127.0.0.1

 

 

 

 连接成功后，即可在Web界面创建和管理虚拟机。 

 

 

 

 ☁️ 七、（可选）安装 OpenStack 实现云平台管理 

 

 如果您需要将虚拟化扩展为“云平台”，可以部署轻量级 OpenStack All-in-One。 

 

 1. 安装 DevStack（快速体验） 

 cd /opt

git clone https://opendev.org/openstack/devstack

cd devstack

 

 创建配置文件 local.conf ： 

 [[local|localrc]]

ADMIN_PASSWORD=admin

DATABASE_PASSWORD=admin

RABBIT_PASSWORD=admin

SERVICE_PASSWORD=admin

HOST_IP=192.168.1.100

 

 启动安装： 

 ./stack.sh

 

 安装完成后访问： 

 http://192.168.1.100/dashboard

 

 默认用户： admin 密码： admin 

 

 🧾 八、验证与维护 

 验证虚拟化运行状态 

 virsh list

 

 查看libvirt网络和存储池 

 virsh net-list

virsh pool-list

 

 检查服务状态 

 systemctl status libvirtd

systemctl status nginx

systemctl status supervisord

 

 

 ✅ 部署总结 

 

 

 

 模块 

 功能 

 服务端口 

 管理方式 

 

 

 

 

 KVM 

 提供虚拟化能力 

 - 

 命令行/Libvirt 

 

 

 Libvirt 

 虚拟机管理接口 

 16509 

 virsh/virt-manager 

 

 

 WebVirtCloud 

 Web虚拟机管理 

 80/8000 

 浏览器 

 

 

 OpenStack 

 云计算管理平台 

 80/5000/8774 等 

 Web仪表盘 Horizon 

 

 

 

 

 🧭 建议实践路线 

 

 

 

 目标 

 推荐方案 

 

 

 

 

 轻量虚拟化环境 

 KVM + Virt-Manager 

 

 

 Web管理多节点 

 WebVirtCloud 

 

 

 构建私有云平台 

 OpenStack on KVM 

 

 

 高级调度与计费 

 OpenStack + Ceph 

 

 

 

 

 是否希望我为您输出一份 可直接在Kylin V10执行的 Shell 自动化安装脚本（含Nginx+WebVirtCloud+Libvirt 一键部署） ？ 那样您可以直接运行即可完成全部环境配置。 

 你现在在 WebVirtCloud 创建虚拟机实例时，提示： 

 You haven't defined any storage pools

 

 这是因为 Libvirt 还没有配置任何存储池 ，WebVirtCloud 依赖存储池来存放虚拟机磁盘镜像。 

 

 1️⃣ 查看现有存储池 

 在服务器上执行： 

 sudo virsh pool-list --all

 

 输出可能类似： 

 Name State Autostart

------------------------------------------------

 default inactive no

 

 如果没有存储池或状态为 inactive ，就需要创建或激活。 

 

 2️⃣ 激活默认存储池（如果存在） 

 sudo virsh pool-start default

sudo virsh pool-autostart default

 

 

 3️⃣ 创建新的存储池（如果没有） 

 假设你希望在 /var/lib/libvirt/images 存储虚拟机磁盘： 

 sudo mkdir -p /var/lib/libvirt/images

sudo virsh pool-define-as default dir - - - - "/var/lib/libvirt/images"

sudo virsh pool-build default

sudo virsh pool-start default

sudo virsh pool-autostart default

 

 

 解释： 

 

 

 pool-define-as default dir ... "/var/lib/libvirt/images" ：定义一个目录类型存储池 

 

 

 pool-build ：准备池 

 

 

 pool-start ：启动池 

 

 

 pool-autostart ：开机自动启动 

 

 

 

 

 4️⃣ 在 WebVirtCloud 刷新 

 

 

 登录 WebVirtCloud 

 

 

 打开 Host → Storage Pools 

 

 

 应该能看到你刚创建或激活的存储池 

 

 

 现在就可以创建虚拟机实例了 

 

 

 

 💡 小提示： 

 

 

 存储池必须 可写，并且 WebVirtCloud 运行用户有权限访问 

 

 

 通常使用 root 或者 libvirt 用户运行 WebVirtCloud 

 

 

 

 非常好 👍 你已经能在 WebVirtCloud 里创建虚拟机了。 现在要“上传 ISO 文件并挂载到虚拟机 CD-ROM”，可以有两种常见方式（命令行或 WebVirtCloud 界面）。我详细说明一下： 

 

 🧩 一、命令行方式（推荐） 

 这种方法最直接、最稳定，尤其是初次配置时。 

 1️⃣ 把 ISO 文件上传到宿主机存储路径 

 假设你的默认存储池是 /var/lib/libvirt/images ： 

 cd /var/lib/libvirt/images

 

 然后上传 ISO 文件（有多种方式）： 

 # 方式1：通过scp从你的电脑上传

scp CentOS-7-x86_64-Minimal.iso root@<宿主机IP>:/var/lib/libvirt/images/

# 方式2：直接从宿主机下载

wget https://mirror.stream.centos.org/7/isos/x86_64/CentOS-7-x86_64-Minimal.iso -O /var/lib/libvirt/images/CentOS-7.iso

 

 确保 ISO 文件有读权限： 

 chmod 644 /var/lib/libvirt/images/*.iso

 

 

 2️⃣ 定义 ISO 文件所在目录为存储池（如果还没定义） 

 如果 /var/lib/libvirt/images 不是存储池，可用： 

 virsh pool-define-as iso-pool dir - - - - "/var/lib/libvirt/images"

virsh pool-build iso-pool

virsh pool-start iso-pool

virsh pool-autostart iso-pool

 

 

 3️⃣ 让 WebVirtCloud 识别新 ISO 

 在 WebVirtCloud 界面： 

 

 

 打开左侧菜单 Host → Storage Pools 

 

 

 选中你定义的存储池（如 default 或 iso-pool ） 

 

 

 点击右上角 Refresh （刷新） 

 

 

 然后点击进入该池，你会看到上传的 ISO 文件列表。 

 

 

 

 4️⃣ 在虚拟机中挂载 ISO 文件 

 在 WebVirtCloud 界面： 

 

 

 进入你的虚拟机 → CD-ROM 选项卡 

 

 

 选择 “Attach ISO” 

 

 

 从列表中选中你上传的 ISO 文件 

 

 

 点击 Connect / Attach 

 

 

 这时虚拟机的 CD-ROM 就加载了该 ISO。 

 

 5️⃣ 从 ISO 启动虚拟机 

 在虚拟机界面 → Boot Options 

 

 

 把 CD-ROM 调整为第一个启动项（在 WebVirtCloud 界面中可以拖动） 

 

 

 保存后启动虚拟机，即可从 ISO 安装系统。 

 

 

 

 🧩 二、WebVirtCloud 直接上传（如果开启了上传功能） 

 如果 WebVirtCloud 配置了上传权限（部分版本默认关闭），可以直接在： 

 Host → Storage Pools → 选中 default → Files

 

 看到右上角有 “Upload ISO” 按钮，选择本地 ISO 文件上传。 

 如果没有这个按钮，可以在 settings.py 中启用： 

 UPLOAD_ENABLED = True

 

 然后重启 WebVirtCloud 服务（或 supervisor）。 

 

 ✅ 验证 

 查看 ISO 是否被虚拟机挂载： 

 virsh domblklist <虚拟机名>

 

 输出示例： 

 Target Source

------------------------------------------------

vda /var/lib/libvirt/images/ubuntu.qcow2

hdc /var/lib/libvirt/images/CentOS-7.iso

 

 说明 ISO 已正确挂载。 

 

 是否希望我帮你写一个“一键上传 + 挂载 ISO”的命令脚本？ 比如你输入 ISO 路径和虚拟机名，它自动完成 virsh 操作并刷新 WebVirtCloud。 

 非常好 👍，你提到的： 

 <input type='keyboard' bus='default'/>

 

 是导致你报错的 根本原因之一 。 

 

 ✅ 是的，这一行需要修改。 

 你应该把它改成宿主机支持的输入总线类型。 在大多数情况下（尤其是 KVM/QEMU 的默认虚拟机），应该改为： 

 <input type='keyboard' bus='ps2'/>

 

 或者，如果你的虚拟机配置里主要用 USB 设备，也可以： 

 <input type='keyboard' bus='usb'/>

 

 

 🔧 修改步骤 

 

 

 导出虚拟机配置： 

 virsh dumpxml <虚拟机名> > /tmp/vm.xml

 

 

 

 编辑： 

 vi /tmp/vm.xml

 

 

 

 找到： 

 <input type='keyboard' bus='default'/>

 

 修改为： 

 <input type='keyboard' bus='ps2'/>

 

 

 

 如果有： 

 <input type='tablet' bus='default'/>

 

 也改成： 

 <input type='tablet' bus='usb'/>

 

 

 

 重新定义虚拟机： 

 virsh define /tmp/vm.xml

 

 

 

 启动虚拟机： 

 virsh start <虚拟机名>

 

 

 

 

 ✅ 总结 

 

 

 

 原配置 

 修改后推荐 

 

 

 

 

 <input type='keyboard' bus='default'/> 

 <input type='keyboard' bus='ps2'/> 

 

 

 <input type='tablet' bus='default'/> 

 <input type='tablet' bus='usb'/> 

 

 

 

 

 如果你执行： 

 virsh capabilities | grep input -A2

 

 看到有 ps2 、 usb 类型，那这两个选项都没问题。 修改完这个 XML 后，虚拟机即可正常启动，不会再出现 unknown input bus type 'default' 错误。 

 远程桌面实现方案xrdp 

 你这台机器运行的是  Kylin V10/V11（基于 RHEL8） ，系统源的兼容性有点特殊，EPEL 源里 xrdp 依赖的 xorgxrdp 模块和你当前的 Xorg ABI 版本不匹配（报错的关键信息是： xserver-abi(videodrv-24) ）。 这种情况很常见，因为银河麒麟（尤其是 V11）对 EPEL 并不完全兼容。 下面我给你几种可行的解决方案： 

 

 ✅ 方案 1：仅安装 xrdp，不装 xorgxrdp（最简单） 

 Kylin 默认带桌面环境（如 UKUI），xrdp 可以直接用系统自带的 Xorg 会话，无需 xorgxrdp 。 

 dnf install -y xrdp --nobest --skip-broken

 

 安装完成后： 

 systemctl enable xrdp --now

firewall-cmd --permanent --add-port=3389/tcp

firewall-cmd --reload

 

 然后在 Windows 上用 “远程桌面连接（mstsc）” 输入服务器 IP 即可登录（默认端口 3389）。 

 

 ⚠️ 用户要使用系统用户（如 root 或普通用户），如果登录闪退，可编辑 /etc/xrdp/startwm.sh ： 

 

 vi /etc/xrdp/startwm.sh

 

 在最后添加： 

 exec /usr/bin/startukui

 

 （或根据桌面环境换成 exec /usr/bin/startlxde 、 exec /usr/bin/startxfce4 ） 

 

 ✅ 方案 2：使用 Kylin 官方提供的 xrdp 包（推荐） 

 银河麒麟官方源其实已经内置了 xrdp 包，只是有时没启用。 

 先搜索看看： 

 dnf search xrdp

 

 如果能看到： 

 xrdp.x86_64 : Remote Desktop Protocol (RDP) server

 

 直接安装： 

 dnf install -y xrdp

systemctl enable xrdp --now

 

 

 ✅ 方案 3：手动构建或使用第三方 RPM 包 

 如果你需要特定版本（例如 EPEL 的不兼容），可以下载兼容的 RPM： 

 cd /tmp

wget https://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/x/xrdp-0.9.21-1.el8.x86_64.rpm

dnf install -y ./xrdp-0.9.21-1.el8.x86_64.rpm

 

 

 如果提示缺少依赖，可以加上 --skip-broken 或下载依赖包一并安装。 

 

 

 ✅ 验证运行 

 安装完后，执行以下命令确保运行正常： 

 systemctl status xrdp

ss -tnlp | grep 3389

 

 输出示例： 

 LISTEN 0 50 *:3389 *:* users:(("xrdp",pid=1234,fd=3))

 

 此时可在 Windows 上用远程桌面连接输入： 

 服务器IP:3389

 

 即可。 

 

 如果你贴一下以下命令的输出，我可以帮你判断当前环境最适合哪种方案👇 

 cat /etc/kylin-release

dnf repolist

 

 很好！找到了 `novncd` 的位置：`/opt/webvirtcloud/console/novncd` 

 现在我们来创建 systemd 服务并启动它。 

 --- 

 ### 解决方案 

 #### 第1步：检查 novncd 是否可执行 

 ```bash # 检查文件权限 ls -la /opt/webvirtcloud/console/novncd 

 # 如果没有执行权限，添加它 sudo chmod +x /opt/webvirtcloud/console/novncd 

 # 检查是否依赖 Python file /opt/webvirtcloud/console/novncd head -n 5 /opt/webvirtcloud/console/novncd ``` 

 #### 第2步：创建 systemd 服务文件 

 基于找到的路径创建服务文件： 

 ```bash sudo vi /etc/systemd/system/novncd.service ``` 

 添加以下内容： 

 ```ini [Unit] Description=WebVirtCloud NoVNC Proxy Server After=network.target 

 [Service] Type=simple User=root Group=root WorkingDirectory=/opt/webvirtcloud ExecStart=/opt/webvirtcloud/console/novncd Restart=always RestartSec=3 StandardOutput=journal StandardError=journal 

 [Install] WantedBy=multi-user.target ``` 

 #### 第3步：启用并启动 novncd 服务 

 ```bash # 重新加载 systemd 配置 sudo systemctl daemon-reload 

 # 启动 novncd 服务 sudo systemctl start novncd 

 # 设置开机自启 sudo systemctl enable novncd 

 # 检查服务状态 sudo systemctl status novncd ``` 

 #### 第4步：检查服务是否正常运行 

 ```bash # 检查进程 ps aux | grep novncd 

 # 检查端口监听（novncd 默认监听 6080 端口） netstat -tlnp | grep 6080 ss -tlnp | grep 6080 

 # 查看服务日志 sudo journalctl -u novncd -f ``` 

 --- 

 ### 如果服务启动失败，进行故障排除 

 #### 检查依赖项 

 ```bash # 检查 Python 环境 cd /opt/webvirtcloud python3 -c "import django; print('Django OK')" python3 -c "from console import novnc; print('novnc module OK')" 

 # 检查 requirements if [ -f "/opt/webvirtcloud/requirements.txt" ]; then     echo "检查依赖包..."     pip3 list | grep -E "(websockify|django)" fi ``` 

 #### 手动测试 novncd 

 ```bash # 切换到目录 cd /opt/webvirtcloud 

 # 手动启动 novncd 进行测试 /opt/webvirtcloud/console/novncd 

 # 或者在后台启动 /opt/webvirtcloud/console/novncd & ``` 

 #### 如果手动启动有错误，可能需要安装依赖 

 ```bash # 安装可能的依赖 sudo pip3 install websockify 

 # 或者安装所有 requirements if [ -f "/opt/webvirtcloud/requirements.txt" ]; then     sudo pip3 install -r /opt/webvirtcloud/requirements.txt fi ``` 

 --- 

 ### 配置 WebVirtCloud 

 确保 WebVirtCloud 配置正确指向 novncd： 

 检查 WebVirtCloud 配置文件： 

 ```bash # 查找配置文件 find /opt/webvirtcloud -name "settings.py" -o -name "*.conf" | grep -v __pycache__ 

 # 常见的配置路径 ls -la /opt/webvirtcloud/webvirtcloud/ ``` 

 在配置文件中应该有这样的设置： 

 ```python # 在 settings.py 或配置文件中 NOVNC_HOST = 'localhost'   # 或您的服务器IP NOVNC_PORT = 6080 ``` 

 --- 

 ### 测试连接 

 在 novncd 服务运行后，测试连接： 

 ```bash # 检查端口是否开放 curl -I http://localhost:6080/ 

 # 使用 telnet 测试 telnet localhost 6080 

 # 或者使用 nc nc -zv localhost 6080 ``` 

 --- 

 ### 完整的故障排除流程 

 如果上述步骤还有问题，请按顺序执行： 

 ```bash # 1. 停止可能运行的服务 sudo pkill -f novncd 

 # 2. 检查并安装依赖 sudo pip3 install websockify 

 # 3. 设置正确的权限 sudo chmod +x /opt/webvirtcloud/console/novncd 

 # 4. 手动测试运行 cd /opt/webvirtcloud /opt/webvirtcloud/console/novncd 

 # 5. 如果手动运行成功，Ctrl+C 停止，然后创建服务 sudo systemctl daemon-reload sudo systemctl start novncd sudo systemctl status novncd 

 # 6. 检查防火墙 sudo firewall-cmd --list-ports sudo firewall-cmd --add-port=6080/tcp --permanent sudo firewall-cmd --reload ``` 

 请按照这些步骤操作，然后在每个步骤后告诉我输出结果，这样我可以帮您进一步诊断问题。 

 太好了！`novncd` 服务现在已经成功运行了： 

 - ✅ **服务状态**: `active (running)` - ✅ **进程运行**: PID 30720 - ✅ **端口监听**: `0.0.0.0:6080` 正常监听 - ✅ **开机自启**: 已启用 

 现在 `novncd` 服务已经正常运行，但 VNC 连接可能仍然有问题。让我们继续排查其他可能的环节。 

 --- 

 ### 下一步排查 

 #### 第1步：检查虚拟机VNC配置 

 虽然 `virsh vncdisplay 11` 显示 `:0`，但我们还需要确认VNC配置是否正确： 

 ```bash # 查看虚拟机的完整VNC配置 virsh dumpxml 11 | grep -A 10 -B 5 "<graphics" 

 # 或者查看完整的XML配置 virsh dumpxml 11 > /tmp/vm-11.xml cat /tmp/vm-11.xml | grep -A 10 -B 5 "graphics" ``` 

 **关键检查点：** - 确认 `<graphics>` 标签中有 `listen='0.0.0.0'` - 确认没有设置密码导致连接问题 

 #### 第2步：检查防火墙 

 确保 VNC 相关端口都开放： 

 ```bash # 检查防火墙状态（如果是firewalld） sudo firewall-cmd --list-all 

 # 开放必要的端口 sudo firewall-cmd --add-port=6080/tcp --permanent sudo firewall-cmd --add-port=5900-5959/tcp --permanent sudo firewall-cmd --reload 

 # 如果是iptables，检查规则 sudo iptables -L -n | grep -E "(6080|5900)" ``` 

 #### 第3步：测试VNC端口连通性 

 ```bash # 检查虚拟机VNC端口是否可达（:0 对应端口5900） netstat -tlnp | grep 5900 

 # 测试本地连接 telnet localhost 5900 

 # 如果5900端口没有监听，检查其他可能的端口 netstat -tlnp | grep -E ":(59[0-9][0-9])" ``` 

 #### 第4步：检查WebVirtCloud配置 

 确认WebVirtCloud正确配置了novncd连接： 

 ```bash # 查找WebVirtCloud配置文件 find /opt/webvirtcloud -name "settings.py" -o -name "*.py" | xargs grep -l "NOVNC\|novnc" | grep -v __pycache__ 

 # 检查常见的配置文件 ls -la /opt/webvirtcloud/webvirtcloud/settings.py ``` 

 在配置文件中应该有这样的设置： ```python NOVNC_HOST = 'localhost'   # 或者您的服务器IP NOVNC_PORT = 6080 ``` 

 #### 第5步：测试novncd到虚拟机VNC的连接 

 ```bash # 使用websocat或其他工具测试novncd代理 curl -I http://localhost:6080/ 

 # 或者使用wget测试 wget -O- http://localhost:6080/ 2>&1 | head -20 ``` 

 #### 第6步：检查SELinux状态 

 ```bash # 检查SELinux是否启用 getenforce 

 # 如果是Enforcing模式，尝试临时禁用测试 sudo setenforce 0 

 # 然后测试VNC连接，如果成功，说明是SELinux问题 ``` 

 --- 

 ### 快速诊断命令 

 请运行以下命令并分享输出： 

 ```bash # 1. 检查虚拟机VNC配置详情 virsh dumpxml 11 | grep -A 10 "<graphics" 

 # 2. 检查5900端口状态 netstat -tlnp | grep 5900 

 # 3. 检查防火墙规则 sudo firewall-cmd --list-all 2>/dev/null || sudo iptables -L -n | head -20 

 # 4. 测试novncd服务响应 curl -s http://localhost:6080/ | head -5 

 # 5. 检查SELinux getenforce ``` 

 --- 

 ### 如果以上都正常但仍然连接失败 

 尝试重启相关服务： 

 ```bash # 重启novncd服务 sudo systemctl restart novncd 

 # 重启WebVirtCloud服务（如果有） sudo systemctl restart webvirtcloud  # 或者gunicorn、nginx等 

 # 重启libvirtd服务 sudo systemctl restart libvirtd ``` 

 现在 `novncd` 服务已经正常运行，问题很可能出现在： 1. **虚拟机VNC配置**（特别是listen地址） 2. **防火墙阻止了端口访问** 3. **WebVirtCloud配置**中的novncd地址设置 4. **SELinux策略** 

 请运行上面的诊断命令，我会根据输出帮您进一步定位问题。