De Windows a Proxmox: cómo armé un homelab de producción en una Dell OptiPlex 7090
Desarrollo

De Windows a Proxmox: cómo armé un homelab de producción en una Dell OptiPlex 7090

Ricardo Gil
12 de octubre de 2026
9 min de lectura

Traducido del original en inglés. Read this article in English →

#Proxmox #Home Lab #Self-Hosting #Tailscale #Ubuntu #AdGuard #Linux #DevOps #Samba

Introducción

El hosting en la nube es cómodo, hasta que te das cuenta de que estás pagando $50-100 al mes por infraestructura que ya tienes. Yo tenía una Dell OptiPlex 7090 en mi oficina con Windows 11, corriendo algunos servicios de backend. El setup se sentía frágil: todo corría directamente sobre el sistema operativo, sin aislamiento y sin virtualización de verdad.

Así que la formateé. Reemplacé Windows por Proxmox VE 9.1 y en un fin de semana tenía un servidor de homelab como corresponde, con varios contenedores aislados, filtrado DNS para toda la red, acceso remoto seguro desde cualquier lugar y una carpeta compartida en red, todo por $0 al mes en costos de nube.

Aquí te cuento exactamente cómo lo hice, qué aprendí y qué me sorprendió en el camino.

El hardware

La Dell OptiPlex 7090 es una máquina subestimada para un homelab. Se consigue reacondicionada por $200-350 y rinde muy por encima de su precio. La mía venía así:

  • CPU: Intel Core i7-10700 (8 núcleos / 16 hilos)
  • RAM: 32 GB DDR4
  • Almacenamiento: NVMe de 476 GB (disco del sistema) + NVMe de 1.8 TB (disco de datos)
  • Formato: Small Form Factor, silenciosa y compacta

Consume unos 35 W en reposo, algo que importa cuando está encendida 24/7. Tener dos NVMe resultó clave: Proxmox vive en el disco pequeño y todos los datos y el almacenamiento de los contenedores, en el grande.

Si buscas una máquina nueva para usar como servidor de homelab en lugar de reciclar una vieja, vale la pena considerar un mini PC. El Beelink GTi13 Ultra ofrece un i9-13900HK con hasta 64 GB de RAM en un equipo diminuto y silencioso, con mucho más margen para correr varias VMs y contenedores a la vez.

¿Por qué Proxmox?

Proxmox VE es un hipervisor bare-metal que te da máquinas virtuales KVM y contenedores LXC administrados desde una interfaz web. Es gratis, de nivel empresarial y está basado en Debian. Razones clave para elegirlo:

  • Los contenedores LXC corren con rendimiento casi nativo y muy poca sobrecarga
  • La interfaz web en el puerto 8006 facilita la administración sin entrar por SSH para cada tarea
  • No necesitas suscripción para uso doméstico
  • Ecosistema maduro, con una comunidad grande y mucha documentación

La instalación es sencilla: descargas la ISO, la grabas en una memoria USB, arrancas y sigues el asistente. Aquí importa usar una memoria USB confiable; una Samsung de 64 GB USB 3.1 funciona bien.

Después de instalar, desactiva el repositorio enterprise (requiere suscripción de pago) y agrega el repositorio no-subscription:

bash
# Disable enterprise repo
echo "# disabled" > /etc/apt/sources.list.d/pve-enterprise.list

# Add no-subscription repo
echo "deb http://download.proxmox.com/debian/pve trixie pve-no-subscription" \
  > /etc/apt/sources.list.d/pve-no-subscription.list

apt update && apt dist-upgrade -y

Montar el segundo disco

Mi NVMe de 1.8 TB estaba formateado en exFAT de su vida anterior como disco de datos de Windows. Linux no incluye soporte para exFAT por defecto:

bash
apt install -y exfatprogs
mkdir -p /mnt/data_drive
mount -t exfat /dev/nvme1n1p2 /mnt/data_drive

Para que sobreviva a los reinicios, agrégalo a /etc/fstab:

code
UUID=YOUR-DRIVE-UUID /mnt/data_drive exfat defaults,nofail 0 0

Obtén el UUID con blkid /dev/nvme1n1p2. El flag nofail es importante: sin él, si el disco falta, el sistema no arranca.

El contenedor LXC de Ubuntu

En lugar de una VM completa, creé un contenedor LXC para las aplicaciones. Los contenedores LXC comparten el kernel del host, así que son mucho más livianos que las VMs y aun así ofrecen aislamiento completo de procesos.

bash
# Download Ubuntu 24.04 template
pveam update
pveam download local ubuntu-24.04-standard_24.04-2_amd64.tar.zst

# Create container (8GB disk, 2GB RAM, 2 cores)
pct create 100 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
  --hostname ubuntu \
  --memory 2048 \
  --cores 2 \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --rootfs local-lvm:8

El contenedor obtiene una IP del DHCP de tu router. Configura una reserva DHCP en el router para que la IP nunca cambie.

Bind mount del disco de datos

Para que el contenedor de Ubuntu acceda al disco de datos, agrega un bind mount en la configuración del contenedor:

bash
pct set 100 -mp0 /mnt/data_drive,mp=/mnt/data_drive
pct reboot 100

Esta es una de las cosas elegantes de LXC: puedes exponer rutas del host directamente dentro de los contenedores sin sobrecarga de red ni configurar NFS.

Aplicaciones con PM2

Dentro del contenedor de Ubuntu, las aplicaciones de Node.js corren con PM2 en modo cluster para reiniciar sin caídas:

bash
# Install Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

# Install PM2 globally
npm install -g pm2

# Start your app
cd ~/your-app && pm2 start ecosystem.config.js

# Save and enable autostart on reboot
pm2 save
pm2 startup

Un ecosystem.config.js mínimo:

javascript
module.exports = {
  apps: [{
    name: 'my-app',
    script: 'src/server.js',
    instances: 2,
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
};

nginx como proxy inverso

Con varios servicios en distintos puertos, nginx los une a todos en un solo puerto:

bash
apt install -y nginx
nginx
server {
    listen 8080;

    location /api/service-one/ {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /api/service-two/ {
        proxy_pass http://localhost:3001/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Tailscale para acceso remoto seguro

Tailscale crea una VPN en malla zero-trust: cada dispositivo recibe una IP 100.x.x.x accesible desde cualquier lugar, sin redirigir puertos ni administrar un servidor VPN.

bash
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

Después de autenticarte, tu contenedor es accesible de inmediato desde cualquiera de tus otros dispositivos con Tailscale: teléfono, laptop, donde sea. Sin reglas de firewall, sin DNS dinámico y sin puertos abiertos en tu router.

Para los servicios que tienen que ser públicos, Tailscale Funnel ofrece HTTPS automático:

bash
tailscale funnel 8080

Esto te da un endpoint público https://your-machine.ts.net con certificado TLS gratis, respaldado por tu servidor de casa.

Un buen switch ayuda si vas a cablear todo como corresponde. El switch administrable TP-Link TL-SG108E de 8 puertos es una opción económica y sólida para un homelab, con soporte de VLANs.

AdGuard Home para filtrar DNS en toda la red

AdGuard Home funciona como servidor DNS que bloquea anuncios y dominios de rastreo para todos los dispositivos de tu red, sin instalar nada en cada uno.

El proyecto de scripts de la comunidad de Proxmox lo instala con un solo comando desde el host de Proxmox:

bash
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/adguardhome.sh)"

Una vez creado el contenedor, configura el DNS de tu router con la IP del contenedor de AdGuard. Todos los dispositivos de tu red obtienen filtrado a nivel DNS al instante. Los registros de consultas muestran cuántos dominios de rastreo contactan las apps modernas; abre los ojos.

Carpetas compartidas con Samba

Para acceder a los archivos del contenedor de Ubuntu desde equipos Windows en la misma red de Tailscale:

bash
apt install -y samba

Agrega a /etc/samba/smb.conf:

ini
[myfiles]
   path = /home/myuser
   browseable = yes
   read only = no
   valid users = myuser
bash
smbpasswd -a myuser
systemctl restart smbd && systemctl enable smbd

Acceso desde Windows: \\\myfiles

Nota: usa siempre autenticación con contraseña (valid users, smbpasswd) en lugar de acceso de invitado, incluso en una red privada.

Lo que corre ahora

Así quedó el servidor después del armado de fin de semana:

Servicio Detalles
Proxmox VE 9.1 Hipervisor, accesible por interfaz web
LXC de Ubuntu Contenedor de aplicaciones, 2 GB de RAM
APIs de Node.js PM2 en modo cluster, reinicio automático
nginx Proxy inverso en el puerto 8080
Tailscale Acceso remoto seguro + funnel HTTPS público
AdGuard Home Filtrado DNS para toda la red
Samba Carpeta compartida con autenticación sobre Tailscale
Disco de datos de 1.8 TB exFAT, con bind mount en el contenedor

RAM total usada por todos los contenedores: ~2 GB de 32 GB. El servidor se mantiene en torno al 8% de CPU en reposo.

Confiabilidad

Algo importante para cualquier servidor siempre encendido: un UPS (sistema de alimentación ininterrumpida). Un corte de luz mientras Proxmox escribe en disco puede corromper el sistema de archivos. El CyberPower CP1500PFCLCD da autonomía suficiente para apagar ordenadamente y protege contra variaciones de voltaje. Es de esas cosas en las que no piensas hasta que las necesitas.

Si guardas datos críticos, considera un NAS de verdad junto a tu servidor. El Synology DS220+ con discos WD Red Plus te da redundancia RAID que un solo NVMe no puede ofrecer.

Lo que aprendí

exFAT en Linux ya tiene soporte completo. exfatprogs en Debian Trixie funcionó a la primera: sin perder datos ni reformatear.

Los contenedores LXC están subestimados. La mayoría del contenido de homelab empuja las VMs, pero para cargas Linux, LXC casi siempre es la mejor opción. Más rápidos, más livianos, y los bind mounts hacen que compartir almacenamiento sea trivial.

Tailscale cambia las reglas. Ya había configurado WireGuard a mano antes: es potente, pero tedioso. Tailscale se encarga del intercambio de llaves, el enrutamiento y el paso por NAT de forma automática, con una interfaz de administración limpia.

El modo cluster de PM2 importa. Correr Node.js en modo cluster permite reiniciar sin caídas durante los despliegues y aprovecha mejor la CPU. Vale la pena configurarlo desde el primer día.

Planifica la distribución de los discos. Decide desde el principio qué disco es para el sistema y cuál para los datos. Cambiarlo después es molesto.

Lo que sigue

  • Migrar una API de .NET 9 a su propio contenedor LXC dedicado
  • Mover PostgreSQL a un contenedor aparte para aislarlo mejor
  • Configurar Prometheus + Grafana para métricas de todos los contenedores
  • Respaldos automáticos de los contenedores con Proxmox Backup Server

La inversión total fue tiempo y electricidad. Si tienes una PC vieja juntando polvo, Proxmox es una de las cosas más valiosas que puedes hacer con ella.


Productos recomendados

Producto Uso Enlace
Beelink GTi13 Ultra Servidor nuevo para homelab Amazon
TP-Link TL-SG108E Switch de red Amazon
CyberPower CP1500PFCLCD UPS / protección eléctrica Amazon
Synology DS220+ NAS para almacenamiento redundante Amazon
WD Red Plus 4TB Discos para NAS Amazon
Samsung 64GB USB 3.1 Memoria USB de instalación Amazon

Aviso: algunos de los enlaces de arriba son de afiliado. Si compras a través de ellos, puedo ganar una pequeña comisión sin costo extra para ti.


Ricardo Gil es ingeniero de software full stack en el sur de Florida. Escribe sobre desarrollo de software, DevOps y homelabs.

¿Quieres algo así para tu negocio?

Instalo infraestructura privada y autoalojada en Proxmox: IA, automatización y herramientas internas en hardware que es tuyo, documentado y entregado. Ver el stack de IA privada →

¿No sabes qué necesitas? Agenda una llamada gratis.

📬Newsletter semanal

Recibe lo mejor de homelab e IA

Sin spam. Un correo por semana. Te das de baja cuando quieras.

Comparte este artículo