فهرست منبع

Actualización de README.md

Celestino Rey 7 ماه پیش
والد
کامیت
8f92c68827
1فایلهای تغییر یافته به همراه132 افزوده شده و 22 حذف شده
  1. 132 22
      README.md

+ 132 - 22
README.md

@@ -1,47 +1,157 @@
 # VirtManager
 
-API for managing virtual machines on Ubuntu using FastAPI and libvirt.
+Una API REST y interfaz web para gestionar máquinas virtuales en Ubuntu usando FastAPI, libvirt y noVNC para consola web.
 
-## Installation
+## Características
 
-1. Create and activate a virtual environment:
+- **Gestión completa de VMs**: Crear, listar, iniciar, detener y eliminar máquinas virtuales.
+- **Configuración de arranque**: Cambiar el orden de arranque de las VMs (disco duro, CD-ROM, etc.).
+- **Consola web**: Acceso a la consola de las VMs vía navegador usando noVNC, sin necesidad de clientes VNC locales.
+- **Interfaz web intuitiva**: Interfaz basada en Bootstrap para gestionar VMs fácilmente.
+- **Auto-inicio**: Servicio systemd para que la aplicación se inicie automáticamente con el sistema.
+- **Documentación interactiva**: API documentada con Swagger UI.
+
+## Instalación
+
+### Prerrequisitos del Sistema
+
+Asegúrate de que libvirt esté instalado y configurado:
+
+```bash
+sudo apt update
+sudo apt install -y libvirt-daemon-system libvirt-dev pkg-config python3-libvirt python3-gi novnc websockify
+```
+
+### Instalación del Proyecto
+
+1. Clona o descarga el proyecto en `/home/creylopez/virtmanager` (o ajusta las rutas según corresponda).
+
+2. Crea y activa un entorno virtual:
    ```bash
    python3 -m venv venv
    source venv/bin/activate
    ```
 
-2. Install dependencies:
+3. Instala las dependencias de Python:
+   ```bash
+   pip install -e .
+   ```
+
+4. Configura permisos para libvirt (opcional, si no usas sudo):
+   ```bash
+   sudo usermod -a -G libvirt $USER
+   # Reinicia la sesión para aplicar cambios
+   ```
+
+### Configuración del Servicio Systemd (Auto-inicio)
+
+Para que VirtManager se inicie automáticamente con el sistema:
+
+1. Crea el archivo de servicio:
+   ```bash
+   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
+   ```
+
+2. Recarga systemd y habilita el servicio:
    ```bash
-   pip install -r requirements.txt
+   sudo systemctl daemon-reload
+   sudo systemctl enable virtmanager
+   sudo systemctl start virtmanager
    ```
 
-3. Ensure libvirt and Python bindings are installed on the system:
+3. Verifica el estado:
    ```bash
-   sudo apt install libvirt-daemon-system libvirt-dev pkg-config python3-libvirt python3-gi
+   sudo systemctl status virtmanager
    ```
 
-## Running the API
+La aplicación estará disponible en `http://localhost:8000` o `http://tu-ip:8000`.
 
-Set the environment variable for the images path if needed (default is /var/lib/libvirt/images):
+## Uso
+
+### Ejecución Manual (sin servicio)
+
+Si prefieres ejecutar manualmente:
 
 ```bash
-export LIBVIRT_IMAGES_PATH=/path/to/images
 source venv/bin/activate
-uvicorn app.main:app --reload --host 0.0.0.0
+sudo uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
 ```
 
-The API will be available at http://0.0.0.0:8000
+Nota: Se requiere `sudo` porque libvirt necesita permisos de root.
+
+### Variables de Entorno
+
+- `LIBVIRT_IMAGES_PATH`: Ruta para almacenar imágenes de disco (por defecto `/var/lib/libvirt/images`).
+
+```bash
+export LIBVIRT_IMAGES_PATH=/ruta/a/imagenes
+```
+
+## Endpoints de la API
+
+### VMs
+
+- `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.
+  - Body JSON: `{"order": ["hd", "cdrom"]}` (ejemplo).
+
+### Discos
+
+- `POST /disks?name={name}&size={size}`: Crea una imagen de disco.
+  - `name`: Nombre del archivo (sin extensión).
+  - `size`: Tamaño en GB.
+
+### Consola
+
+- `GET /console/{vm_name}`: Obtiene la URL para la consola web noVNC de la VM.
+
+## Interfaz Web
+
+Accede a `http://localhost:8000` en tu navegador.
+
+- **Lista de VMs**: Tabla con estado (badges coloreados), acciones (iniciar/detener/eliminar/consola).
+- **Crear VM**: Formulario para especificar nombre, memoria, disco e ISO.
+- **Set Boot Order**: Selecciona una VM y define el orden de arranque (ej. "hd,cdrom").
+- **Consola**: Botón para abrir la consola web en una nueva pestaña (solo para VMs corriendo).
+
+## Documentación de la API
+
+Accede a `http://localhost:8000/docs` para la documentación interactiva de Swagger UI.
+
+## Notas
+
+- Las operaciones de VMs requieren que libvirt esté corriendo (`sudo systemctl start libvirtd`).
+- Para crear VMs, asegúrate de que el usuario tenga permisos en `/var/lib/libvirt/images` o ajusta `LIBVIRT_IMAGES_PATH`.
+- La consola web usa websockify para proxy VNC a WebSocket.
+- El servicio systemd ejecuta como root para acceso completo a libvirt.
 
-Access the web interface at http://0.0.0.0:8000
+## Contribución
 
-Access the interactive documentation at http://0.0.0.0:8000/docs
+Siéntete libre de contribuir con mejoras o reportar issues.
 
-## Endpoints
+## Licencia
 
-- GET / : Root message
-- GET /vms : List all VMs
-- POST /vms?name={name}&memory={memory}&disk_size={disk_size}&iso={iso} : Create a new VM with specified memory (MiB), disk size (GB), and ISO for installation
-- GET /vms/{vm_id}/start : Start a VM by ID
-- GET /vms/{vm_id}/stop : Stop a VM by ID
-- DELETE /vms/{vm_name} : Delete a VM by name
-- POST /disks?name={name}&size={size} : Create a new disk image with specified size in GB
+Este proyecto es de código abierto. Ajusta según tus necesidades.