Files
Personal/NEBULA/nebula.md
2026-02-28 16:33:14 +00:00

8.5 KiB
Raw Blame History

И так. Я решил поднять небулу

Мной, в качестве сервера выбран 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: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