WebVirtCloud - виртуальные машины на вашем сервере
Мы не зарабатываем на Вас. Просто подпишитесь на наш канал ТГ и получайте эксклюзивную информацию о нодах и не только, раньше всех! Вокруг Крипты и Youtube👍
Благодарность Илья Nixon за подготовку материала
Данный гайд не является чем-то сверхъестественным, скорее наоборот упрощенная инструкция рассчитанная на СНГ сегмент для поднятия виртуальных машин на Вашем железе. От мала до велика, от чайников до более менее "продвинутых" пользователей.
Официальный гайд на гитхаб: https://github.com/retspen/webvirtcloud
Данная инструкция является частью одного большого гайда, по поднятию нод-сканеров Forta. И да, гайд будет очень длинным.
Установка будет происходить на Ubuntu 20.04
По моим прикидкам, на 1-ую машину будет до 4-5 виртуальных машин, а на 2-ую до 5-6. Пока будем делать 5+5 с характеристиками 2-4CPU/8-16GB RAM/50GB. Для наших целей более чем достаточно, а почему такой разброс в CPU и RAM вы поймете позже.
Также у меня есть внешний роутер, через который происходит "открытие/закрытие" портов.
Кроме того, я отдельно рассмотрю установку на сервере у хостера.
p.s. В вашем случае сервер может быть другим, например Hetzner AX101 или другое.
Проверка железа на виртуализацию
Прежде чем начать, обновляемся:
sudo apt update
Проверим наше железо на возможность запуска виртуализации
grep -E -c "vmx|svm" /proc/cpuinfo
Если выдало больше 0, значит переходим к следующему шагу
apt-get install cpu-checker -y
kvm-ok
Если выдает нечто подобное, то всё ок, можно переходить к установке.
INFO: /dev/kvm exists KVM acceleration can be used
Установка WebVirtCloud
sudo apt install git virtualenv python3-virtualenv python3-dev \ python3-lxml libvirt-dev zlib1g-dev libxslt1-dev nginx supervisor \ libsasl2-modules gcc pkg-config python3-guestfs libsasl2-dev libldap2-dev \ libssl-dev -y
Копируем git и создаем файл settings.py из шаблона
git clone https://github.com/retspen/webvirtcloud cd webvirtcloud cp webvirtcloud/settings.py.template webvirtcloud/settings.py
Далее необходимо сгенерировать ключ
openssl rand -base64 32
Копируем ключ и записываем его в файл settings.py
sudo nano $HOME/webvirtcloud/webvirtcloud/settings.py
sudo cp conf/supervisor/webvirtcloud.conf /etc/supervisor/conf.d sudo cp conf/nginx/webvirtcloud.conf /etc/nginx/conf.d cd .. sudo mv webvirtcloud /srv sudo chown -R www-data:www-data /srv/webvirtcloud cd /srv/webvirtcloud virtualenv -p python3 venv source venv/bin/activate pip install -r conf/requirements.txt python3 manage.py migrate python3 manage.py collectstatic --noinput sudo chown -R www-data:www-data /srv/webvirtcloud sudo rm /etc/nginx/sites-enabled/default
Перезапускаем ngnix, supervisor
sudo service nginx restart sudo service supervisor restart
Устанавливаем libvirt и KVM на сервер
wget -O - https://bit.ly/36baWUu | sudo sh
Прежде чем начать настраивать непосредственно сервер в WEB-панели, нужно добавить права доступа к файлам
echo "chmod 777 /var/run/libvirt/libvirt-sock" >> ~/.bash_profile source ~/.bash_profile
Работа с панелью
Переходим в браузере по ссылке http://serverip
Появляется окно с авторизацией,
логин: admin
пароль: admin
Если данные манипуляции выполняются на арендованном сервере, то в первую очередь необходимо зайти в наш профиль и поменять пароль
Переходим в настройки(Settings)
Меняем Disk Cahe на None
Меняем Disk IO на Native
Переходим в Computes, жмем Local
Вводим имя, такое же как у нас имя сервера либо localhost
Т.к. у меня fortamain, я его и запишу
Далее переходим внутрь компьюта, нажав на глазок.
Прежде чем продолжить, выполняем на сервере команду для создания одной папки и двух подпапок iso и images
mkdir /home/kvm/ mkdir /home/kvm/{iso,images}
Сразу сохраним образ ubuntu 20.04 на машину, выполняем следующие команды:
cd /home/kvm/iso/ wget https://releases.ubuntu.com/20.04/ubuntu-20.04.5-live-server-amd64.iso
Пока на сервере будет скачиваться образ, продолжим настройки в веб-панели.
Переходим в Storages, жмем плюсик чтобы добавить хранилище
Создаем первое хранилище со следующими настройками
Аналогично следующее хранилище, только вкладка iso
В нем, как раз и будет находится наш образ Ubuntu.
Настройка сети(локально)
В случае если Вы запускаете на локальной машине, то нам необходимо установить бридж и настроить его.
Если же это делается на выделенном сервере у хостера, то делать это не надо, просто пропустите данный шаг.
Еще раз! Данные манипуляции подходят только для установки на локальной машине. Для Hetzner такое делать нельзя! Получите предупреждение от хостера, особенно если смените mac адрес!
Ниже мы рассмотрим оба варианта. Начнем с локальной машины.
Сейчас все делаем с предельной осторожностью, иначе вы потеряете доступ к серверу
sudo apt install bridge-utils
Теперь надо поправить файл 00-installer-config.yaml в папке /etc/netplan/ под Ваше оборудование
/etc/netplan/
Перед тем как начать редактировать config файл, надо запомнить название устройства:
В моем случае enp9s0, который мы запоминаем, а mac-адрес мы подставим либо наш уже имеющийся, либо рандомный
Редактируем файл 00-installer-config.yaml
network: ethernets: enp9s0: dhcp4: false dhcp6: false version: 2 bridges: br0: macaddress: 16:76:1a:3b:be:03 interfaces: - enp9s0 dhcp4: true dhcp6: false parameters: stp: true forward-delay: 4
enp9s0(дважды), macaddress меняем на свои!
Менять я буду вручную в файле через mobaxterm.
Теперь надо применить новые настройки.
sudo netplan apply
Если всё ок, то настройки примутся, если же нет, то мы или потеряем доступ к серверу или же выдаст ошибку.
Далее еще один важный момент. Чтобы наш kvm хост мог осуществлять транзит пакетов через себя, надо это явно разрешить в sysctl. Добавляем в /etc/sysctl.d/99-sysctl.conf новый параметр. Он там уже есть, надо только снять пометку комментария.
net.ipv4.ip_forward=1
Применяем новую настройку ядра.
sudo sysctl -p /etc/sysctl.d/99-sysctl.conf
reboot
В конце манипуляций в разделе interfaces появится наш бридж
Если всё сделано правильно, то сервер перезагрузится и у вас будет доступ к нему. А если не будет доступа к серверу, то поздравляю - бегом переустанавливать систему!
Настройка сети (арендованный сервер)
В случае работы с hetzner, может не запуститься virbr0(virtual bridge), а он нам нужен, для этого выполняем следующие манипуляции
Переходим в наш сервер из раздела Computes
Заходим в раздел Networks и жмем на default
Появится примерно следующего вида страница. У меня virbr0 уже включен, в Вашем случае может быть наоборот. Для этого нажимаем кнопку Start, она будет примерно там, где я указал стрелочкой.
После этого можно переходить к настройке, в самом конце будет инструкция как подключиться к виртуальной машине при помощи "другого" порта
Продолжаем настройку
Машина настроена, пора создать intance
Жмем сверху intances и плюсик справа, потом выбираем нашу машину, жмем chose
Далее оставляем как есть, жмем next
Можно создать свой шаблон, но я буду использовать micro, потом делать для него resize
Жмем плюсик напротив micro(1-ая строка)
Заполняем Name, ну и при желании выбираем Storage, но я оставлю как есть.
Поздравляю, первая виртуальная машина сделана, необходимо ее настроить
Первым делом, заходим в Resize. Указываем настройки процессора и жмем Resize. У меня будут Current:2, Maximum:4.
Вы выбираете для себя необходимое количество.
Исходя из требований и кол-ва виртуальных машин.
Идем опять в Resize и выбираем вкладку Memory. Аналогично CPU я указываю 8gb ram/16gb ram и жму Resize.
Наблюдения: для форты хватит и 8gb/8gb, но не меньше, иначе будет ругаться сканер!
Таким же образом захожу в Resize, вкладка Disk. Указываю 50GB(хотя хватит и 20GB), подтверждаю настройки, нажатием кнопки Resize.
После всех манипуляций сверху мы увидим наши настройки виртуальной машины(ВМ).
Далее переходим в раздел настройки(Settings), подраздел Disk, жмем Mount напротив нашего образа
Далее, в случае если у Вас машина стоит дома или же Вы "поднимаете на локалке", то также необходимо зайти в Settings, подраздел Network и поменять Source на br0, т.е. на наш созданный бридж. Если Вы поднимаете у хостера, то у Вас будет Interface virbr0.
Клонирование виртуальных машин
Теперь чтобы упростить процесс, можно клонировать ВМ. Для этого заходите в раздел Settings. подраздел Clone.
Важное замечание! Делать это нужно до запуска и установки ВМ, во избежание косяков.
Запуск и установка Ubuntu 20.04
Для первого запуска, нам необходимо установить нашу ВМ.
Для тех кто "продвинут" в этом вопросе, могут просто пропустить данный шаг.
Переходим в нашу виртуальную машину(ВМ), жмем кнопку Power On
Далее раздел Access, жмем кнопку консоль. При нажатии на нее будет всплывающее окно с доступом к серверу
Выбираем необходимый нам язык, я же буду по старинке на English.
Язык клавиатуры English (US) в обоих вариантах, по стандарту.
Настройки сети. Здесь должно определиться само. Если внутри локальной сети, смотрите чтобы ip соответствовал ей. Если не так, проверьте настройки Network(сети) в WebVirtCloud, возможно у вас не включен бридж.
В случае если данные манипуляции производятся на арендованном сервере, то должен отобразиться ip подсети, у меня это 192.168.122.XXX.
Необходимо запомнить или записать данный адрес, он нам пригодится чуть позже!
Если необходимо, задайте прокси по стандарту указанному под полем ввода. Я данный шаг пропущу, так как не планирую работу сервера через прокси.
Следующий шаг оставляем как есть
Далее надо задать настройки диска. На данном этапе оставляю как есть, а на следующем шаге, сделаем несколько манипуляций, дабы использовать весь диск.
Здесь необходимо сделать Unmount раздела / и добавить оставшееся свободное место, но это необязательно, т.к. для Forta хватит и этого пространства. Либо вы можете добавить раздел /home чтобы сохранять рабочие файлы там.
Я же объединяю всё под /, чтобы не заморачиваться, хотя правильнее будет хранить рабочие файлы в другой папке.
Указываем максимальное пространство, а также не забываем в графе выбора Mount указать раздел /
После того как с разметкой разделов закончили, выбираем Done и жмем Enter
Нас предупредят, что мы потеряем всю информацию на данных дисках, с чем я и соглашаюсь.
После ввода данных, подтверждаем и появляется следующий экран с предложением установить OpenSSH сервер, жмем Enter(ставим крестик), потом Done. При желании вы можете импортировать SSH ключ, но в данном гайде я не буду рассматривать этот подпункт.
Из всего имеющегося ниже, я бы установил только Docker, но я буду его ставить отдельно для сканера Forta, поэтому кручу вниз и жму Done.
Пошел процесс установки. Ждем пока не появится кнопка reboot
Теперь система ругается что у нас смонтирован образ системы.
Необходимо перейти в WebVirtCloud, Settings, Disk и нажать Unmount.
Возвращаемся к нашему окну и жмем Enter, чтобы запустилась система.
На этом установка закончилась, можно подключиться к серверу по своему ip и логин\паролю.
P.s. для удобства, можно нажать в веб-панели на глазок, чтобы зайти в vnc консоль сразу.
Вход на каждую ВМ под собственным портом
В случае если мы делаем на локальной машине и у нас есть dhcp(автоматическое определение машин и назначение им ip адреса в сети), то данный пункт будет нам неинтересен, ибо каждый раз будет новый ip на виртуалке.
Однако если делать ВМ на сервере, то при наличии нескольких машин с одним логином, возникнут проблемы.
Чтобы не возникало проблем, нужно сделать следующие манипуляции на нужной нам ВМ.
При установке я говорил запомнить данный адрес, в данном случае 192.168.122.136
Далее на основной машине, где у нас установлена KVM, необходимо выполнить следующие команды в iptables
sudo iptables -I FORWARD -o virbr0 -d 192.168.122.XXX -j ACCEPT sudo iptables -t nat -I PREROUTING -p tcp --dport NNN -j DNAT \ --to 192.168.122.XXX:22
Где XXX - окончание ip адреса нашего сервера, в моем примере это будет 136,
а NNN - номер порта, по которому будет происходить подключение к серверу.
sudo iptables -I FORWARD -o virbr0 -d 192.168.122.136 -j ACCEPT sudo iptables -t nat -I PREROUTING -p tcp --dport 2201 -j DNAT --to 192.168.122.136:22
Пример копировать не надо! У Вас будут свои настройки!
Повторяем данные команды для нужного нам количества серверов!
Поздравляю. Настройка закончена!
Теперь мы можем подключиться к нашему серверу по порту, например, как на скриншоте выше.
Спасибо за прочтение! Пожалуйста, поделитесь своим отзывом в комментариях и подпишитесь на меня в социальных сетях, если вам понравилась статья. Я также создал сообщество Telegram, где мы можем собираться и обсуждать интересные темы, связанные с криптовалютой. Вы можете присоединиться к нам и принять участие в обсуждении → Telegram: Contact @razgules