KVMをWebから操作できるようにする(WebVirtMgr)

# KVMをWebから操作できるようにする(WebVirtMgr)

![20170105195511.png](https://qiita-image-store.s3.amazonaws.com/0/46188/6eebf48a-dc5e-19eb-16d6-8f5c55974a62.png)

我が家では自宅で使用するサーバや、検証のための環境をKVMを使用して作っています。
しかし、今までは仮想マシンを操作するために、ハイパーバイザにログインしてコマンドを打たなければ行けない状況で若干面倒でした。
そこで、Webからそれらの操作を行えるものを探していたのですが、[WebVirtMgr](https://github.com/retspen/webvirtmgr)が使いやすくていいのではないかと思い、インストールしてみました。

## 環境
**OS:** CentOS 7.1 (virtによるKVM環境構築済み)
※ KVM環境に関しては [CentOS7上にKVM環境を構築する(CUI環境)](http://qiita.com/jimaoka/items/d528a7f55e832982c193) を参照

## セットアップ手順
[Install WebVirtMgr](https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr)を参照してインストールしてみます。

### 動作に必要なアプリケーションをインストール
```bash
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
$ sudo yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
$ sudo yum -y install gcc python-devel
$ sudo pip install numpy
```

### gitからwebvirtmgrをダウンロードし、初期設定を行う

```bash
### gitからクローンする
$ git clone git://github.com/retspen/webvirtmgr.git
$ cd webvirtmgr
 
### 必要モジュールのインストール
$ sudo pip install -r requirements.txt
 
### 初期設定
$ ./manage.py syncdb
...
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'username'):
Email address: hogehoge@yahaoo.co.jp
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)
 
### staticファイルの作成
$ ./manage.py collectstatic
WARNING:root:No local_settings file found.

You have requested to collect static files at the destination
location as specified in your settings.

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes
```

### nginxの設定を行う

```sh
### webvirtmgrを移動
$ sudo mv webvirtmgr /var/www
$ sudo chown -R nginx:nginx /var/www

### nginxのプロキシを設定
$ sudo vim /etc/nginx/conf.d/webvirtmgr.conf
server {
    listen 80 default_server;

    server_name $hostname;
    #access_log /var/log/nginx/webvirtmgr_access_log; 

    location /static/ {
        root /var/www/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;
    }
}

### デフォルトページ部分をコメントアウトする
$ sudo vim /etc/nginx/nginx.conf
#    server {
#        listen       80 default_server;
#        server_name  localhost;
#        root         /usr/share/nginx/html;
#
#        #charset koi8-r;
#
#        #access_log  /var/log/nginx/host.access.log  main;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        # redirect server error pages to the static page /40x.html
#        #
#        error_page  404              /404.html;
#        location = /40x.html {
#        }
#
#        # redirect server error pages to the static page /50x.html
#        #
#        error_page   500 502 503 504  /50x.html;
#        location = /50x.html {
#        }
#    }

### nginxの再起動
$ sudo service nginx restart
```

### supervisorの設定

8000/tcpでバックグラウンド動作するように設定を行っていきます。

```sh
### 末尾に追加する
$ sudo vim /etc/supervisord.conf
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx

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

### 再起動
$ sudo service supervisord restart
```

### Webページの確認
ここまでくると、http://hostnameでログイン画面が確認できると思います。
(うまくいかない場合はSELinuxの無効化や、ファイアウォールの設定を確認)

![20160508222517.png](https://qiita-image-store.s3.amazonaws.com/0/46188/1aa206bc-b47c-bb97-1346-fa5e34ed1f7e.png)

## ハイパーバイザを追加
Webインターフェース上から、操作する対象のハイパーバイザを追加することができます。（今回はローカル）
ハイパーバイザへの接続方法はTCP, SSH, TLS, Socketがあるようですが、SSHで試してみます。
[Setup SSH Authorization](https://github.com/retspen/webvirtmgr/wiki/Setup-SSH-Authorization)を参考に設定して行きます。

![20160508223211.png](https://qiita-image-store.s3.amazonaws.com/0/46188/33a7d318-2ed0-cd5c-c746-4e0046154aa8.png)

```sh
### nginxユーザに入る
$ sudo su - nginx -s /bin/bash

### 鍵の作成(名前はid_rsaでよい)
[nginx]$ ssh-keygen -b 4096
[nginx]$ touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
[nginx]$ chmod 0600 ~/.ssh/config
[nginx]$ exit

### webvirtmgrユーザを追加
$ sudo adduser webvirtmgr

### パスワード設定
$ sudo passwd webvirtmgr

### libvirtグループに追加
$ sudo usermod -G libvirt -a webvirtmgr

### nginxユーザに入る
$ sudo su - nginx -s /bin/bash

###  鍵を送信(他の方法でもよい)
[nginx]$ ssh-copy-id webvirtmgr@qemu-kvm-libvirt-host
```

Webインターフェースから、 [Add Connection] -> [SSH Connections] を選択して、先ほどの情報を入力します。

![20160508224452.png](https://qiita-image-store.s3.amazonaws.com/0/46188/a080daaa-f2ab-77bf-eee5-889c6d7c50b2.png)

うまくいくと、下記のようにConnectionsに追加され、Web上からの管理ができるようになっています。
元々コマンドライン経由でゲストマシンを幾つか作っていたので、元からホストが表示されています。

![20160508224720.png](https://qiita-image-store.s3.amazonaws.com/0/46188/03cd4da6-a590-f5bd-0c3b-a2d67c7db857.png)

![20160508230857.png](https://qiita-image-store.s3.amazonaws.com/0/46188/cdc1859c-24eb-abbe-5c0f-75cbe6712601.png)

![20160508230903.png](https://qiita-image-store.s3.amazonaws.com/0/46188/1debc94d-57a6-d6a2-de8b-be616b9bb0ae.png)

## インスタンスの作成

インストール用のメディアをダウンロードしてきます。（今回はCentOS7-minimal）

```sh
### Centos7(minimal)のダウンロード
$ sudo -u nginx wget -O /var/www/webvirtmgr/images/CentOS-7-x86_64-Minimal-1511.iso http://ftp.nara.wide.ad.jp/pub/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
```

終わったら、対象のハイパーバイザ → "Storages" → "New Storage" ボタンを押します。

![20160522221822.png](https://qiita-image-store.s3.amazonaws.com/0/46188/d4ce72f7-77b9-5bce-990f-450de6d94839.png)

出てきたウィンドウの "ISO" タブを押すと、デフォルトで /var/www/webvirtmgr/images が指定されているのでそのまま作成します。

![20160522221834.png](https://qiita-image-store.s3.amazonaws.com/0/46188/fd9f3e56-f861-175e-2619-823c75c50294.png)

その後、"New Instance"ボタンから適当なインスタンスを作成し、”Settings” → "Media" タブを選択すると、先ほどダウンロードしたisoファイルが選択されているはずなので、"Connect" ボタンで取り付けます。

![20160522222341.png](https://qiita-image-store.s3.amazonaws.com/0/46188/1dc1180c-95de-598a-bbac-fda234b73af7.png)

その後 "Power" → "Start" でパワーオン

![20160522231850.png](https://qiita-image-store.s3.amazonaws.com/0/46188/ee363708-bc47-319f-638d-be8bb64e6867.png)

"Access" → "Console" → "Console" ボタンを押すとホストに接続される(はず)ので、ポチポチとインストール作業を進めればインストール完了です。

![20160522232207.png](https://qiita-image-store.s3.amazonaws.com/0/46188/55a8d41a-6081-af98-655d-71280a0b5c4c.png)

## 所感

セットアップが簡単でUIもある程度整っているので、気に入っています。
何より、今までコマンド経由だったものが、Webから操作できるようになって非常に楽になっています。

--

この投稿は、以前にブログに書いたものと同様の内容になります。
http://jimaoka.hatenablog.jp/entry/WebVirtMgr