Обновлён README под текущую архитектуру Virtuality

Этот коммит содержится в:
Виктор
2026-05-06 22:15:46 +09:00
родитель 5af4ebd29b
Коммит ca1fec7cad
+221 -59
Просмотреть файл
@@ -1,10 +1,37 @@
# Virtuality # Virtuality
**Virtuality** — лёгкая серверная платформа виртуализации в стиле Proxmox на базе **KVM**, **QEMU**, **libvirt**, **Cockpit** и собственной web-панели. **Virtuality** — лёгкая серверная платформа виртуализации на базе **KVM**, **QEMU**, **libvirt**, **Cockpit** и собственной web-панели.
Цель проекта — собрать понятную, компактную и расширяемую систему для управления виртуальными машинами, ISO-образами, storage pools, сетевыми bridge-интерфейсами, диагностикой и будущими backup/cluster-функциями. Цель проекта — собрать понятную, компактную и расширяемую систему для управления виртуальными машинами, ISO-образами, NAT/bridge-сетью, пробросом портов, диагностикой, web-console/noVNC, backup/snapshot-функциями и будущей кластеризацией.
> Текущий статус: ранняя стадия разработки. Virtuality уже поднимает KVM/libvirt/Cockpit, создаёт storage pools, имеет web-панель, авторизацию Linux-пользователем, healthcheck и создание VM из интерфейса. > Текущий статус: ранняя стадия разработки. Уже есть one-command установка, автоопределение профиля хоста, web-панель, авторизация через Linux-пользователя, ISO-менеджер, создание VM из интерфейса, журнал операций, NAT Router для VPS/ARM edge nodes и port forwarding.
---
## Поддерживаемые профили хоста
Virtuality автоматически определяет профиль сборки во время установки:
```text
x86_64 # обычный сервер, домашний сервер, VPS
raspberry-arm64 # Raspberry Pi ARM64 edge node
orangepi5-arm64 # Orange Pi 5 / RK3588 ARM64 edge node
generic-arm64 # другая ARM64-плата
```
Профиль сохраняется здесь:
```text
/var/lib/virtuality/config/host_profile.json
```
В web-панели профиль виден на странице:
```text
/host
```
Для ARM64-плат правильный сценарий — **ARM64-гости**, NAT-сеть и позже cloud-image/cloud-init шаблоны. x86_64 ISO на Raspberry/Orange Pi не являются целевым режимом.
--- ---
@@ -19,15 +46,21 @@ curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/instal
Как выбирается пользователь для входа в web-панель: Как выбирается пользователь для входа в web-панель:
```text ```text
Если запуск под root → login: root Если запуск под root → login: root
Если запуск через sudo → login: текущий sudo-пользователь Если запуск через sudo → login: текущий sudo-пользователь
Если задан VIRTUALITY_USER → login: указанный пользователь Если задан VIRTUALITY_USER → login: указанный Linux-пользователь
``` ```
Принудительно выбрать пользователя: Принудительно выбрать пользователя:
```bash ```bash
curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/install.sh | VIRTUALITY_USER=viktor bash curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/install.sh | VIRTUALITY_USER=<linux_user> bash
```
Пример:
```bash
curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/install.sh | VIRTUALITY_USER=admin bash
``` ```
Установка с авторизацией под `root`: Установка с авторизацией под `root`:
@@ -39,10 +72,10 @@ curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/instal
Если пароль выбранного Linux-пользователя не задан: Если пароль выбранного Linux-пользователя не задан:
```bash ```bash
sudo passwd viktor sudo passwd <linux_user>
``` ```
или: Для root:
```bash ```bash
passwd root passwd root
@@ -53,6 +86,8 @@ passwd root
## Что уже есть ## Что уже есть
- универсальная one-command установка через `install.sh`; - универсальная one-command установка через `install.sh`;
- автоопределение профиля хоста: x86_64, Raspberry Pi ARM64, Orange Pi 5 ARM64, generic ARM64;
- установка разных пакетных наборов под x86 и ARM64;
- красивый пошаговый installer с live-status и логами; - красивый пошаговый installer с live-status и логами;
- preflight-проверка системных требований; - preflight-проверка системных требований;
- установка KVM/QEMU/libvirt; - установка KVM/QEMU/libvirt;
@@ -60,21 +95,30 @@ passwd root
- рабочая директория `/opt/virtuality/source`; - рабочая директория `/opt/virtuality/source`;
- libvirt storage pools `virtuality-images` и `virtuality-iso`; - libvirt storage pools `virtuality-images` и `virtuality-iso`;
- firewall-правила для SSH, Cockpit, VNC и web-панели; - firewall-правила для SSH, Cockpit, VNC и web-панели;
- настройка bridge `br0` отдельным безопасным скриптом через `netplan try`; - безопасная ручная настройка bridge `br0` через `netplan try`;
- NAT Router `virtuality-nat` для VPS/ARM edge nodes;
- port forwarding через nftables;
- автоматическое определение IP VM для проброса портов;
- healthcheck одной командой `vhealth`; - healthcheck одной командой `vhealth`;
- консольный dashboard для физического монитора; - консольный dashboard для физического монитора;
- web-панель Virtuality на FastAPI; - web-панель Virtuality на FastAPI;
- авторизация web-панели через системного Linux-пользователя; - авторизация web-панели через системного Linux-пользователя;
- `/host` — профиль хоста и проверки готовности;
- `/network` — NAT, DHCP leases, port forwarding, nftables preview;
- `/iso` — ISO-менеджер;
- `/operations` — журнал фоновых операций;
- список VM; - список VM;
- управление VM: Start, Shutdown, Reboot, Power off, Autostart on/off, Delete VM with disks; - управление VM: Start, Shutdown, Reboot, Power off, Autostart on/off, Delete VM with disks;
- создание VM из web-интерфейса; - создание VM из web-интерфейса;
- страница деталей VM: `dominfo`, VNC display, диски, сетевые интерфейсы. - выбор сетевого режима при создании VM: `virtuality-nat` или `br0`;
- прогресс создания VM и live-лог `virt-install`;
- страница деталей VM: `dominfo`, VNC display, IP, диски, сетевые интерфейсы.
--- ---
## Системные требования ## Системные требования
Минимально для тестового стенда: Минимально для x86_64 тестового стенда:
```text ```text
CPU: 2 ядра с Intel VT-x / AMD-V CPU: 2 ядра с Intel VT-x / AMD-V
@@ -85,7 +129,7 @@ OS: Ubuntu Server 24.04 LTS / Debian-like с apt
Network: один проводной интерфейс Network: один проводной интерфейс
``` ```
Рекомендуемо для нормальной работы: Рекомендуемо для x86_64:
```text ```text
CPU: 4+ ядра CPU: 4+ ядра
@@ -95,6 +139,15 @@ Network: 1 Gbit/s+
OS: Ubuntu Server 24.04 LTS OS: Ubuntu Server 24.04 LTS
``` ```
ARM64 edge nodes:
```text
Raspberry Pi 4/5 ARM64: желательно 8 GB RAM
Orange Pi 5 ARM64: желательно 8/16/32 GB RAM и NVMe
Гости: ARM64 Linux VM
Сеть: virtuality-nat по умолчанию
```
Подробнее: [`docs/REQUIREMENTS.md`](docs/REQUIREMENTS.md) Подробнее: [`docs/REQUIREMENTS.md`](docs/REQUIREMENTS.md)
--- ---
@@ -114,19 +167,26 @@ SSH: 22/tcp
curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/install.sh | VIRTUALITY_WEB_PORT=8089 bash curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/install.sh | VIRTUALITY_WEB_PORT=8089 bash
``` ```
Для VPS/ARM NAT-сценария входящие сервисы VM открываются через port forwarding в разделе `/network`.
--- ---
## Директории ## Директории
```text ```text
/opt/virtuality/source # исходники проекта из GitHub /opt/virtuality/source # исходники проекта из GitHub
/opt/virtuality/web # установленная web-панель /opt/virtuality/web # установленная web-панель
/opt/virtuality/venv # Python virtualenv web-панели /opt/virtuality/venv # Python virtualenv web-панели
/opt/virtuality/virtuality.env # базовый env ноды /opt/virtuality/virtuality.env # базовый env ноды
/var/lib/virtuality/iso # ISO-образы /var/lib/virtuality/config # конфиги Virtuality
/var/lib/virtuality/images # qcow2-диски VM /var/lib/virtuality/config/host_profile.json
/var/lib/virtuality/backups # backups /var/lib/virtuality/iso # ISO-образы
/var/log/virtuality # логи установки и диагностики /var/lib/virtuality/images # qcow2-диски VM
/var/lib/virtuality/network # port_forwards.json
/var/lib/virtuality/backups # backups
/var/log/virtuality # логи установки и диагностики
/var/log/virtuality/operations # JSON/log фоновых операций
/etc/virtuality/nftables/virtuality.nft # nftables-правила Virtuality
``` ```
--- ---
@@ -137,11 +197,74 @@ curl -fsSL https://raw.githubusercontent.com/viktor138irk/virtuality/main/instal
sudo vhealth sudo vhealth
``` ```
Проверяются CPU virtualization, `/dev/kvm`, `virsh`, QEMU, libvirt, Cockpit, web-панель, bridge, netplan, firewall, storage pools, VM, директории, диск и память. Дополнительно:
```bash
cat /var/lib/virtuality/config/host_profile.json
systemctl status virtuality-web --no-pager
journalctl -u virtuality-web -n 120 --no-pager
virsh list --all
virsh pool-list --all
virsh net-list --all
virsh net-dhcp-leases virtuality-nat
ip -br a
ip route
```
--- ---
## Bridge br0 ## Web-панель
URL:
```text
http://SERVER_IP:8088
```
Основные разделы:
```text
/ # дашборд
/host # профиль хоста и проверки
/iso # ISO-менеджер
/network # NAT Router и проброс портов
/operations # журнал операций
/vm/create # создание VM
```
Переустановка web-панели:
```bash
cd /opt/virtuality/source
sudo bash scripts/install_web_panel.sh
```
Статус:
```bash
systemctl status virtuality-web --no-pager
```
Логи:
```bash
journalctl -u virtuality-web -f
```
Вход:
```text
Login: выбранный Linux-пользователь
Pass: пароль этого Linux-пользователя
```
---
## Сеть: Bridge и NAT Router
### Bridge br0
Подходит для домашнего/офисного сервера, где VM должны получать IP из локальной сети.
По умолчанию one-command установщик **не включает `br0` автоматически**, чтобы не уронить SSH-сессию. По умолчанию one-command установщик **не включает `br0` автоматически**, чтобы не уронить SSH-сессию.
@@ -167,68 +290,102 @@ br0 UP SERVER_IP/24
default via GATEWAY dev br0 default via GATEWAY dev br0
``` ```
--- ### Virtuality NAT Router
## Web-панель Подходит для VPS, Raspberry Pi, Orange Pi 5 и других ARM64 edge nodes.
Переустановка web-панели: Схема:
```bash
cd /opt/virtuality/source
sudo bash scripts/install_web_panel.sh
```
Статус:
```bash
systemctl status virtuality-web --no-pager
```
Логи:
```bash
journalctl -u virtuality-web -f
```
Вход:
```text ```text
URL: http://SERVER_IP:8088 Интернет / LAN
Login: выбранный Linux-пользователь
Pass: пароль этого Linux-пользователя Хост Virtuality
virtuality-nat / virbr100
VM 192.168.100.x
```
Создать или починить NAT-сеть можно в web-панели:
```text
/network → Создать / починить NAT-сеть
```
Параметры по умолчанию:
```text
Network: virtuality-nat
Bridge: virbr100
Subnet: 192.168.100.0/24
Gateway: 192.168.100.1
DHCP: 192.168.100.50–192.168.100.200
```
Проброс порта добавляется в `/network`. IP VM определяется автоматически через `virsh domifaddr`, а если не получилось — через DHCP leases и MAC-адрес VM.
Пример SSH-проброса:
```text
VM: ubuntu-test
Внешний порт сервера: 2222
Порт внутри VM: 22
Протокол: tcp
```
Подключение:
```bash
ssh user@SERVER_IP -p 2222
``` ```
--- ---
## Создание тестовой VM ## ISO и создание VM
Через web-панель: Загрузка ISO через web-панель:
```text ```text
Virtuality UI → + Создать VM /iso
``` ```
Или командой: Создание VM:
```bash ```text
cd /opt/virtuality/source /vm/create
sudo bash scripts/create_test_vm.sh
``` ```
Alpine ISO: При создании VM можно выбрать сеть:
```text
VPS NAT Router — virtuality-nat
Bridge — br0 / локальная сеть
```
Для x86_64 можно использовать обычные x86_64 ISO. Для Raspberry Pi / Orange Pi 5 нужны ARM64 ISO или, в будущем, ARM64 cloud images.
Пример загрузки Alpine x86_64 ISO:
```bash ```bash
sudo wget -O /var/lib/virtuality/iso/alpine-standard.iso https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.3-x86_64.iso sudo wget -O /var/lib/virtuality/iso/alpine-standard-x86_64.iso https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.3-x86_64.iso
sudo virsh pool-refresh virtuality-iso sudo virsh pool-refresh virtuality-iso
``` ```
--- ---
## Повторная установка / обновление ## Обновление
```bash ```bash
cd /opt/virtuality/source cd /opt/virtuality/source
sudo git pull sudo git pull
sudo bash scripts/install_web_panel.sh
sudo systemctl restart virtuality-web
```
Полная повторная установка компонентов ноды:
```bash
cd /opt/virtuality/source
sudo bash install_virtuality_node.sh sudo bash install_virtuality_node.sh
sudo bash scripts/install_web_panel.sh sudo bash scripts/install_web_panel.sh
``` ```
@@ -241,19 +398,24 @@ sudo bash scripts/install_web_panel.sh
sudo vhealth sudo vhealth
virsh list --all virsh list --all
virsh pool-list --all virsh pool-list --all
virsh net-list --all
virsh net-dhcp-leases virtuality-nat
ip -br a ip -br a
ip route ip route
sudo nft list ruleset
sudo ufw status sudo ufw status
systemctl status libvirtd --no-pager systemctl status libvirtd --no-pager
systemctl status cockpit.socket --no-pager systemctl status cockpit.socket --no-pager
systemctl status virtuality-web --no-pager systemctl status virtuality-web --no-pager
journalctl -u virtuality-web -f
``` ```
--- ---
## Roadmap ## Roadmap
- загрузка ISO из web-интерфейса; - ARM64 cloud-image templates;
- cloud-init для быстрых VM;
- web-console/noVNC; - web-console/noVNC;
- управление storage pools; - управление storage pools;
- backup/snapshot manager; - backup/snapshot manager;