Files
Personal/NEBULA/nebula.md
2026-03-22 21:18:10 +00:00

273 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# И так. Я решил поднять небулу
## Мной, в качестве сервера выбран debian 13 (16Cores, 32GB RAM + 2tb 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/7.1/Debian/13 stable opennebula" | sudo tee /etc/apt/sources.list.d/opennebula.list
```
Обновим и установим репозитроий с небулой
```
apt-get update -y
apt-get install opennebula opennebula-fireedge 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 {
server_name nebula.reisber.space;
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";
proxy_read_timeout 3600;
proxy_send_timeout 3600;
proxy_request_buffering off;
proxy_buffering off;
}
location /fireedge/ {
proxy_pass http://127.0.0.1:2617; # порт FireEdge
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
proxy_buffering off;
}
}
```
Сохраним и проверим наш конфиг, а так-же растартнем 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
```