Ваш собственный облачный центр виртуализации (WebVirtMgr умер! Да здравствует WebVirtCloud panel!)

by Anton Chernousov aka GITA-DEV


Опубликовано: 02 Июн 2018 (последние правки 2 недели, 3 дня)


Ваш собственный облачный центр виртуализации (WebVirtMgr умер! Да здравствует WebVirtCloud panel!)

Только я хотел рассказывать о одном довольно старом внедрении Web-сервиса управления парком виртуальных машин на базе полностью открытых решений, как оказалось что проект WebVirtMgr был закрыт и теперь существует в своей новой ипостаси уже с модной приставкой Cloud. Итак друзья мои, сегодня я буду устанавливать и настраивать WebVirtCloud panel.

Как я уже сказал во вступительном слове к статье, проект WebVirtMgr больше не существует, о чем написано в его официальной репе на гитхаб https://github.com/retspen/webvirtmgr и последние каммиты от разработчика были два года назад.

New project like WebVirtMgr with User Management and Filesystem management - WebVirtCloud

Новый проект, который теперь называется WebVirtCloud panel вы можете найти по адресу https://github.com/retspen/webvirtcloud и как вы видите, проект относительно активно развивается, что не может не радовать.

Новый Webvirtmanager

Установка WebVirtCloud panel

Так как WebVirtCloud panel, это достаточно типовое Python web-приложение, то и установка его будет довольно типовой:

  • Ставим необходимые библиотеки и пакеты
  • Создаем каталог для хранения нашего web-приложения и загружаем исходные коды с github
  • Проводим тестовый запуск
  • Настраиваем окружение для запуска в production

Устанавливаем необходимые пакеты Ubuntu Linux:

# apt-get -y install git python-virtualenv python-dev libxml2-dev libvirt-dev \
  zlib1g-dev nginx supervisor libsasl2-modules gcc pkg-config

Загружаем web-приложение с GitHub:

# mkdir /srv/
# cd /srv/
# git clone https://github.com/retspen/webvirtcloud
# cd ./webvirtcloud/
# cp webvirtcloud/settings.py.template webvirtcloud/settings.py

Подготавливаем окружение для запуска Django-приложения:

# pip install -r ./conf/requirements.txt
# ./manage.py migrate

Вы конечно можете изменить шаблон конфигурации и настроить веб-приложение на использование сторонней базы данных, например Postgresql в том случае, когда у вас большая ферма виртуальных машин и хостов. И еще, я специально не использовал виртуальное окружение, так как мое web-приложение единственное на сервере, если вы хотите использовать виртуальное окружение для запуска web-приложение, то вы можете руководствоваться моей статьей "Создание и публикация Django-приложения (Часть первая, создание типового Django-приложения)".

В шаблоне конфигурации отсутствует параметр SECRET_KEY, для его генерации можно использовать следующий код:

import random, string 
haystack = string.ascii_letters + string.digits + string.punctuation 
print(''.join([random.SystemRandom().choice(haystack) for _ in range(50)]))

Тестовый запуск и перенос в Production-окружение

Для запуска Django-приложения в режиме тестирования просто выполните команду:

# python ./manage.py runserver 0.0.0.0:8000

Перейдите на сервис подключившись по адресу http://<адрес сервера>:8000

Авторизация на сервисе управления KVM

Вам будет предложено окно авторизации на сервисе, но вы еще не создали ни одного пользователя и для создания пользователя используйте команду:

# ./manage.py createsuperuser

Попробуйте авторизоваться с созданным аккаунтом и если авторизация прошла успешно, то можем переходить к запуску в production-режиме и для запуска в Prod-режиме автор рекомендует использовать Supervisord. Просто скопируйте предложенную конфигурацию и измените владельца файлов, так как работа сервиса будет осуществляться от имени штатного непривилегированного пользователя www-data:

# cp conf/supervisor/webvirtcloud.conf /etc/supervisor/conf.d
# chown -R www-data:www-data /srv/webvirtcloud/

Отредактируйте скопированный файл конфигурации supervisord приведя его к следующему виду:

[program:webvirtcloud] 
command=/usr/local/bin/gunicorn webvirtcloud.wsgi:application -c /srv/webvirtcloud/gunicorn.conf.py 
directory=/srv/webvirtcloud 
user=www-data 
autostart=true 
autorestart=true 
redirect_stderr=true 
 
[program:novncd] 
command=/usr/bin/python2 /srv/webvirtcloud/console/novncd 
directory=/srv/webvirtcloud 
user=www-data 
autostart=true 
autorestart=true 
redirect_stderr=true

Перезапустите Supervisord:

# /etc/init.d/supervisor restart

Теперь нам остается лишь настроить Nginx для доступа к нашему сервису из сети Internet.

Настройка Nginx для организации доступа к системе управления из сети Internet

Я немного доработал конфигурационный файл который шел в комплекте с WebVirtCloud для поддержки Let's encrypt:

server { 
    listen 80; 
    server_name virtmanager.gita-dev.ru; 
    return 301 https://virtmanager.gita-dev.ru$request_uri; 
 
} 
 
server { 
    listen 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/virtmanager.gita-dev.ru/fullchain.pem; # managed by Certbot 
    ssl_certificate_key /etc/letsencrypt/live/virtmanager.gita-dev.ru/privkey.pem; # managed by Certbot 
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 
 
    server_name virtmanager.gita-dev.ru; 
    access_log /var/log/nginx/webvirtcloud-access_log;  
 
    location /static/ { 
        root /srv/webvirtcloud/; 
        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; 
    } 
}

Не забывайте настроить проброс порта 6080 или его проксирование при помощи Nginx, или в противном случае у вас не будет работать виртуальная консоль к серверу. На этом пока все, я думаю попозже сделаю более подробный обзор самого сервиса и расскажу как с ним работать и что там появилось нового.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.