KVM虚拟化管理平台WebVirtMgr部署 - 完整记录(2):配置与优化
在前一篇文章中,我们完成了WebVirtMgr的基础环境搭建与组件安装。本文将深入进行核心配置,包括WebVirtMgr与KVM主机的安全连接、Web界面访问优化(Nginx反向代理 + SSL)、日常运维命令及常见故障排查。本指南遵循最小权限原则和安全最佳实践,适用于生产环境部署。
目录#
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'] # 允许访问的域名或IP1.2 同步数据库并收集静态资源#
python3 manage.py migrate
python3 manage.py collectstatic
# 提示“覆盖静态文件”时输入 yes2. 添加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-ip2.3 Web界面添加主机#
- 登录 WebVirtMgr:
https://your-server:8000 - Servers → Add Server
Hostname: 唯一标识(如 prod-kvm01)
Connection Type: SSH
Username: webvirtmgr-admin
SSH Port: 22(若非默认)
Hostname/IP: KVM宿主机真实IP
- Test Connection → Save
验证连接状态:
- 成功:
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 nginx4. 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 备份策略#
- 数据库备份
mysqldump -u root -p webvirtmgr > webvirtmgr_$(date +%F).sql - 配置文件备份
/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 webvirtmgr7. 常见问题排查#
❗ 连接主机超时(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集成开发,构建完整的私有云管理平台。