KVM虚拟化管理平台WebVirtMgr部署 - 完整记录(2):配置与优化

在前一篇文章中,我们完成了WebVirtMgr的基础环境搭建与组件安装。本文将深入进行核心配置,包括WebVirtMgr与KVM主机的安全连接、Web界面访问优化(Nginx反向代理 + SSL)、日常运维命令及常见故障排查。本指南遵循最小权限原则和安全最佳实践,适用于生产环境部署。

目录#

  1. WebVirtMgr配置初始化
  2. 添加KVM主机(安全SSH隧道模式)
  3. Nginx反向代理配置
  4. SSL证书部署
  5. Systemd服务管理
  6. 日常管理与维护
  7. 常见问题排查
  8. 总结
  9. 参考

1. WebVirtMgr配置初始化#

1.1 数据库配置#

使用安装时创建的MySQL/MariaDB账户初始化应用配置:

cd /srv/webvirtmgr
source webvirtmgr/bin/activate
cp webvirtmgr/settings.py.template webvirtmgr/settings.py
nano webvirtmgr/settings.py

关键配置项修改:

# 数据库配置(示例)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'webvirtmgr',       # 数据库名
        'USER': 'webvirtmgr_user',   # 数据库用户名
        'PASSWORD': 'YourStrong!Pass123',  # 密码
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
 
# SECURITY WARNING: 生产环境务必修改!
SECRET_KEY = '生成随机的50字符密钥'
ALLOWED_HOSTS = ['your.domain.com', 'localhost']  # 允许访问的域名或IP

1.2 同步数据库并收集静态资源#

python3 manage.py migrate
python3 manage.py collectstatic
# 提示“覆盖静态文件”时输入 yes

2. 添加KVM主机(安全SSH隧道模式)#

! 安全警告 ! 直接使用libvirt TCP端口(默认16509)存在安全风险。强制推荐SSH隧道加密通信。

2.1 创建专用管理用户#

在KVM宿主机执行:

sudo useradd -m -s /bin/bash webvirtmgr-admin
echo "webvirtmgr-admin ALL = (root) NOPASSWD: /usr/bin/virsh, /usr/bin/virt-clone" | sudo tee /etc/sudoers.d/webvirtmgr
sudo passwd webvirtmgr-admin  # 设置强密码或使用SSH密钥

2.2 配置SSH密钥免密登录(WebVirtMgr服务器端操作)#

sudo -u webvirtmgr ssh-keygen -t rsa -b 4096
sudo -u webvirtmgr ssh-copy-id webvirtmgr-admin@kvm-host-ip
# 测试连接
sudo -u webvirtmgr ssh webvirtmgr-admin@kvm-host-ip

2.3 Web界面添加主机#

  1. 登录 WebVirtMgr:https://your-server:8000
  2. ServersAdd Server
    • Hostname: 唯一标识(如 prod-kvm01)
      Connection Type: SSH
      Username: webvirtmgr-admin
      SSH Port: 22(若非默认)
      Hostname/IP: KVM宿主机真实IP
  3. Test ConnectionSave

验证连接状态:

  • 成功:Servers列表状态显示绿色图标 ✅
  • 失败:检查 /var/log/webvirtmgr.log 中的错误日志

3. Nginx反向代理配置#

使用Nginx提高并发性能并实现端口标准化(80/443 → 内部8000)。

3.1 创建Nginx配置文件#

sudo nano /etc/nginx/sites-available/webvirtmgr.conf

配置示例:

upstream webvirtmgr {
    server 127.0.0.1:8000 fail_timeout=0;
}
 
server {
    listen 80;
    listen [::]:80;
    server_name virt.yourcompany.com;
    return 301 https://$host$request_uri;  # 强制HTTPS
}
 
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name virt.yourcompany.com;
    
    # 下节SSL配置会替换以下路径
    ssl_certificate /etc/ssl/certs/webvirtmgr.pem;
    ssl_certificate_key /etc/ssl/private/webvirtmgr.key;
    
    # 安全增强配置(部分)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
 
    # WebSocket连接支持(VNC/Console必需)
    location /websocket/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://webvirtmgr;
    }
    
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://webvirtmgr;
        proxy_read_timeout 900;  # Console长连接超时设置
    }
    
    # 禁止访问敏感目录
    location ~* ^/(static|\.|settings\.py) {
        deny all;
    }
}

启用配置并测试:

sudo ln -s /etc/nginx/sites-available/webvirtmgr.conf /etc/nginx/sites-enabled/
sudo nginx -t  # 检查语法
sudo systemctl reload nginx

4. SSL证书部署#

选项A:使用Let's Encrypt免费证书(推荐)#

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d virt.yourcompany.com
# 自动更新配置

选项B:自签名证书(测试用)#

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/webvirtmgr.key \
    -out /etc/ssl/certs/webvirtmgr.pem
# 然后在Nginx配置中指定路径

5. Systemd服务管理#

创建Systemd单元文件实现服务自启动:

sudo nano /etc/systemd/system/webvirtmgr.service

服务文件内容:

[Unit]
Description=WebVirtMgr Application Server
After=network.target
 
[Service]
User=webvirtmgr
Group=webvirtmgr
WorkingDirectory=/srv/webvirtmgr
Environment="VIRTUAL_ENV=/srv/webvirtmgr/webvirtmgr"
ExecStart=/srv/webvirtmgr/webvirtmgr/bin/python manage.py run_gunicorn -c /srv/webvirtmgr/gunicorn.conf.py
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable --now webvirtmgr.service
sudo systemctl status webvirtmgr  # 验证状态

6. 日常管理与维护#

6.1 关键命令#

功能命令
启动服务sudo systemctl start webvirtmgr
停止服务sudo systemctl stop webvirtmgr
查看日志sudo journalctl -u webvirtmgr -f
进入虚拟环境source /srv/webvirtmgr/webvirtmgr/bin/activate

6.2 备份策略#

  1. 数据库备份
    mysqldump -u root -p webvirtmgr > webvirtmgr_$(date +%F).sql
  2. 配置文件备份
    /srv/webvirtmgr/webvirtmgr/settings.py
    /etc/nginx/sites-available/webvirtmgr.conf

6.3 版本升级#

sudo systemctl stop webvirtmgr
source /srv/webvirtmgr/webvirtmgr/bin/activate
git pull origin master
pip install -r requirements.txt
python3 manage.py migrate
python3 manage.py collectstatic
sudo systemctl start webvirtmgr

7. 常见问题排查#

❗ 连接主机超时(Timeout)#

  • 检查KVM主机防火墙是否允许SSH:sudo ufw status
  • 验证密钥认证:sudo -u webvirtmgr ssh webvirtmgr-admin@host-ip
  • 检查/var/log/webvirtmgr.log中的libvirt错误

🌐 无法打开VNC Console#

  • Nginx必须配置/websocket/路由且支持WebSocket
  • 浏览器控制台检查WebSocket连接错误(wss://
  • 确认SELinux状态:sudo setsebool -P httpd_can_network_connect 1

🔑 登录后无主机列表#

  • WebVirtMgr账号是否绑定到KVM主机(Settings → Users)
  • 数据库连接是否正常:检查/srv/webvirtmgr/noVirt/novirt/logs/novirt.log

8. 总结#

通过本指南,你已完成:
✅ WebVirtMgr与KVM主机的安全SSH隧道连接
✅ Nginx高性能反向代理 + SSL证书加密
✅ Systemd服务规范化管理
✅ 生产级备份与故障排查方案

后续可探索:存储池管理、虚拟机模板制作、自动快照策略及API集成开发,构建完整的私有云管理平台。


9. 参考#

  1. WebVirtMgr 官方GitHub
  2. Libvirt 远程TCP/SSH连接文档
  3. Nginx WebSocket代理配置
  4. Let's Encrypt 官网