Escrito el 3 diciembre 2014 por Luis Ignacio Díaz Martínez
Tabla de contenidos
Ya he hablado alguna vez de LibVirt y su sistema de virtualización. Personalmente lo prefiero por ser software libre (al completo) conjuntamente con KVM.
Existen varias aplicaciones para poder gestionar las máquinas virtuales, así como sus recursos. En este artículo, nos centraremos en ‘WebVirtMGR’, una herramienta que gestiona la librería LibVirt desde entorno web! de forma sencilla, y muy visual.
Como ya es habitual en mi… he utiliza una distribución Debian, actualmente en su versión Wheezy (7.7). El sistema está instalado bajo una infraestructura de virtualización (KVM) como «máquina virtual«.
Tengo que puntualizar que esta no es una buena practica, ya que si cae el entorno virtual no tendremos la interfaz para poder gestionarlo. Por ello, tendría que ir instalado en una máquina física, no bajo una máquina virtual.
Necesitaremos tener acceso «root» durante el procedimiento de instalación y configuración.
A continuación procederemos a instalar ‘WebVirtMGR’ así como las dependencias que este necesita.
Empezamos por lo básico… los paquetes!
1 2 |
apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor nginx |
Durante la instalación de los paquetes nos preguntará sobre la configuración de «nova» y «nova-common» a lo que tendremos que contestar en ambos «Si». La base de datos que utilizará «nova» será de tipo «sqlite3».
A continuación descargaremos el código fuente de ‘WebVirtMGR’ desde GitHub.
1 2 3 |
cd $HOME git clone git://github.com/retspen/webvirtmgr.git cd webvirtmgr |
Ahora podremos continuar…
Primero de todo será instalar los módulos de Python que necesita el software para funcionar.
1 |
pip install -r requirements.txt |
Tendremos que vigilar que no retorne ningún error (los warnings podemos perdonarlos). Si retorna algún fallo tendríamos que comprobarlo y solventarlo.
Tan solo son dos sencillos pasos…
Primero de todo ejecutaremos el script de configuración de la base de datos…
1 |
./manage.py syncdb |
La ejecución del script nos devolverá lo siguiente…
1 2 3 4 5 6 7 8 9 10 |
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 'root'): root Email address: luigdima@correo.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 6 object(s) from 1 fixture(s) |
Como podemos observar hemos tenido que completar algunos datos… como el «usuario», «correo electrónico» y el «password» que utilizaremos.
Ahora, lanzaremos el siguiente script…
1 2 |
./manage.py collectstatic |
Si todo ha ido bien tendría que devolver lo siguiente…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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 Copying '/home/usuario/webvirtmgr/webvirtmgr/static/img/desc.gif' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/img/bg.gif' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/img/favicon.ico' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/img/asc.gif' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/fonts/glyphicons-halflings-regular.svg' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/fonts/glyphicons-halflings-regular.eot' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/fonts/glyphicons-halflings-regular.woff' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/fonts/glyphicons-halflings-regular.ttf' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/css/bootstrap.min.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/css/signin.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/css/bootstrap-multiselect.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/css/webvirtmgr.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/css/table-sort.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/Chart.min.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/bootstrap.min.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/jquery-migrate-1.2.1.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/infrastructure.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/jquery.tablesorter.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/bootstrap-multiselect.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/jquery-1.10.2.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/input.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/black.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/Orbitron700.ttf' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/rfb.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/display.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/ui.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/playback.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/base64.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/Orbitron700.woff' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/websock.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/base.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/des.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/blue.css' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/webutil.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/util.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/jsunzip.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/logo.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/chrome-app/tcp-client.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/web-socket-js/WebSocketMain.swf' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/web-socket-js/web_socket.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/web-socket-js/swfobject.js' Copying '/home/usuario/webvirtmgr/webvirtmgr/static/js/novnc/web-socket-js/README.txt' 42 static files copied. |
Ya tenemos nuestro software instalado! sólo faltará configurar el resto de paquetes…
Nginx es un servidor web. Este nos proporcionará el acceso a la aplicación desde el protocolo HTTP.
Primero de todo, crearemos y copiaremos la aplicación al directorio de acceso público.
1 2 3 |
cd .. mkdir /var/www mv webvirtmgr /var/www/ |
Ahora añadiremos el fichero de configuración..
1 |
nano /etc/nginx/conf.d/webvirtmgr.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
server { listen 80 default_server; server_name $hostname; #access_log /var/log/nginx/webvirtmgr_access_log; location /static/ { root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var 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 $remote_addr; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; client_max_body_size 1024M; } } |
Por defecto, la aplicación trabaja en el puerto 8000… en cambio Nginx redirecciona el tráfico hacía el 80 facilitando así el acceso al servicio.
Por último, para amplicar los cambios reiniciamos el servicio.
1 |
service nginx restart |
Continuamos con el retoque final…
‘Supervisor’ nos ayudará a revisar el estado del proceso. Se encarga de ejecutar la aplicación de forma automática y a su vez de controlar que no se caiga el proceso.
Queremos que el software de control VNC se ejecute en la aplicación de ‘WebVirtMGR’ para poder gestionar las máquinas de forma visual y remotamente.
Primero de todo, paramos el proceso de «novnc» para poder eliminarlo del inicio.
1 2 3 4 |
service novnc stop update-rc.d -f novnc remove rm /etc/init.d/novnc chown -R www-data:www-data /var/www/webvirtmgr |
A continuación creamos el archivo de configuración en el Supervisor…
1 |
nano /etc/supervisor/conf.d/webvirtmgr.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[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 stdout_logfile=/var/log/supervisor/webvirtmgr.log redirect_stderr=true user=www-data [program:webvirtmgri-novnc] command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-novnc directory=/var/www/webvirtmgr autostart=true autorestart=true stdout_logfile=/var/log/supervisor/webvirtmgr-nonvc.log redirect_stderr=true user=www-data |
Para cargar la configuración reiniciaremos el proceso!
1 2 |
service supervisor stop service supervisor start |
Ahora, deberíamos de ser capaces de conectarnos a la consola de nuestras máquinas virtuales.
Para conectarnos a nuestro gestor tan solo tenemos que introducir la dirección de IP de la máquina donde hemos instalado la aplicación en nuestro navegador…
1 |
http://direccionipmaquina/ |
Ahora ya todo depende de ti! quedará configurar las conexiones en ‘WebVirtMGR’.
La única referencia que he utilizado ha sido la Wiki del propio proyecto.