|
|
há 6 meses atrás | |
|---|---|---|
| .github | há 7 meses atrás | |
| app | há 6 meses atrás | |
| static | há 6 meses atrás | |
| .gitignore | há 7 meses atrás | |
| DASHBOARD.md | há 6 meses atrás | |
| README.md | há 6 meses atrás | |
| RUNNING.md | há 6 meses atrás | |
| SOLUTION.md | há 6 meses atrás | |
| TROUBLESHOOTING.md | há 6 meses atrás | |
| create_disk.sh | há 6 meses atrás | |
| pyproject.toml | há 7 meses atrás | |
| requirements.txt | há 7 meses atrás |
Una API REST y interfaz web para gestionar máquinas virtuales en Ubuntu usando FastAPI, libvirt y noVNC para consola web.
Asegúrate de que libvirt esté instalado y configurado:
sudo apt update
sudo apt install -y libvirt-daemon-system libvirt-dev pkg-config python3-libvirt novnc websockify
sudo apt install python3-pip python3.12-venv
Crea el directorio para ISOs (opcional, se crea automáticamente):
sudo mkdir -p /var/lib/libvirt/images/isos
Clona o descarga el proyecto en /home/creylopez/virtmanager (o ajusta las rutas según corresponda).
Crea y activa un entorno virtual:
python3 -m venv venv
source venv/bin/activate
pip install libvirt-python
Instala las dependencias de Python:
pip install -r requirements.txt
Configura permisos para libvirt (opcional, si no usas sudo):
sudo usermod -a -G libvirt $USER
# Reinicia la sesión para aplicar cambios
Configurar permisos para crear discos virtuales:
VirtManager necesita crear discos en /var/lib/libvirt/images/ con permisos correctos. Para esto, configura el script helper con permisos sudo:
# El script ya está en el proyecto
chmod +x create_disk.sh
# Configura sudoers para permitir crear discos sin contraseña
echo "creylopez ALL=(ALL) NOPASSWD: /home/creylopez/virtmanager/create_disk.sh" | sudo tee /etc/sudoers.d/virtmanager
# Verifica que la configuración sea correcta
sudo visudo -c -f /etc/sudoers.d/virtmanager
Para que VirtManager se inicie automáticamente con el sistema:
Crea el archivo de servicio:
sudo tee /etc/systemd/system/virtmanager.service > /dev/null <<EOF
[Unit]
Description=VirtManager API
After=network.target libvirtd.service
[Service]
Type=simple
User=root
WorkingDirectory=/home/creylopez/virtmanager
ExecStart=/home/creylopez/virtmanager/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
EOF
Recarga systemd y habilita el servicio:
sudo systemctl daemon-reload
sudo systemctl enable virtmanager
sudo systemctl start virtmanager
Verifica el estado:
sudo systemctl status virtmanager
La aplicación estará disponible en http://localhost:8000 o http://tu-ip:8000.
Si prefieres ejecutar manualmente:
source venv/bin/activate
sudo uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Nota: Se requiere sudo porque libvirt necesita permisos de root.
LIBVIRT_IMAGES_PATH: Ruta para almacenar imágenes de disco (por defecto /var/lib/libvirt/images).
export LIBVIRT_IMAGES_PATH=/ruta/a/imagenes
GET /: Página de inicio (interfaz web).GET /vms: Lista todas las VMs con estado, ID, nombre y puerto VNC si aplica.POST /vms?name={name}&memory={memory}&disk_size={disk_size}&iso={iso}: Crea una nueva VM.
name: Nombre de la VM.memory: Memoria en MiB.disk_size: Tamaño del disco en GB.iso: Ruta al archivo ISO para instalación.GET /vms/{vm_name}/start: Inicia una VM por nombre.GET /vms/{vm_name}/stop: Detiene una VM por nombre.DELETE /vms/{vm_name}: Elimina una VM por nombre.PUT /vms/{vm_name}/boot-order: Cambia el orden de arranque.
{"order": ["hd", "cdrom"]} (ejemplo).POST /disks?name={name}&size={size}: Crea una imagen de disco.
name: Nombre del archivo (sin extensión).size: Tamaño en GB.GET /isos: Lista todas las ISOs subidas.POST /upload-iso: Sube un archivo ISO.
file).DELETE /isos/{iso_name}: Elimina una ISO por nombre.GET /console/{vm_name}: Obtiene la URL para la consola web noVNC de la VM.Accede a http://localhost:8000 en tu navegador.
Accede a http://localhost:8000/docs para la documentación interactiva de Swagger UI.
sudo systemctl start libvirtd).create_disk.sh debe estar configurado con permisos sudo sin contraseña (ver sección de instalación)./var/lib/libvirt/images o ajusta LIBVIRT_IMAGES_PATH.create_disk.sh tenga permisos de ejecución (chmod +x create_disk.sh)/var/lib/libvirt/images/ sean correctosSiéntete libre de contribuir con mejoras o reportar issues.
Este proyecto es de código abierto. Ajusta según tus necesidades.