2020-10-08 17:44:07 +00:00
[![Gitpod ready-to-code ](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod )](https://gitpod.io/#https://github.com/retspen/webvirtcloud)
2020-08-21 15:38:10 +00:00
# WebVirtCloud
2020-07-17 11:00:11 +00:00
###### Python3 & Django 2.2
2015-05-21 12:07:55 +00:00
## Features
2019-11-15 13:35:02 +00:00
* QEMU/KVM Hypervisor Management
* QEMU/KVM Instance Management - Create, Delete, Update
* Hypervisor & Instance web based stats
* Manage Multiple QEMU/KVM Hypervisor
* Manage Hypervisor Datastore pools
* Manage Hypervisor Networks
* Instance Console Access with Browsers
* Libvirt API based web management UI
2020-09-25 12:57:17 +00:00
* User Based Authorization and Authentication
2015-05-27 13:41:08 +00:00
* User can add SSH public key to root in Instance (Tested only Ubuntu)
* User can change root password in Instance (Tested only Ubuntu)
2018-06-13 08:50:36 +00:00
* Supports cloud-init datasource interface
2015-05-27 13:41:08 +00:00
### Warning!!!
2015-06-03 05:18:47 +00:00
How to update < code > gstfsd< / code > daemon on hypervisor:
2015-05-27 13:41:08 +00:00
```bash
wget -O - https://clck.ru/9VMRH | sudo tee -a /usr/local/bin/gstfsd
sudo service supervisor restart
```
2015-03-27 14:17:28 +00:00
2020-08-21 15:38:10 +00:00
## Description
2015-03-27 14:17:28 +00:00
2015-08-19 13:16:32 +00:00
WebVirtCloud is a virtualization web interface for admins and users. It can delegate Virtual Machine's to users. A noVNC viewer presents a full graphical console to the guest domain. KVM is currently the only hypervisor supported.
2015-03-27 14:17:28 +00:00
2020-08-21 15:38:10 +00:00
## Quick Install with Installer (Beta)
2020-09-25 12:57:17 +00:00
2020-08-21 15:38:10 +00:00
Install an OS and run specified commands. Installer supported OSes: Ubuntu 18.04, Debian 10, Centos/OEL/RHEL 8.
It can be installed on a virtual machine, physical host or on a KVM host.
2020-09-25 12:57:17 +00:00
2020-08-21 15:38:10 +00:00
```bash
wget https://raw.githubusercontent.com/retspen/webvirtcloud/master/install.sh
chmod 744 install.sh
# run with sudo or root user
./install.sh
```
## Manual Installation
2020-09-25 12:57:17 +00:00
2018-01-24 08:37:53 +00:00
### Generate secret key
2020-09-25 12:57:17 +00:00
2018-01-24 08:37:53 +00:00
You should generate SECRET_KEY after cloning repo. Then put it into webvirtcloud/settings.py.
2020-04-17 11:02:18 +00:00
```python3
2018-01-24 08:37:53 +00:00
import random, string
haystack = string.ascii_letters + string.digits + string.punctuation
print(''.join([random.SystemRandom().choice(haystack) for _ in range(50)]))
```
2020-03-16 13:59:45 +00:00
### Install WebVirtCloud panel (Ubuntu 18.04+ LTS)
2015-03-27 14:17:28 +00:00
```bash
2020-03-16 13:59:45 +00:00
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
2015-03-27 14:17:28 +00:00
git clone https://github.com/retspen/webvirtcloud
2015-05-08 07:43:43 +00:00
cd webvirtcloud
2018-01-24 08:37:53 +00:00
cp webvirtcloud/settings.py.template webvirtcloud/settings.py
# now put secret key to webvirtcloud/settings.py
2015-03-27 14:17:28 +00:00
sudo cp conf/supervisor/webvirtcloud.conf /etc/supervisor/conf.d
sudo cp conf/nginx/webvirtcloud.conf /etc/nginx/conf.d
cd ..
2015-06-16 05:49:30 +00:00
sudo mv webvirtcloud /srv
sudo chown -R www-data:www-data /srv/webvirtcloud
2015-06-27 13:07:56 +00:00
cd /srv/webvirtcloud
2020-03-16 13:59:45 +00:00
virtualenv -p python3 venv
2015-06-27 13:07:56 +00:00
source venv/bin/activate
pip install -r conf/requirements.txt
2020-04-17 11:02:18 +00:00
python3 manage.py migrate
2015-06-27 13:38:10 +00:00
sudo chown -R www-data:www-data /srv/webvirtcloud
2015-06-29 04:50:50 +00:00
sudo rm /etc/nginx/sites-enabled/default
2015-03-27 14:17:28 +00:00
```
Restart services for running WebVirtCloud:
```bash
sudo service nginx restart
sudo service supervisor restart
```
2015-03-27 14:23:49 +00:00
2015-07-31 21:12:53 +00:00
Setup libvirt and KVM on server
2015-03-27 14:23:49 +00:00
```bash
2015-05-19 19:39:47 +00:00
wget -O - https://clck.ru/9V9fH | sudo sh
2015-03-27 14:23:49 +00:00
```
2020-09-25 12:57:17 +00:00
2019-12-13 13:47:51 +00:00
Done!!
Go to http://serverip and you should see the login screen.
2020-03-16 13:59:45 +00:00
### Install WebVirtCloud panel (CentOS8/OEL8)
2015-07-31 21:12:53 +00:00
2015-07-31 21:16:53 +00:00
```bash
2020-03-16 13:59:45 +00:00
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
2015-07-31 21:12:53 +00:00
```
#### Creating directories and cloning repo
2015-07-31 21:16:53 +00:00
```bash
sudo mkdir /srv & & cd /srv
sudo git clone https://github.com/retspen/webvirtcloud & & cd webvirtcloud
2018-01-24 08:37:53 +00:00
cp webvirtcloud/settings.py.template webvirtcloud/settings.py
# now put secret key to webvirtcloud/settings.py
2020-03-16 13:59:45 +00:00
# create secret key manually or use that command
sudo sed -r "s/SECRET_KEY = ''/SECRET_KEY = '"`python3 /srv/webvirtcloud/conf/runit/secret_generator.py`"'/" -i /srv/webvirtcloud/webvirtcloud/settings.py
2015-07-31 21:12:53 +00:00
```
#### Start installation webvirtcloud
2020-09-25 12:57:17 +00:00
2020-08-21 15:38:10 +00:00
```bash
2020-03-16 13:59:45 +00:00
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
2015-07-31 21:12:53 +00:00
```
#### Configure the supervisor for CentOS
2020-09-25 12:57:17 +00:00
Add the following after the [include] line (after **files = ...** actually):
2015-07-31 21:16:53 +00:00
```bash
sudo vim /etc/supervisord.conf
2015-07-31 21:12:53 +00:00
[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]
2020-03-16 13:59:45 +00:00
command=/srv/webvirtcloud/venv/bin/python3 /srv/webvirtcloud/console/novncd
2015-07-31 21:12:53 +00:00
directory=/srv/webvirtcloud
user=nginx
autostart=true
autorestart=true
redirect_stderr=true
```
#### Edit the nginx.conf file
2020-09-25 12:57:17 +00:00
2015-07-31 21:12:53 +00:00
You will need to edit the main nginx.conf file as the one that comes from the rpm's will not work. Comment the following lines:
2020-09-25 12:57:17 +00:00
```bash
2015-07-31 21:12:53 +00:00
# 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 {
# }
# }
}
```
Also make sure file in ** /etc/nginx/conf.d/webvirtcloud.conf** has the proper paths:
2020-09-25 12:57:17 +00:00
```bash
2015-10-29 08:19:10 +00:00
upstream gunicorn_server {
#server unix:/srv/webvirtcloud/venv/wvcloud.socket fail_timeout=0;
server 127.0.0.1:8000 fail_timeout=0;
}
2015-07-31 21:12:53 +00:00
server {
listen 80;
server_name servername.domain.com;
access_log /var/log/nginx/webvirtcloud-access_log;
location /static/ {
root /srv/webvirtcloud;
expires max;
}
location / {
2015-10-29 08:19:10 +00:00
proxy_pass http://gunicorn_server;
2015-07-31 21:12:53 +00:00
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;
2020-11-06 11:30:41 +00:00
proxy_connect_timeout 1800;
proxy_read_timeout 1800;
proxy_send_timeout 1800;
2015-07-31 21:12:53 +00:00
client_max_body_size 1024M;
}
}
```
Change permissions so nginx can read the webvirtcloud folder:
2015-07-31 21:16:53 +00:00
```bash
sudo chown -R nginx:nginx /srv/webvirtcloud
2015-07-31 21:12:53 +00:00
```
2015-08-01 06:42:47 +00:00
Change permission for selinux:
2015-07-31 21:16:53 +00:00
```bash
2015-08-01 06:42:47 +00:00
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/webvirtcloud(/.*)"
2020-03-16 13:59:45 +00:00
sudo setsebool -P httpd_can_network_connect on -P
2015-07-31 21:12:53 +00:00
```
2020-03-16 13:59:45 +00:00
Add required user to the kvm group(if you not install with root):
2020-09-25 12:57:17 +00:00
2015-07-31 21:16:53 +00:00
```bash
2020-03-16 13:59:45 +00:00
sudo usermod -G kvm -a < username >
```
Allow http ports on firewall:
2020-09-25 12:57:17 +00:00
2020-03-16 13:59:45 +00:00
```bash
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
2015-07-31 21:12:53 +00:00
```
Let's restart nginx and the supervisord services:
2020-09-25 12:57:17 +00:00
2015-07-31 21:16:53 +00:00
```bash
sudo systemctl restart nginx & & systemctl restart supervisord
2015-07-31 21:12:53 +00:00
```
And finally, check everything is running:
2020-09-25 12:57:17 +00:00
2015-07-31 21:16:53 +00:00
```bash
sudo supervisorctl status
2018-08-08 08:27:39 +00:00
gstfsd RUNNING pid 24662, uptime 6:01:40
novncd RUNNING pid 24661, uptime 6:01:40
webvirtcloud RUNNING pid 24660, uptime 6:01:40
2015-07-31 21:12:53 +00:00
```
2015-12-22 14:04:23 +00:00
#### Apache mod_wsgi configuration
2020-09-25 12:57:17 +00:00
```bash
2015-12-22 14:04:23 +00:00
WSGIDaemonProcess webvirtcloud threads=2 maximum-requests=1000 display-name=webvirtcloud
2018-06-13 09:20:39 +00:00
WSGIScriptAlias / /srv/webvirtcloud/webvirtcloud/wsgi_custom.py
2015-12-22 14:04:23 +00:00
```
2015-08-01 06:42:47 +00:00
#### Install final required packages for libvirtd and others on Host Server
2020-09-25 12:57:17 +00:00
2015-08-01 06:42:47 +00:00
```bash
wget -O - https://clck.ru/9V9fH | sudo sh
```
2015-07-31 21:12:53 +00:00
Done!!
Go to http://serverip and you should see the login screen.
2020-03-16 13:59:45 +00:00
### Alternative running novncd via runit(Debian)
2020-09-25 12:57:17 +00:00
2018-09-10 09:27:05 +00:00
Alternative to running nonvcd via supervisor is runit.
2020-09-25 12:57:17 +00:00
On Debian systems install runit and configure novncd service:
```bash
2018-09-10 09:27:05 +00:00
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
```
2015-03-27 14:32:33 +00:00
### Default credentials
2020-09-25 12:57:17 +00:00
```html
2015-03-27 14:32:33 +00:00
login: admin
password: admin
2020-09-25 12:57:17 +00:00
```
2015-05-18 19:00:30 +00:00
2018-08-31 13:26:42 +00:00
### Configuring Compute SSH connection
2020-09-25 12:57:17 +00:00
2018-08-31 13:26:42 +00:00
This is a short example of configuring cloud and compute side of the ssh connection.
On the webvirtcloud machine you need to generate ssh keys and optionally disable StrictHostKeyChecking.
2020-09-25 12:57:17 +00:00
```bash
2018-08-31 13:26:42 +00:00
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
```
You need to put cloud public key into authorized keys on the compute node. Simpliest way of doing this is to use ssh tool from the webvirtcloud server.
2020-09-25 12:57:17 +00:00
```bash
2018-08-31 13:26:42 +00:00
sudo -u www-data ssh-copy-id root@compute1
```
2020-05-28 05:36:49 +00:00
### Host SMBIOS information is not available
If you see warning
2020-09-25 12:57:17 +00:00
```bash
2020-05-28 05:36:49 +00:00
Unsupported configuration: Host SMBIOS information is not available
```
2020-09-25 12:57:17 +00:00
2020-05-28 05:36:49 +00:00
Then you need to install `dmidecode` package on your host using your package manager and restart libvirt daemon.
Debian/Ubuntu like:
2020-09-25 12:57:17 +00:00
```bash
sudo apt-get install dmidecode
sudo service libvirt-bin restart
2020-05-28 05:36:49 +00:00
```
2020-09-25 12:57:17 +00:00
2020-05-28 05:36:49 +00:00
Arch Linux
2020-09-25 12:57:17 +00:00
```bash
sudo pacman -S dmidecode
systemctl restart libvirtd
2020-05-28 05:36:49 +00:00
```
2018-06-13 08:50:36 +00:00
### Cloud-init
2020-09-25 12:57:17 +00:00
2018-06-13 08:50:36 +00:00
Currently supports only root ssh authorized keys and hostname. Example configuration of the cloud-init client follows.
2020-09-25 12:57:17 +00:00
```bash
2018-06-13 08:50:36 +00:00
datasource:
OpenStack:
metadata_urls: [ "http://webvirtcloud.domain.com/datasource" ]
```
2020-06-26 13:31:41 +00:00
### Reverse-Proxy
2020-09-25 12:57:17 +00:00
2020-07-17 11:00:11 +00:00
Edit WS_PUBLIC_PORT at settings.py file to expose redirect to 80 or 443. Default: 6080
2020-09-25 12:57:17 +00:00
```bash
2020-06-26 13:31:41 +00:00
WS_PUBLIC_PORT = 80
```
2020-08-21 15:38:10 +00:00
## How To Update
2020-09-25 12:57:17 +00:00
2015-05-18 19:00:30 +00:00
```bash
2020-03-16 13:59:45 +00:00
# Go to Installation Directory
cd /srv/webvirtcloud
source venv/bin/activate
2015-05-27 13:41:08 +00:00
git pull
2020-03-16 13:59:45 +00:00
pip3 install -U -r conf/requirements.txt
python3 manage.py migrate
2015-05-27 13:41:08 +00:00
sudo service supervisor restart
2015-05-18 19:08:14 +00:00
```
2020-07-13 09:33:09 +00:00
### Running tests
2020-09-25 12:57:17 +00:00
2020-07-13 09:33:09 +00:00
Server on which tests will be performed must have libvirt up and running.
It must not contain vms.
It must have `default` storage which not contain any disk images.
It must have `default` network which must be on.
Setup venv
2020-09-25 12:57:17 +00:00
2020-07-13 09:33:09 +00:00
```bash
python -m venv venv
source venv/bin/activate
pip install -r conf/requirements.txt
```
2020-09-25 12:57:17 +00:00
2020-07-13 09:33:09 +00:00
Run tests
2020-09-25 12:57:17 +00:00
2020-07-13 09:33:09 +00:00
```bash
2020-07-17 11:00:11 +00:00
python manage.py test
2020-07-13 09:33:09 +00:00
```
2020-08-21 15:38:10 +00:00
## Screenshots
2020-09-25 12:57:17 +00:00
2019-03-14 08:54:30 +00:00
Instance Detail:
2020-07-21 13:06:48 +00:00
< img src = "doc/images/instance.PNG" width = "96%" align = "center" / >
2019-02-15 12:31:05 +00:00
Instance List:< / br >
2020-07-21 13:06:48 +00:00
< img src = "doc/images/grouped.PNG" width = "43%" / >
< img src = "doc/images/nongrouped.PNG" width = "53%" / >
2019-02-15 12:31:05 +00:00
Other: < / br >
2020-07-21 13:06:48 +00:00
< img src = "doc/images/hosts.PNG" width = "47%" / >
< img src = "doc/images/log.PNG" width = "49%" / >
2015-10-02 10:51:54 +00:00
2020-08-21 15:38:10 +00:00
## License
2015-10-02 10:51:54 +00:00
WebVirtCloud is licensed under the [Apache Licence, Version 2.0 ](http://www.apache.org/licenses/LICENSE-2.0.html ).