Project Icon

webvirtcloud

功能全面的KVM虚拟化Web管理平台

WebVirtCloud是一个开源的KVM虚拟化Web管理平台,提供虚拟机、主机、存储和网络等全面管理功能。它支持多用户授权、noVNC控制台访问和云初始化,适用于各类虚拟化环境。该平台操作简便,功能齐全,是管理KVM虚拟化基础设施的理想选择。

WebVirtCloud

Python 3.x 和 Django 4.2 LTS

功能特性

  • QEMU/KVM 虚拟机管理
  • QEMU/KVM 实例管理 - 创建、删除、更新
  • 基于网页的虚拟机和实例统计信息
  • 管理多个 QEMU/KVM 虚拟机
  • 管理虚拟机数据存储池
  • 管理虚拟机网络
  • 通过浏览器访问实例控制台
  • 基于 Libvirt API 的网页管理界面
  • 基于用户的授权和认证
  • 用户可以在实例中为 root 添加 SSH 公钥(仅在 Ubuntu 上测试过)
  • 用户可以在实例中更改 root 密码(仅在 Ubuntu 上测试过)
  • 支持 cloud-init 数据源接口

警告!!!

如何在虚拟机上更新 gstfsd 守护进程:

wget -O - https://bit.ly/2NAaWXG | sudo tee -a /usr/local/bin/gstfsd
sudo service supervisor restart

描述

WebVirtCloud 是一个面向管理员和用户的虚拟化 Web 界面。它可以将虚拟机委派给用户。noVNC 查看器为客户域提供完整的图形控制台。目前仅支持 KVM 虚拟机。

使用安装程序快速安装(测试版)

安装操作系统并运行指定命令。安装程序支持的操作系统:Ubuntu 18.04/20.04、Debian 10/11、Centos/OEL/RHEL 8。 可以安装在虚拟机、物理主机或 KVM 主机上。

wget https://raw.githubusercontent.com/retspen/webvirtcloud/master/install.sh
chmod 744 install.sh
# 使用 sudo 或 root 用户运行
./install.sh

手动安装

生成密钥

克隆仓库后应该生成 SECRET_KEY。然后将其放入 webvirtcloud/settings.py 中。

import random, string
haystack = string.ascii_letters + string.digits + string.punctuation
print(''.join([random.SystemRandom().choice(haystack) for _ in range(50)]))

安装 WebVirtCloud 面板(Ubuntu 18.04+ LTS)

sudo apt-get -y install git virtualenv python3-virtualenv python3-dev python3-lxml libvirt-dev zlib1g-dev libxslt1-dev nginx supervisor libsasl2-modules gcc pkg-config python3-guestfs libsasl2-dev libldap2-dev libssl-dev
git clone https://github.com/retspen/webvirtcloud
cd webvirtcloud
cp webvirtcloud/settings.py.template webvirtcloud/settings.py
# 现在将密钥放入 webvirtcloud/settings.py
sudo cp conf/supervisor/webvirtcloud.conf /etc/supervisor/conf.d
sudo cp conf/nginx/webvirtcloud.conf /etc/nginx/conf.d
cd ..
sudo mv webvirtcloud /srv
sudo chown -R www-data:www-data /srv/webvirtcloud
cd /srv/webvirtcloud
virtualenv -p python3 venv
source venv/bin/activate
pip install -r conf/requirements.txt
python3 manage.py migrate
python3 manage.py collectstatic --noinput
sudo chown -R www-data:www-data /srv/webvirtcloud
sudo rm /etc/nginx/sites-enabled/default

重启服务以运行 WebVirtCloud:

sudo service nginx restart
sudo service supervisor restart

在服务器上设置 libvirt 和 KVM

wget -O - https://bit.ly/36baWUu | sudo sh

完成!!

访问 http://服务器IP,你应该能看到登录界面。

安装 WebVirtCloud 面板(CentOS8/OEL8)

sudo yum -y install epel-release
sudo yum -y install python3-virtualenv python3-devel libvirt-devel glibc gcc nginx supervisor python3-lxml git python3-libguestfs iproute-tc cyrus-sasl-md5 python3-libguestfs libsasl2-dev libldap2-dev libssl-dev

创建目录并克隆仓库

sudo mkdir /srv && cd /srv
sudo git clone https://github.com/retspen/webvirtcloud && cd webvirtcloud
cp webvirtcloud/settings.py.template webvirtcloud/settings.py
# 现在将密钥放入 webvirtcloud/settings.py
# 手动创建密钥或使用以下命令
sudo sed -r "s/SECRET_KEY = ''/SECRET_KEY = '"`python3 /srv/webvirtcloud/conf/runit/secret_generator.py`"'/" -i /srv/webvirtcloud/webvirtcloud/settings.py

开始安装 webvirtcloud

virtualenv-3 venv
source venv/bin/activate
pip3 install -r conf/requirements.txt
cp conf/nginx/webvirtcloud.conf /etc/nginx/conf.d/
python3 manage.py migrate
python3 manage.py collectstatic --noinput

为 CentOS 配置 supervisor

在 [include] 行后添加以下内容(实际上是在 files = ... 之后):

sudo vim /etc/supervisord.conf

[program:webvirtcloud]
command=/srv/webvirtcloud/venv/bin/gunicorn webvirtcloud.wsgi:application -c /srv/webvirtcloud/gunicorn.conf.py
directory=/srv/webvirtcloud
user=nginx
autostart=true
autorestart=true
redirect_stderr=true

[program:novncd]
command=/srv/webvirtcloud/venv/bin/python3 /srv/webvirtcloud/console/novncd
directory=/srv/webvirtcloud
user=nginx
autostart=true
autorestart=true
redirect_stderr=true

编辑 nginx.conf 文件

你需要编辑主 nginx.conf 文件,因为 rpm 包中的文件无法使用。注释以下行:

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }
}

同时确保 /etc/nginx/conf.d/webvirtcloud.conf 文件中的路径正确:

upstream gunicorn_server {
    #server unix:/srv/webvirtcloud/venv/wvcloud.socket fail_timeout=0;
    server 127.0.0.1:8000 fail_timeout=0;
}
server {
    listen 80;

    server_name servername.domain.com;
    access_log /var/log/nginx/webvirtcloud-access_log; 

    location /static/ {
        root /srv/webvirtcloud;
        expires max;
    }

    location / {
        proxy_pass http://gunicorn_server;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $remote_addr;
        proxy_connect_timeout 1800;
        proxy_read_timeout 1800;
        proxy_send_timeout 1800;
        client_max_body_size 1024M;
    }
}

更改权限,使 nginx 可以读取 webvirtcloud 文件夹:

sudo chown -R nginx:nginx /srv/webvirtcloud

更改 selinux 权限:

sudo semanage fcontext -a -t httpd_sys_content_t "/srv/webvirtcloud(/.*)"
sudo setsebool -P httpd_can_network_connect on -P

将所需用户添加到 kvm 组(如果不是使用 root 安装):

sudo usermod -G kvm -a <用户名>

在防火墙上允许 http 端口:

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=6080/tcp
sudo firewall-cmd --add-port=6080/tcp --permanent

让我们重启 nginx 和 supervisord 服务:

sudo systemctl restart nginx && systemctl restart supervisord

最后,检查所有内容是否正在运行:

sudo supervisorctl status
gstfsd             RUNNING   pid 24662, uptime 6:01:40
novncd             RUNNING   pid 24661, uptime 6:01:40
webvirtcloud       RUNNING   pid 24660, uptime 6:01:40

Apache mod_wsgi 配置

WSGIDaemonProcess webvirtcloud threads=2 maximum-requests=1000 display-name=webvirtcloud
WSGIScriptAlias / /srv/webvirtcloud/webvirtcloud/wsgi_custom.py

在主机服务器上安装 libvirtd 和其他最终所需的包

wget -O - https://clck.ru/9V9fH | sudo sh

完成!!

访问 http://服务器IP,你应该能看到登录界面。

通过 runit 运行 novncd 的替代方案(Debian)

通过 runit 运行 novncd 是 supervisor 的替代方案。

在 Debian 系统上安装 runit 并配置 novncd 服务:

apt install runit runit-systemd
mkdir /etc/service/novncd/
ln -s /srv/webvirtcloud/conf/runit/novncd.sh /etc/service/novncd/run
systemctl start runit.service

默认凭据

登录: admin
密码: admin

配置计算节点 SSH 连接

这是配置云端和计算节点 SSH 连接的简短示例。

在 webvirtcloud 机器上,你需要生成 SSH 密钥,并可选择禁用 StrictHostKeyChecking。

chown www-data -R ~www-data
sudo -u www-data ssh-keygen
cat > ~www-data/.ssh/config << EOF
Host *
StrictHostKeyChecking no
EOF
chown www-data -R ~www-data/.ssh/config

你需要将云端公钥放入计算节点的授权密钥中。最简单的方法是使用 webvirtcloud 服务器上的 ssh 工具。

sudo -u www-data ssh-copy-id root@compute1

主机 SMBIOS 信息不可用

如果你看到警告

Unsupported configuration: Host SMBIOS information is not available

那么你需要在主机上使用包管理器安装 dmidecode 包,并重启 libvirt 守护进程。

Debian/Ubuntu 系:

sudo apt-get install dmidecode
sudo service libvirt-bin restart

Arch Linux

sudo pacman -S dmidecode
systemctl restart libvirtd

Cloud-init

目前仅支持 root SSH 授权密钥和主机名。以下是 cloud-init 客户端的示例配置。

datasource:
  OpenStack:
      metadata_urls: [ "http://webvirtcloud.domain.com/datasource" ]

反向代理

编辑 settings.py 文件中的 WS_PUBLIC_PORT,将重定向暴露到 80 或 443 端口。默认值:6080

WS_PUBLIC_PORT = 80

如何更新

# 进入安装目录
cd /srv/webvirtcloud
source venv/bin/activate
git pull
pip3 install -U -r conf/requirements.txt 
python3 manage.py migrate
python3 manage.py collectstatic --noinput
sudo service supervisor restart

运行测试

执行测试的服务器必须已安装并运行libvirt。 它不能包含任何虚拟机。 它必须有一个名为"default"的存储池,且不包含任何磁盘镜像。 它必须有一个名为"default"的网络,并且该网络必须处于开启状态。 设置虚拟环境

python -m venv venv
source venv/bin/activate
pip install -r conf/requirements.txt

运行测试

python manage.py test

LDAP配置

以下配置选项可以在webvirtcloud/settings.py文件中修改。这里展示了Active Directory和OpenLDAP的配置示例。这是运行LDAP的最小配置,更多信息请阅读django-auth-ldap文档

启用LDAP

sudo sed -i "s~#\"django_auth_ldap.backend.LDAPBackend\",~\"django_auth_ldap.backend.LDAPBackend\",~g" /srv/webvirtcloud/webvirtcloud/settings.py

设置LDAP服务器名称和绑定DN

# Active Directory
AUTH_LDAP_SERVER_URI = "ldap://example.com"
AUTH_LDAP_BIND_DN = "username@example.com"
AUTH_LDAP_BIND_PASSWORD = "password"

# OpenLDAP
AUTH_LDAP_SERVER_URI = "ldap://example.com"
AUTH_LDAP_BIND_DN = "CN=username,CN=Users,OU=example,OU=com"
AUTH_LDAP_BIND_PASSWORD = "password"

设置用户过滤器以及用户和组搜索基础和过滤器

# Active Directory
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"
)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType()

# OpenLDAP
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(cn=%(user)s)"
)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=groupOfUniqueNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfUniqueNamesType()  # 需要在settings.py顶部更改导入

设置访问WebVirtCloud所需的组。您可以将此设置为False以禁用此过滤器。

AUTH_LDAP_REQUIRE_GROUP = "CN=WebVirtCloud Access,CN=Users,DC=example,DC=com"

使用LDAP中的值填充用户字段

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_staff": "CN=WebVirtCloud Staff,CN=Users,DC=example,DC=com",
    "is_superuser": "CN=WebVirtCloud Admins,CN=Users,DC=example,DC=com",
}
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail",
}

现在,当您使用LDAP用户登录时,它将被分配定义的权限。用户将通过LDAP进行身份验证,然后通过WebVirtCloud权限进行授权。

如果您想将用户从LDAP迁移到WebVirtCloud,只需从UI更改其密码,并(最终)从LDAP组中删除该用户。

REST API / 测试版

WebVirtCloud提供了REST API以供程序访问。 要访问API方法,请在浏览器中打开并使用Swagger界面查看它们

http://<webvirtloud-address:port>/swagger
http://<webvirtloud-address:port>/redoc

截图

实例详情: 实例列表:
其他:

许可证

WebVirtCloud 根据 Apache 许可证 2.0 版授权。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号