Instalé PegaProx en un contenedor LXC para gestionar mi Proxmox (y lo primero que me enseñó)

PegaProx, el panel libre para Proxmox, montado en un LXC con su repositorio APT: los pasos, el fallo de DNS que no me dejaba conectar y si vale la pena con un solo nodo.

IvánPublicado el 6 minRead in English

Hace unos días convertí mi portátil viejo en un servidor Proxmox para el laboratorio de ASIR. La interfaz de Proxmox está bien, pero es muy de ir nodo a nodo y pestaña a pestaña, y me faltaba una portada que me dijera de un vistazo cómo está todo. Hoy he probado PegaProx, un panel de gestión libre (AGPL) para Proxmox VE que se presenta como un “vCenter para Proxmox”: inventario de todos los clústeres, balanceo de carga, migraciones, alertas, consola… Te cuento cómo lo he instalado y qué me encontré.

Spoiler: la instalación son cinco minutos, el único problema fue culpa mía (o de mi DNS) y lo más útil del primer día no fue ninguna función estrella, sino un aviso que me sacó los colores.

1. Dónde instalarlo: un LXC, no el host

PegaProx se puede instalar de cuatro formas: con un script, desde un repositorio APT, con Docker o desde el código. Y se puede poner en cualquier Debian, incluido el propio host de Proxmox.

Yo no lo quería en el host. El hipervisor es lo último que quiero ensuciar con paquetes y repositorios de terceros: si una actualización de PegaProx rompe algo de Python, no quiero que arrastre al nodo. Así que le hice un contenedor LXC para él solo:

Recurso Valor
Plantilla Debian 13 (debian-13-standard)
Tipo Sin privilegios, con nesting=1
CPU / RAM 2 núcleos, 1 GB (+512 MB de swap)
Disco 8 GB en el SSD
Red IP fija en la red de casa

Desde la consola del host:

pveam update
pveam download local debian-13-standard_13.6-1_amd64.tar.zst

pct create 105 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst \
  --hostname pegaprox --cores 2 --memory 1024 --swap 512 \
  --rootfs local-lvm:8 \
  --net0 name=eth0,bridge=vmbr0,ip=192.168.1.75/24,gw=192.168.1.1 \
  --nameserver 192.168.1.1 \
  --unprivileged 1 --features nesting=1 --onboot 1 \
  --timezone Europe/Madrid \
  --ssh-public-keys /root/mi-clave.pub

pct start 105

Cambia la IP, el ID y el almacenamiento por los tuyos. Con --ssh-public-keys entras por SSH con tu clave sin poner contraseña a root.

2. Instalar desde el repositorio APT (y no con el script)

El script de instalación del README es el camino más corto, pero descarga lo último de la rama principal, con cosas que todavía no han salido en ninguna versión. El repositorio APT, en cambio, publica versiones empaquetadas, y además se actualiza con el apt upgrade de siempre. Para algo que va a tener las llaves de mi Proxmox, prefiero lo segundo.

Dentro del contenedor (pct enter 105):

apt update && apt full-upgrade -y
apt install -y curl ca-certificates

install -d /etc/apt/keyrings
curl -fsSL https://git.gyptazy.com/api/packages/gyptazy/debian/repository.key \
  -o /etc/apt/keyrings/gyptazy.asc

echo "deb [signed-by=/etc/apt/keyrings/gyptazy.asc] https://packages.gyptazy.com/api/packages/gyptazy/debian trixie main" \
  > /etc/apt/sources.list.d/gyptazy.list

apt update
apt install -y pegaprox

El paquete crea un usuario pegaprox, un servicio de systemd con el mismo nombre y deja los datos en /var/lib/pegaprox. Me instaló la 1.4.0.

Los avisos de perl: warning: Setting locale failed que salen durante la instalación no son de PegaProx: la plantilla de Debian viene sin locales generados. Se quitan con sed -i 's/^# *es_ES.UTF-8/es_ES.UTF-8/' /etc/locale.gen && locale-gen.

Para comprobar que está vivo:

systemctl is-active pegaprox
ss -tlnp | grep -E ':500[0-2]'

Escucha en tres puertos: 5000 (la web, por HTTPS), 5001 (la consola VNC por WebSocket) y 5002 (la terminal SSH por WebSocket).

3. Primer acceso y añadir el nodo

Abres https://IP-del-contenedor:5000, aceptas el aviso del certificado (es autofirmado, como el de Proxmox) y no hay usuario por defecto: la primera visita abre un asistente para crear el administrador. Me parece bien; mejor eso que un admin/admin que alguien olvida cambiar.

Después, Agregar cluster y rellenar:

  • Nombre: el que quieras.
  • Máquina: la dirección del nodo. Aquí está la trampa, te la cuento ahora.
  • Usuario y contraseña: root@pam con su contraseña, o un token de API (formato usuario@realm!idtoken).
  • Verificación de SSL: desactivada si tu Proxmox usa el certificado autofirmado.

El fallo: “Cannot connect”

En Máquina puse el nombre del nodo en vez de la IP. Resultado: Failed to connect: Cannot connect. La API de Proxmox respondía perfectamente desde el contenedor, así que miré qué resolvía ese nombre:

getent hosts nombre-del-nodo

Devolvía la IP que tenía el portátil antes de reinstalarlo, cuando todavía era un escritorio con CachyOS. El DNS del router se había quedado con esa asociación de cuando el equipo pedía IP por DHCP, y nadie la había actualizado. PegaProx estaba intentando hablar con un equipo que ya no existía.

Con la IP en el campo Máquina, conectó a la primera. La solución de verdad es limpiar esa entrada en el router, pero para un panel de gestión prefiero la IP de todos modos: si el DNS se cae, quiero seguir viendo mis máquinas.

Lo que hace con root

Añadí el nodo con root@pam y en el registro apareció Connected to Proxmox ... using API Token. PegaProx crea él solo un token de API en root@pam (lo verás en Datacenter > Permisos > Tokens de API con el comentario “PegaProx management token”) y a partir de ahí usa ese token en vez de la contraseña.

Es cómodo, pero ojo: el token se crea sin separación de privilegios, así que puede hacer todo lo que hace root. Para un laboratorio me vale. En algo serio crearía un usuario propio para PegaProx con su token y le daría solo el rol que necesite.

La base de datos de configuración va cifrada con SQLCipher en Linux x86_64, así que las credenciales no quedan en claro en el disco del contenedor.

4. Lo que vi el primer día

Con un solo nodo, PegaProx es básicamente un inventario muy bien presentado: estado del nodo, VMs y contenedores encendidos y apagados, CPU, RAM, almacenamiento (incluido el recurso compartido del NAS), una vista de topología y un top 10 de lo que más consume.

Y entonces vi esta tabla: “Invitados sin tarea de copia de seguridad: 5”. Todas. Tengo el almacenamiento del NAS añadido en Proxmox para copias, escribí un manual entero sobre copias e instantáneas… y en el portátil no había programado ninguna tarea. Proxmox no te lo dice si no vas a mirarlo; PegaProx te lo pone en la portada. Solo por eso ya me ha compensado instalarlo.

Otras cosas que me llamaron la atención:

  • Consume poco: unos 175 MB de RAM y menos de 1 GB de disco con todo instalado.
  • Avisa de actualizaciones pendientes en los nodos.
  • Tiene plugins (página de estado, notificaciones, portal de cliente…) que no he probado todavía.

5. ¿Tiene sentido con un solo nodo?

A medias. Lo que más luce de PegaProx es el balanceo automático (mueve VMs entre nodos según la carga) y gestionar varios clústeres desde un mismo sitio. Con un nodo, el balanceador mira, ve que no hay adónde mover nada y no hace nada; en el registro sale tal cual: “Not enough online nodes for balancing”.

Donde sí brillará es en el clúster de tres nodos con Ceph que tengo pensado montar en casa, o en cualquier sitio con varios clústeres. Para un nodo suelto, es una portada más clara que la de Proxmox y un vigilante de cosas que se te olvidan.

Lo que no hay que hacer

  • Instalarlo en el host de Proxmox “porque se puede”. Un LXC te da lo mismo y se borra en un segundo.
  • Usar el script de la rama principal para algo que va a tener permisos de root sobre tu infraestructura. Mejor versiones publicadas.
  • Poner el nombre del nodo si no te fías de tu DNS. Comprueba con getent hosts qué resuelve antes de echarle la culpa a la herramienta.
  • Olvidar el token que crea. Si quitas PegaProx, borra también el token de root@pam.

Resumen

  1. LXC Debian 13 sin privilegios, 1 GB de RAM y 8 GB de disco sobran.
  2. Instalación desde el repositorio APT: versiones publicadas y se actualiza con apt.
  3. Sin usuario por defecto: la primera visita crea el administrador.
  4. Añade el nodo por IP; si usas root, PegaProx crea un token con permisos de root.
  5. Con un nodo es un inventario y un vigilante; el balanceo necesita al menos dos.

Para un homelab de un nodo no es imprescindible, pero el aviso de las copias ya ha hecho más por mí que muchas herramientas que llevo años usando. Esta semana toca programar esas copias.

Mini-quiz

¿Te has quedado con la idea?

Tres preguntas rápidas. Cada acierto suma 10 XP.

  1. ¿Por qué instalo PegaProx en un contenedor LXC y no directamente en el host de Proxmox?
  2. PegaProx decía 'Cannot connect' al añadir el nodo, pero la API de Proxmox respondía. ¿Qué pasaba?
  3. Si añades el nodo con root@pam, ¿qué hace PegaProx con esa cuenta?
  • #proxmox
  • #pegaprox
  • #lxc
  • #homelab
  • #debian
Esc