📋 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
Preparación del Hardware
- Limpieza física: Abrí la notebook, limpié ventiladores y apliqué pasta térmica nueva
- Configuración BIOS: Activé "power on after power failure" para auto-start
- Ventilación: Coloqué la notebook en posición elevada para mejor airflow
- 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.
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.
💻 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
📊 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)
🎓 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
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
• Sitio web: mytechzone.dev
• Server status: mytechzone.dev/status.html
• n8n: n8n.mytechzone.dev
📚 Recursos Útiles
🚀 Próximos Pasos
Mi home lab es un trabajo en progreso. Próximas mejoras planeadas:
- Implementar Prometheus + Grafana para métricas avanzadas
- Agregar sistema de alertas vía Telegram
- Backups automatizados a AWS S3
- Experimentar con Kubernetes (k3s)
- 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.