手动部署webvirtmgr

  • 测试环境配置说明

    • webvirtmgr所在主机安装centos 7.4(官方镜像安装桌面版)

    • 虚拟机所在主机安装centos 7.4(官方桌面版镜像以minimal方式安装)

  • 搭建虚拟机的宿主机

    1. 安装相关软件

      yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install bridge-utils cyrus-sasl-md5

    2. 配置libvirt(以qemu+tcp方式访问libvirt)

      1. 编辑文件/etc/sysconfig/libvirtd,修改相关项如下所示

        LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
        LIBVIRTD_ARGS="--listen"

      2. 编辑文件/etc/libvirt/libvirtd.conf,修改相关项如下所示

        listen_tls = 0
        listen_tcp = 1
        tcp_port = "16509"
        listen_addr = "0.0.0.0"
        auth_tcp = "sasl"

      3. 创建远程连接libvirtd的账户

        注:USER是自定义的用户名

        saslpasswd2 -a libvirt USER -f /etc/libvirt/passwd.db

      4. 查看用户是否创建成功

        注:USER是自定义的用户名

        sasldblistusers2 -f /etc/libvirt/passwd.db

      5. 编辑文件/etc/sasl2/libvirt.conf,将相关项修改为如下值

        mech_list: digest-md5
        sasldb_path: /etc/libvirt/passwd.db

      6. 重启libvirtd服务

        service libvirtd restart

      7. 配置防火墙

        1. 查看相关网卡所属区域

          firewall-cmd --get-active-zones

        2. 修改相关区域防火墙规则

          注:nic_zone表示网卡所属区域。依次打开的是libvirtd,vnc,novnc的端口

          firewall-cmd --zone={nic_zone} --add-port 16509/tcp --permanent
          firewall-cmd --zone={nic_zone} --add-port=5900-6000/tcp --permanent
          firewall-cmd --zone={nic_zone} --add-port=6080/tcp --permanent

          示例:

          firewall-cmd --zone=public --add-port 16509/tcp --permanent
          firewall-cmd --zone=public --add-port=5900-6000/tcp --permanent
          firewall-cmd --zone=public --add-port=6080/tcp --permanent

        3. 重新加载防火墙

          firewall-cmd --reload

      8. 在另外一台机器上确认是否能访问libvirtd服务(需输入saslpasswd2创建的用户及密码)

        virsh -c qemu+tcp://{libvirt_host_ip}/system nodeinfo

    3. 物理主机上建立网桥 

      1. 关闭NetworkManager

        service NetworkManager stop
        systemctl disable NetworkManager

      2. 新建文件/etc/sysconfig/network-scripts/ifcfg-br,写入以下内容

        注:根据环境配置ip等变量

        DEVICE="br"
        ONBOOT="yes"
        TYPE="Bridge"
        BOOTPROTO=static
        ZONE=public
        IPADDR=XXX.XXX.XXX.XXX
        NETMASK=YYY.YYY.YYY.YYY
        GATEWAY=ZZZ.ZZZ.ZZZ.ZZZ

        示例:

        DEVICE="br"
        ONBOOT="yes"
        TYPE="Bridge"
        BOOTPROTO=static
        ZONE=public
        IPADDR=10.0.112.39
        NETMASK=255.255.255.0
        GATEWAY=10.0.112.1

      3. 修改物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,注释原内容,加入如下内容

        注:请根据实际情况修改对应的网卡配置文件(有可能不是ifcfg_eth0),并将变量DEVICE和NAME修改为对应值

        DEVICE="eth0"
        NM_CONTROLLED="no"
        ONBOOT="yes"
        TYPE=Ethernet
        BOOTPROTO=none
        BRIDGE="br"
        NAME="eth0"
        ZONE=public

      4. 重启网络

        service network restart

  • 搭建webvirtmgr所在主机

    1. 安装软件包

      yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
      yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
      yum -y install gcc python-devel
      pip install numpy

    2. 下载webvirtmgr

      下载地址:https://github.com/retspen/webvirtmgr/releases
      使用的webvirtmgr版本号是v4.8.9

      wget -c https://github.com/retspen/webvirtmgr/releases/download/v4.8.9/webvirtmgr.tar.gz

    3. 安装webvirtmgr

      mkdir -p /data/wwwroot/
      tar zxvf webvirtmgr.tar.gz -C /data/wwwroot
      cd /data/wwwroot/webvirtmgr/
      pip install -r requirements.txt

    4. 创建webvirtmgr登录用户名及密码

      cd /data/wwwroot/webvirtmgr/
      ./manage.py syncdb

    5. 配置Django运行环境

      cd /data/wwwroot/webvirtmgr/
      ./manage.py collectstatic

    6. 配置nginx

      1. 编辑文件/etc/nginx/nginx.conf

        在server段后追加下述内容,将原server段内容注释掉

        server {
            listen 80 default; #80端口也可以改为其他端口,加强控制面板安全性
            server_name $hostname;
            root /data/wwwroot/webvirtmgr/webvirtmgr;

            location /static/ {
                root /data/wwwroot/webvirtmgr/webvirtmgr;
                expires max;
            }

            location / {
                proxy_pass http://127.0.0.1:8000;
                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 $scheme;
                proxy_connect_timeout 600;
                proxy_read_timeout 600;
                proxy_send_timeout 600;
                client_max_body_size 1024M;
            }
        }

      2. 启动nginx

        1. 测试nginx配置文件是否正确

          nginx -t

        2. 启动nginx

          chown -R nginx:nginx /data/wwwroot/webvirtmgr/
          systemctl enable nginx
          service nginx restart

    7. 配置Supervisor

      1. 创建文件/etc/supervisord.d/webvirtmgr.ini,写入以下内容

        [program:webvirtmgr]
        command=/usr/bin/python /data/wwwroot/webvirtmgr/manage.py run_gunicorn -c /data/wwwroot/webvirtmgr/conf/gunicorn.conf.py
        directory=/data/wwwroot/webvirtmgr
        autostart=true
        autorestart=true
        logfile=/var/log/supervisor/webvirtmgr.log
        log_stderr=true
        user=nginx

        [program:webvirtmgr-console]
        command=/usr/bin/python /data/wwwroot/webvirtmgr/console/webvirtmgr-console
        directory=/data/wwwroot/webvirtmgr
        autostart=true
        autorestart=true
        stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
        redirect_stderr=true
        user=nginx

      2. 启动supervisord服务

        systemctl enable supervisord
        service supervisord restart

    8. 打开防火墙

      1. 查看相关网卡所在区域

        firewall-cmd --get-active-zones

      2. 打开nginx端口

        注:zone是网卡所在区域,80是nginx配置文件中的端口

        firewall-cmd --zone={zone} --add-port 80/tcp --permanent
        firewall-cmd --reload

        示例:

        firewall-cmd --zone=public --add-port 80/tcp --permanent
        firewall-cmd --reload

    9. 关闭selinux

      1. 编辑文件/etc/selinux/config,将相关内容配置为如下

        SELINUX=disabled

      2. 重启机器,重启后在浏览器中以下述地址访问即可

        注:ip为webvirtmgr所在主机ip

        {ip}:80

        或:

        {ip}

  • webvirtmgr连接虚拟机的宿主机

    登录webvirtmgr后,点击右上角的“Add Connection”按钮,在弹出页面中选择“TCP 连接”,填写好相关信息后即可加入前面配置好的宿主机。

    注1:“用户名”和“密码”是前面使用saslpasswd2创建的用户名和密码。

    注2:在连接ceph存储时,由于centos7.4的libvirt版本不支持secret,需要修改webvirtmgr的源码。
     

如果觉得本文不错,欢迎打赏