# И так. Я решил поднять небулу ## Мной, в качестве сервера выбран debian 12 (6Cores, 12GB RAM + 160gb SSD) ## Обязательно проверяйте, чтобы у вашего хостера/home-server была виртуализация ### Начало установки ## Для начала установим MariaDB сервер да и nginx ``` apt install nginx certbot python3-certbot-nginx -y apt-get install mariadb-server curl gnupg2 -y mysql CREATE DATABASE opennebula; GRANT ALL PRIVILEGES ON opennebula.* TO 'oneadmin' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; EXIT; ``` После этого сделаем парочку очень важных шагов Поменяем наш hostname `hostname opennebula` И заменим хостнейм возле нашего внешнего IP ``` nano /etc/hosts добавляем наш текущий hostname туда ``` ## Затем начнём установку самой небулы Сначала скачаем и добавим GPG ключ ``` curl -fsSL https://downloads.opennebula.io/repo/repo2.key| gpg --dearmor -o /etc/apt/trusted.gpg.d/opennebula.gpg ``` Затем скачаем саму небулу ``` echo "deb https://downloads.opennebula.io/repo/6.10/Debian/12 stable opennebula" | tee /etc/apt/sources.list.d/opennebula.list ``` Обновим и установим репозитроий с небулой ``` apt-get update -y apt-get install opennebula opennebula-sunstone opennebula-gate opennebula-flow -y ``` После успешной установки запустим следующую команду для установки необходимых зависимостей ``` /usr/share/one/install_gems ``` # Теперь настроим нашу небулу ``` nano /etc/one/oned.conf ``` И в этом файле мы меняем следующие строчки ``` DB = [ BACKEND = "sqlite", TIMEOUT = 2500 ] ``` На эти ``` DB = [ BACKEND = "mysql", SERVER = "localhost", PORT = 0, USER = "oneadmin", PASSWD = "password", DB_NAME = "opennebula", CONNECTIONS = 25, COMPARE_BINARY = "no" ] ``` Сохраняем изменения И после этого сгенерим пароль oneadmin при помощи ``` cat /var/lib/one/.one/one_auth ``` После этого ``` systemctl start opennebula opennebula-sunstone systemctl enable opennebula opennebula-sunstone ``` Думали всё? Начинаем дебажить В целом, нам, для начала, необходимо создать Host. Это место, где будут крутиться наши виртуалки Имя хоста обязательно должно совпадать с записью в `/etc/hosts`, так-же, если хост находится на одном с небулой сервере, то необходимо что-бы он был с ip 127.0.0.1 Далее ``` su - oneadmin -c "ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa" su - oneadmin -c "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys" chmod 600 /var/lib/one/.ssh/authorized_keys ``` Проверим возможность Oneadmin общаться с самим собой ``` su - oneadmin ssh -o StrictHostKeyChecking=no localhost ``` Если нас пустило без пароля - шик Пишем ``` apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils usermod -a -G libvirt,kvm oneadmin ``` После этого мы почти готовы поднимать VM, но ещё не совсем ``` ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm-one chown -R oneadmin:oneadmin /var/lib/one/datastores systemctl restart libvirtd ``` Далее `nano /etc/libvirt/qemu.conf` И туда пишем ``` user = "oneadmin" group = "oneadmin" dynamic_ownership = 1 ``` После ``` apt-get install -y apparmor-utils aa-complain /usr/sbin/libvirtd systemctl restart libvirtd chown -R oneadmin:oneadmin /var/lib/one/datastores chmod -R 770 /var/lib/one/datastores ``` После этого, ради работы VNC установим FireBridge ``` apt-get install opennebula-fireedge echo "$(openssl rand -base64 32)" > /etc/one/fireedge_key chown oneadmin:oneadmin /etc/one/fireedge_key chmod 600 /etc/one/fireedge_key systemctl enable opennebula-fireedge systemctl start opennebula-fireedge ``` Установим "гуакд" ``` apt-get install -y opennebula-guacd systemctl enable --now opennebula-guacd ``` Проверим его работоспособность `ss -tlnp | grep 4822` Далее идём в ``` nano /etc/one/sunstone-server.conf ``` И убеждаемя, что в самом конце этого файла у нас написанно ``` :private_fireedge_endpoint: http://localhost:2616 :public_fireedge_endpoint: http://ip_addr_of_your_server(Domain):2616 :fireedge_verify_ssl: false ``` Затем нагенерим самописные-серты для fireedge ``` # Create the directory mkdir -p /etc/one/ssl cd /etc/one/ssl # Generate a self-signed certificate (valid for 365 days) openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout opennebula.key -out opennebula.crt \ -subj "/C=US/ST=State/L=City/O=OpenNebula/CN=ip_addr_of_your_server" # Ensure the oneadmin user can read them chown -R oneadmin:oneadmin /etc/one/ssl chmod 600 /etc/one/ssl/opennebula.key chmod 644 /etc/one/ssl/opennebula.crt ``` Далее ``` nano /etc/one/fireedge-server.conf ``` Там проверяем, что ``` :host: 127.0.0.1 :port: 2617 меняем порт на 2617 ``` ``` nano /etc/nginx/sites-available/fireedge ``` Вставляем туда ``` server { listen 2616 ssl; server_name ip_addr_of_your_server; ssl_certificate /etc/one/ssl/opennebula.crt; ssl_certificate_key /etc/one/ssl/opennebula.key; location / { proxy_pass http://127.0.0.1:2617; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` Потом ``` ln -s /etc/nginx/sites-available/fireedge /etc/nginx/sites-enabled/ rm /etc/nginx/sites-enabled/default systemctl restart nginx systemctl restart opennebula-fireedge ``` И в целом всё Ваша небула будет доступна через браузер **http://your-server-ip:9869** iptables -A INPUT -p tcp --dport 5900:6000 -j ACCEPT # Но это ведь слишком скучно. Хочется домен, хочется ходить без порта. Генерим конфигурационный файл для нашего облачка ``` nano /etc/nginx/sites-available/sunstone.conf ``` И вставим туда ``` server { listen 80; server_name pu-pu-pu-pu-pu-pu.domain.com; location / { proxy_pass http://127.0.0.1:9869; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Для WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` Сохраним и проверим наш конфиг, а так-же растартнем nginx ``` nginx -t systemctl restart nginx ``` После этого получим серт через Certbot (да, это правда особо не нужно, но лень каждый раз смотреть, что соединение не безопасно) ``` certbot --nginx -d pu-pu-pu-pu-pu-pu.domain.com ``` Вот и всё, мы прекрасны Для загрузки ISO лучше всего использовать scp ```scp pupu.iso oneadmin@server:/var/lib/one/datastores/0/``` Или грузить всё в домашнюю директорию рута и оттуда Перед этим нужно подредачить настройки хранилища ``` onedatastore show 1 (ID_ХРАНИЛИЩА) Если видим дискомфортное количество или просто "/" в `RESTRICTED_DIRS` То: ``` onedatastore update 1 ``` И просто сносим RESTRICTED_DIRS После этого, через WEB-GUI можно будет добавлять ISO по их пути на сервере ``` sudo mv ~/pupu.iso /var/lib/one/datastores/0/ sudo chown oneadmin:oneadmin /var/lib/one/datastores/0/pupu.iso ```