📋 Contexto

Como DevOps Engineer, siempre he querido tener un entorno de pruebas personal donde experimentar con tecnologías sin limitaciones. Comprar un servidor dedicado o mantener instancias EC2 corriendo 24/7 puede ser costoso, especialmente para proyectos personales de aprendizaje.

La solución: una notebook antigua que ya no usaba, con suficiente potencia para correr servicios básicos pero sin valor comercial. Perfecto para convertirlo en mi home lab personal.

🎯 Objetivo

Convertir una notebook antigua en un servidor funcional que pueda:

  • Correr 24/7 de forma confiable
  • Alojar servicios en containers Docker
  • Ser accesible desde internet de forma segura
  • Servir como plataforma de aprendizaje y experimentación
  • Consumir mínima energía eléctrica

🛠️ Hardware y Especificaciones

Notebook Base

  • Modelo: Lenovo (comprada a inicios del 2013, ~12 años de antigüedad)
  • CPU: Intel Celeron B970 (2 cores, 2.3 GHz, generación Sandy Bridge)
  • RAM: 4 GB DDR3
  • Storage: 512 GB SSD
  • Red: Ethernet 1 Gbps + WiFi
💡 Tip: No necesitas hardware potente para un home lab básico. Aunque el Celeron B970 es un procesador modesto de la generación Sandy Bridge, ofrece buen rendimiento para servicios en containers. Estas especificaciones son más que suficientes para correr Docker, n8n, Nginx y monitoreo.

Preparación del Hardware

  1. Limpieza física: Abrí la notebook, limpié ventiladores y apliqué pasta térmica nueva
  2. Configuración BIOS: Activé "power on after power failure" para auto-start
  3. Ventilación: Coloqué la notebook en posición elevada para mejor airflow
  4. Red: Conexión por cable Ethernet (más estable que WiFi)

⚙️ Problema Crítico: Cierre de Tapa

Un problema importante al usar una notebook como servidor: al cerrar la tapa, Debian suspende el sistema automáticamente y todos los servicios dejan de funcionar. Esto es un comportamiento por defecto en laptops, pero no deseable para un servidor.

Síntoma: Al cerrar la tapa de la notebook, el sistema entra en suspensión y el sitio web/servicios se vuelven inaccesibles hasta que vuelves a abrir la tapa.

Solución: Configurar systemd para Ignorar Cierre de Tapa

# Editar configuración de systemd
sudo nano /etc/systemd/logind.conf

# Descomentar y modificar estas líneas:
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

# Guardar y reiniciar el servicio
sudo systemctl restart systemd-logind

Con esta configuración, puedes cerrar la tapa de la notebook y el servidor continúa funcionando normalmente. La pantalla se apaga pero el sistema permanece activo.

💡 Tip de Temperatura: Durante los días frescos, cierro la tapa sin problemas. En días calurosos de verano, dejo la tapa abierta para mejor ventilación y evitar que el equipo se caliente. El hardware antiguo es más sensible a temperaturas elevadas.

💻 Instalación de Debian

¿Por qué Debian?

  • Estabilidad: Ideal para servidores que corren 24/7
  • Ligero: Sin GUI innecesaria, solo terminal
  • Soporte LTS: Actualizaciones de seguridad por años
  • Conocimiento transferible: Muy similar a Ubuntu Server

Proceso de Instalación

# 1. Descarga de ISO
# Debian 12 "Bookworm" - netinstall (imagen mínima)

# 2. Crear USB booteable con Balena Etcher

# 3. Instalación mínima:
# - Sin entorno de escritorio
# - SSH server: ✅
# - Standard system utilities: ✅

Configuración Inicial Post-Instalación

# Actualizar sistema
sudo apt update && sudo apt upgrade -y

# Instalar herramientas esenciales
sudo apt install -y vim curl wget git htop net-tools

# Configurar IP estática en router (reserva DHCP)
# O configurar en /etc/network/interfaces

# Instalar Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo usermod -aG docker $USER

# Instalar Docker Compose
sudo apt install docker-compose-plugin -y

🐳 Servicios Implementados

1. n8n - Plataforma de Automatización

Mi primer servicio: n8n self-hosted para crear workflows de automatización.

# docker-compose.yml básico
version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=secure_password
    volumes:
      - n8n_data:/home/node/.n8n
    restart: unless-stopped

volumes:
  n8n_data:

2. Nginx - Reverse Proxy

Para servir mi sitio web personal y otros servicios HTTP.

3. Sistema de Monitoreo Personalizado

Script en Python (sysmon.py) para monitorear recursos del servidor en tiempo real.

4. PostgreSQL

Base de datos para n8n y futuros proyectos.

🌐 Acceso Desde Internet: Cloudflare Tunnel

En lugar de abrir puertos en el router (inseguro y problemático con IP dinámica), usé Cloudflare Tunnel (anteriormente Argo Tunnel):

Ventajas de Cloudflare Tunnel

  • ✅ No requiere abrir puertos en el router
  • ✅ IP dinámica no es problema
  • ✅ SSL/TLS automático
  • ✅ DDoS protection incluido
  • ✅ Gratis para uso personal

Setup Básico

# Instalar cloudflared
curl -L --output cloudflared.deb \
  https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

# Autenticar
cloudflared tunnel login

# Crear tunnel
cloudflared tunnel create homelab

# Configurar routing
cloudflared tunnel route dns homelab mytechzone.dev

# Iniciar tunnel
cloudflared tunnel run homelab
⚠️ Seguridad: Aunque Cloudflare Tunnel es seguro, asegúrate de implementar autenticación en todos tus servicios (basic auth, OAuth, etc.).

📊 Monitoreo y Mantenimiento

Dashboard de Monitoreo

Creé un dashboard simple en HTML que muestra:

  • CPU, RAM, Disco en uso
  • Estado de containers Docker
  • Uptime del sistema
  • Network I/O

Script Python que actualiza el dashboard cada 30 segundos usando un servicio systemd.

Mantenimiento Automatizado

# Crontab para tareas automáticas
# Actualizar sistema semanalmente
0 3 * * 0 apt update && apt upgrade -y

# Limpiar Docker images antiguas
0 4 * * 0 docker system prune -af

# Backup de volúmenes Docker
0 2 * * * /home/user/scripts/backup_volumes.sh

💡 Consumo Eléctrico

Una ventaja inesperada: el consumo eléctrico es mínimo comparado con un servidor tradicional. El Celeron B970 es especialmente eficiente:

  • Notebook en idle: ~12-18W
  • Notebook bajo carga: ~30-40W
  • TDP del CPU: 35W (muy eficiente para 24/7)
  • Costo mensual: Aproximadamente $3-5 USD (dependiendo del precio de electricidad)
Comparación: Un servidor dedicado básico consume 50-150W y cuesta $50-100/mes en hosting. Mi solución cuesta menos de $5/mes en electricidad. El Celeron B970, aunque modesto, es ideal para este uso 24/7 por su bajo consumo.

🎓 Aprendizajes y Experimentos

Este home lab me ha permitido experimentar con:

  • Docker y Docker Compose en un entorno real
  • Nginx como reverse proxy
  • Cloudflare Tunnel y CDN
  • Systemd para servicios persistentes
  • Scripting en Bash y Python para automatización
  • Troubleshooting de networking y containers
  • Monitoreo y observabilidad básica

🐛 Problemas Comunes y Soluciones

1. Notebook se suspende al cerrar la tapa (CRÍTICO)

Problema: Al cerrar la tapa de la notebook, Debian la suspende automáticamente y todos los servicios dejan de funcionar.

Solución: Configurar systemd-logind para ignorar el cierre de tapa:

# Editar configuración de systemd-logind
sudo nano /etc/systemd/logind.conf

# Descomentar y modificar estas líneas:
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

# Reiniciar servicio
sudo systemctl restart systemd-logind

# Verificar configuración
cat /etc/systemd/logind.conf | grep -i lid
⚠️ Gestión de temperatura: Cerrar la tapa puede aumentar la temperatura interna. Recomendación: solo cerrar la tapa en días frescos. En verano o días calurosos, dejar la tapa abierta para mejor ventilación y evitar sobrecalentamiento del equipo.

2. Servidor no responde después de un apagón

Solución: Configurar en BIOS "Restore on AC/Power Loss" a "Power On"

3. IP cambia constantemente (DHCP)

Solución: Reservar IP en el router usando la MAC address del servidor

4. Containers se detienen inesperadamente

Solución: Agregar restart: unless-stopped en docker-compose.yml

5. Disco se llena rápidamente

Solución: Limpiar logs de Docker y configurar log rotation

# Configurar log rotation en /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

✅ Resultado Final

Después de varias semanas de configuración y ajustes, tengo un servidor funcional que:

  • ✅ Corre 24/7 con uptime de ~99%
  • ✅ Aloja mi sitio web personal: mytechzone.dev
  • ✅ Ejecuta n8n para automatizaciones personales
  • ✅ Tiene dashboard de monitoreo en tiempo real
  • ✅ Es accesible desde internet de forma segura
  • ✅ Cuesta menos de $5/mes en electricidad
  • ✅ Me sirve como laboratorio de aprendizaje continuo
URLs del proyecto:
• Sitio web: mytechzone.dev
• Server status: mytechzone.dev/status.html
• n8n: n8n.mytechzone.dev

🚀 Próximos Pasos

Mi home lab es un trabajo en progreso. Próximas mejoras planeadas:

  1. Implementar Prometheus + Grafana para métricas avanzadas
  2. Agregar sistema de alertas vía Telegram
  3. Backups automatizados a AWS S3
  4. Experimentar con Kubernetes (k3s)
  5. CI/CD pipeline con GitHub Actions

💭 Conclusión

Convertir una notebook antigua en un servidor home lab ha sido una de las mejores decisiones para mi aprendizaje como DevOps Engineer. No solo me permite experimentar con tecnologías sin costos significativos, sino que también me da experiencia práctica en troubleshooting, administración de sistemas y arquitectura de servicios.

Si estás considerando crear tu propio home lab, mi consejo es: empieza simple. No necesitas hardware costoso ni configuraciones complejas. Una máquina vieja, Docker, y ganas de aprender son suficientes para comenzar.

En próximos posts, profundizaré en cada componente: instalación detallada de n8n, sistema de monitoreo con Python, configuración de Cloudflare Tunnel, y más.