Appearance
Preparando el sistema tu HomeLab
Servidor doméstico local y/o virtual con Linux Debian
Si cuentas una buena máquina, que tenga alta capacidad de memoria, puedes plantearte tener disponible tu propio servidor doméstico.
Abordaremos ciertas pautas y pasos para lograr un HomeLab de base a partir de Linux Debian. Para ello, iremos directo a la configuración teniendo como prerrequisito el sistema previamente instalado.
Puedes verificar otros artículos que he publicado sobre el sistema operativo y otras tecnologías que usaremos para comenzar con el HomeLab:
- Entorno Linux
- Contenedores Docker
- Gestor Web con Portainer
- Servidor Web con Caddy
- Servidor de archivos con Copyparty
- Flujos de trabajo con n8n
Sobre uso de máquina Virtual
Si tienes Windows, es posible usar máquinas virtuales con sowftware como VMWare Workstation Pro o VirtualBox. De este modo puedes configurar el sistema Linux Debian y seguir los pasos. De hecho, al usar tu máquina virtual con estas herramientas, puedes considerar una distribución con un entorno gráfico ligero como Q4OS, la cual ocupa una base de memoria de tan solo 580 MB en RAM y es derivada de Linux Debian.
También podrías adquirir un servicio privado virtual (VPS) o instancias de compunto a través de proveedores como AWS y otros.
Si usas una máquina virtual con software como VMWare Workstation Pro, asegurate que el adaptador de red este cofigurado como puente (Bridge). Además, allí mismo se recomienda habilitar opción Replicar el estado de la conexión de red física (Replicate physical network connection state). Puedes obtener y verificar la IP ejecutando:
bash
ip addr showNormlamente identificas la IP con el daptador de red
ens33
En cualquier escenario, para seguir la configuración de esta guía será necesario tener disponible una máquina aprovisonada con Linux Debian o deriviados y habiliar la red.
Comenzando la configuración en Linux
Una vez instalada tu máquina con Linux Debian, verifiquemos instalación de paquetes esenciales ejecutando las siguientes líneas:
bash
sudo apt update && sudo apt upgrade -y
sudo apt install curl wget git neovim -yPara preparar el acceso a la máquina, debemos configurar el hostname, por ejemplo, ejecutando:
bash
sudo hostnamectl set-hostname homelab
sudo systemctl restart systemd-hostnamedPodemo habilitar mDNS, con el demonio avahi, para resolver el dominio localmente, ejecutando:
bash
sudo apt install avahi-daemon avahi-utils -y
sudo systemctl start avahi-daemonSi estas usando máquina virtual desde Windows, debes editar
C:\Windows\System32\drivers\etc\hostsagregando la dirección IP y el domino, por ejemplo:192.168.1.2 homelab.lan(prueba leugo conping)
Servicios y utilidades a instalar
Para mejorar las prestaciones o capacidades podemos instalar otros servicios, Además, continuaremos incluyendo paquetes inciales para certificados, GnuPG, docker, y alguno otro.
SSH
bash
sudo apt install openssh-server -y
sudo systemctl status sshSi es necesario activar el servicio ejecuta:
sudo systemctl start ssh && sudo systemctl enable ssh
Pudes configurar
dnsmasq
bash
sudo apt install dnsmasq -y
dnsmasq --versionPara los subdominios que se definan, debes editar el archivo /etc/dnsmasq.conf, por ejemplo, teniendo un contenido como el siguiente:
bash
domain-needed
bogus-priv
expand-hosts
domain=homelab.lan # Domain
local=/homelab.lan/
address=/homelab.lan/192.168.1.2 # IP for VM
address=/portainer.homelab.lan/192.168.1.2 # Subddomain
address=/copyparty.homelab.lan/192.168.1.2 # Subddomain
address=/n8n.homelab.lan/192.168.1.2 # Subddomain
listen-address=192.168.1.2 # IP for Listening
bind-interfacesAgrega subdominios según necesites mediante
address=/.../...
Recuerda cambiar la IP por la obtenida con:ip addr show
Luego ejecutamos:
bash
sudo systemctl restart dnsmasqDocker
Utiliza las siguientes sentencias para instalar Docker:
bash
sudo apt install apt-transport-https ca-certificates software-properties-common -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
sudo usermod -aG docker $USER
newgrp dockerPortainer
Utiliza las siguientes sentencias para instalar Portainer:
bash
docker network create homelab
docker volume create portainer_data
docker run -d -p 9000:9000 -p 9444:9443 \
--name portainer \
--network homelab --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest \Caddy con certificados locales
Primero, creamos la estructura de directorios:
bash
mkdir -p ~/wsconfCreamos un archivo ~/wsconf/Caddyfile con configuración para certificados locales:
groovy
{
# Configuración global para CA local
local_certs
admin off
}
# Sitio principal
homelab.lan {
respond "Welcome to HomeLab" 200
tls internal
}
# Portainer
portainer.homelab.lan {
reverse_proxy portainer:9000
tls internal
}
# Copyparty
copyparty.homelab.lan {
reverse_proxy copyparty:3923
tls internal
}
# n8n
n8n.homelab.lan {
reverse_proxy n8n:5678
tls internal
}Nótese que usamos una configuración global, luego se define el sitio principal de bienvenida y después los bloques por cada servicio que se incluya.
Para establecer el contenedor ejecutamos:
bash
docker volume create caddy_data
docker run -d -p 80:80 -p 443:443 \
--name caddy \
--network homelab --restart always \
-v $PWD/wsconf:/etc/caddy \
-v caddy_data:/data \
caddyInstalar certificado CA local
Para que el navegador confíe en los certificados, debemos instalar la CA de Caddy, usando los siguientes comandos:
bash
docker cp caddy:/data/caddy/pki/authorities/local/root.crt /tmp/caddy-root.crt
sudo cp /tmp/caddy-root.crt /usr/local/share/ca-certificates/caddy-root.crt
sudo update-ca-certificatesSe extrae certificado CA de Caddy, se copia al sistema y se actualizan certificados
Copyparty
Primero se define archivo de configuració de Copyparty en la ruta ~/wsconf/copyparty.conf con el siguiente contenido:
ini
[/]
./
accs:
rw: *Utiliza las siguientes sentencias para instalar Copyparty:
bash
mkdir -p ~/wsroot
docker run -d -p 3923:3923 \
--name copyparty \
--network homelab --restart always \
-v $PWD/wsroot:/w \
-v $PWD/wsconf:/cfg \
copyparty/ac:latest
wsrootrepresenta la carpeta compartida
n8n
Utiliza las siguientes sentencias para instalar n8n:
bash
docker volume create n8n
docker run -d \
--name n8n \
--network homelab --restart always \
-p 5678:5678 \
-v n8n:/home/node/.n8n \
n8nio/n8nConfiguración del cliente (Windows)
Para acceder desde Windows con certificados válidos:
1. Configurar DNS
Editar C:\Windows\System32\drivers\etc\hosts como administrador para incluir un bloque como el siguiente:
192.168.1.2 homelab.lan
192.168.1.2 portainer.homelab.lan
192.168.1.2 copyparty.homelab.lan
192.168.1.2 n8n.homelab.lanDe modo semejante, al interior del sistema Linux se ussaría el archivo
/etc/hosts
2. Instalar certificado CA
Requerda que en la máquina virtual Linux, se debe haber obtenido el certificado: docker cp caddy:/data/caddy/pki/authorities/local/root.crt /tmp/caddy-root.crt
Puedes transferir a Windows (via SCP, compartir carpeta, etc.), y desde el sistema anfitrión hacer lo siguiente:
- Doble clic en
caddy-root.crt - Clic en botón "Instalar certificado..."
- Para ubicación del almacén elegir "Equipo local"
- Luego "Colocar todos los certificados en el siguiente almacén"
- "Examinar" y seleccionar "Entidades de certificación raíz de confianza"
- "Siguiente" y "Finalizar"
3. Verificar funcionamiento
Si necesitas reiniciar la configuración, recuerda usar los siguientes comandos:
bash
docker restart caddy
sudo systemctl restart dnsmasq
docker logs caddyPrueba acceder con HTTPS válido desde el navegador consultando:
https://homelab.lanhttps://portainer.homelab.lanhttps://copyparty.homelab.lanhttps://n8n.homelab.lan
4. Alternativa para cliente macOS
Si tienes un equipo con macOS en la red, prueba lo siguiente:
- Configura la IP y nombres de dominio/subdominios en archivo
/etc/hosts - Transfiere el archivo del certificado
caddy-root.crt. Puedes usar la conexion insergura primero y con Copyparty descargar ese archivo si esta disponible en su ruta de archivos) - Importa el certificado en macOS. Para ello, se puede dar doble clic en el archivo
caddy-root.crt. - En la ventana de "Acceso a Llaveros" se debe seleccionar el llavero "Sistema" y agregarlo.
- Se solicitará la contraseña de "admin" para que la ingreses.
- Revisa que se indique "Confiar siempre" en el certificado agregado.
- Prueba el dominio/subdominios desde un navegador.
Diferencias al usar VPS con proveedor de nube
Si implementas esta configuración en un VPS con proveedores como AWS, Vultr o servicios de hosting, los cambios principales serían:
Certificados SSL reales
En lugar de certificados locales, usar Let's Encrypt para certificados válidos públicamente en archivo de configuración Caddyfile. Veamos:
groovy
yourdomain.com {
reverse_proxy localhost:3000
}
portainer.yourdomain.com {
reverse_proxy localhost:9000
}
copyparty.yourdomain.com {
reverse_proxy localhost:3923
}
n8n.yourdomain.com {
reverse_proxy localhost:5678
}
yourdomain.comrepresenta el dominio respectivo
DNS público
- No usar dnsmasq: Los subdominios se configuran en el proveedor DNS (Cloudflare, Route53, etc.)
- Registros A: Apuntar subdominios a la IP pública del VPS
- Firewall: Configurar reglas para puertos 80, 443, 22
Seguridad adicional
Verificar o instalar UFW:
bash
sudo apt update
sudo apt install ufw -y
sudo ufw statusConfigurar firewall UFW:
bash
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enableEvitar que Docker use iptables, editando archivo /etc/docker/daemon.json y agregando el siguiente contenido json:
json
{
"iptables": false
}Para que el cambio tenga efecto, reinicia Docker así:
sudo systemctl restart docker
Cambiar puerto SSH por seguridad y deshabilitar autenticación por contraseña:
bash
sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
sudo systemctl restart ssh
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_configBackup y monitoreo
Incorpora un backup automático de volúmenes Docker.
bash
docker run --rm -v portainer_data:/data -v $PWD:/backup alpine tar czf /backup/portainer-backup.tar.gz /dataPara monitoreo considera Uptime Kuma:
bash
docker run -d -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1Ventajas del VPS
- Acceso global: Disponible desde cualquier lugar
- Certificados válidos: Sin configuración manual de CA
- IP estática: No cambia como en redes domésticas
- Ancho de banda: Mejor conectividad que conexiones domésticas
- Uptime: Mayor disponibilidad que equipos domésticos
La elección entre HomeLab local y VPS depende de tus necesidades de acceso, presupuesto y preferencias de control sobre la infraestructura.
Consideraciones adicionales para tu HomeLab
- Energía: Considera un UPS para evitar cortes de energía
- Red: Usa un router para tu propia red, o bien, una red cableada para mejor estabilidad
- Seguridad: Mantén el sistema actualizado considerando prácticas de seguridad
- Backup: Implementa estrategias de respaldo para datos importantes
- Monitoreo: Considera herramientas para monitorear el estado del sistema y servicios
- Experimentación: Usa el HomeLab para probar nuevas tecnologías y configuraciones
De hecho, puedes agregar, por ejemplo, servicio para Supabase, Redis, servicio de IA local con Ollama y tecnologías de tu preferencia.
En el caso de Supabase, con Docker Compose se crea una red propia y el contenedor del Dashboard sería supabase-kong. Para ello recuerda agregar /etc/dnsmasq.conf un subdominio supabase.homelab.lan y configura en Caddyfile lo siguiente:
groovy
supabase.homelab.lan {
reverse_proxy supabase-kong:8000
tls internal
}