Mini Curso Interactivo: Tu Servidor Local
Bienvenido a esta guía interactiva para instalar y mantener tu propio servidor en una laptop en desuso. El objetivo es transformar ese hardware que no usas en una potente herramienta para tus proyectos. Navega a través de los módulos usando el menú de la izquierda para aprender paso a paso, desde los conceptos básicos hasta el despliegue de aplicaciones con Docker y las mejores prácticas de seguridad.
¿Por qué usar una laptop vieja como servidor?
⚡ Bajo Consumo
Las laptops son eficientes energéticamente, lo que reduce costos operativos en comparación con un PC de escritorio.
🔋 UPS Incorporada
La batería actúa como un sistema de alimentación ininterrumpida (UPS), protegiendo tu servidor de apagones cortos.
🤫 Compacto y Silencioso
Su diseño compacto y operación silenciosa lo hacen ideal para un entorno doméstico o de oficina.
Módulo 1: Preparando el Terreno
Antes de instalar, es crucial elegir el sistema operativo (SO) adecuado y preparar el medio de instalación. Aquí comparamos las dos opciones más populares para servidores y te mostramos cómo crear un USB booteable.
Ubuntu Server vs. Debian
Ambas son excelentes distribuciones de Linux para servidores, estables y con gran soporte. La elección a menudo se reduce a preferencias personales. Ubuntu Server es conocido por ser más amigable para principiantes, mientras que Debian es famoso por su estabilidad de roca.
Creación de USB Booteable
Para instalar el SO en tu laptop, necesitas "flashear" la imagen de instalación (archivo .iso) en una memoria USB. Esto convierte la USB en un disco de arranque.
Paso 1: Descargar la ISO
Descarga la imagen "Server" de Ubuntu o "netinst" de Debian desde sus sitios oficiales.
Paso 2: Usar una Herramienta de Flasheo
Utiliza software como BalenaEtcher (multiplataforma) o Rufus (Windows) para escribir la ISO en tu USB.
Paso 3: ¡Listo para Instalar!
Tu USB está preparado para arrancar la laptop e iniciar el proceso de instalación.
Módulo 2: Instalación de Linux
Con el USB booteable listo, es hora de instalar el sistema operativo. El proceso implica arrancar desde el USB, seguir las instrucciones del instalador y tomar decisiones clave sobre el particionamiento del disco.
Proceso de Instalación General
- Respalda tus datos: La instalación borrará el disco de la laptop.
- Arranca desde el USB: Accede al menú de arranque del BIOS/UEFI (teclas comunes: Esc, F2, F10, F12) y selecciona la USB.
- Sigue el instalador: Configura idioma, teclado y red.
- Particiona el disco: Elige usar todo el disco (fácil) o particionar manualmente (recomendado para aprender).
- Crea un usuario: Define tu nombre de usuario y una contraseña segura.
- Instala OpenSSH Server: ¡Muy importante para el acceso remoto!
- Finaliza y reinicia: Retira la USB cuando se te indique.
Entendiendo el Particionamiento de Disco
Particionar manualmente el disco te da más control y seguridad. Separa el sistema operativo de tus datos personales. Aquí tienes un esquema recomendado para un servidor básico.
Partición Raíz (/)
Contiene el sistema operativo y los programas. Tamaño recomendado: 15-30 GB.
Partición de Intercambio (Swap)
Actúa como memoria RAM virtual cuando la física se agota. Tamaño recomendado: Igual a la cantidad de RAM (hasta 8 GB).
Partición Home (/home)
Almacena tus archivos personales y configuraciones. Tamaño recomendado: El resto del espacio en disco.
Módulo 3: Dominando la Terminal
La terminal es tu principal herramienta para administrar el servidor. Aprender los comandos básicos es esencial. Aquí tienes una lista de los comandos más importantes que usarás a diario.
# Muestra el directorio actual
pwd
# Lista archivos y directorios (con detalles y en formato legible)
ls -lh
# Cambia al directorio /var/log
cd /var/log
# Crea un nuevo directorio
mkdir mi_directorio
# Crea un archivo vacío
touch mi_archivo.txt
# Copia un archivo
cp mi_archivo.txt copia.txt
# Mueve o renombra un archivo
mv mi_archivo.txt /home/usuario/
# Elimina un archivo (¡con cuidado!)
rm mi_archivo.txt
# Muestra el contenido de un archivo
cat /etc/hostname
# Busca texto en un archivo
grep "error" /var/log/syslog
# Actualiza la lista de paquetes disponibles
sudo apt update
# Actualiza todos los paquetes instalados
sudo apt upgrade
# Instala un paquete (ej: el monitor de sistema htop)
sudo apt install htop
# Elimina un paquete
sudo apt remove htop
# Elimina paquetes y sus archivos de configuración
sudo apt purge htop
# Elimina dependencias que ya no se usan
sudo apt autoremove
# Muestra los procesos en ejecución
htop
# Muestra el estado de un servicio (ej: ssh)
systemctl status sshd
# Inicia un servicio
sudo systemctl start sshd
# Detiene un servicio
sudo systemctl stop sshd
# Reinicia un servicio
sudo systemctl restart sshd
# Habilita un servicio para que inicie en el arranque
sudo systemctl enable sshd
# Deshabilita un servicio en el arranque
sudo systemctl disable sshd
Módulo 4: Configuración de Red
Para que tu servidor sea accesible de forma fiable en tu red local, necesitas asignarle una dirección IP estática. Esto evita que su dirección cambie cada vez que se reinicia. Usaremos Netplan, la herramienta moderna de Ubuntu para configurar redes.
Anatomía de una Configuración de Red
Tu Servidor (IP Estática)
Router (Gateway)
Internet (DNS)
Tu servidor usa el Gateway (router) para salir a Internet y el DNS para traducir nombres como 'google.com' a direcciones IP.
Ejemplo de Configuración Netplan (IP Estática)
Este es un ejemplo de cómo se vería un archivo de configuración de Netplan (ubicado en /etc/netplan/
) para asignar una IP estática. Recuerda adaptar los valores a tu propia red.
network:
version: 2
ethernets:
# Reemplaza 'ens33' por el nombre de tu interfaz de red
ens33:
dhcp4: no
addresses:
# Elige una IP fuera del rango DHCP de tu router
- 192.168.1.100/24
routes:
- to: default
# La IP de tu router
via: 192.168.1.1
nameservers:
# Servidores DNS públicos
addresses: [8.8.8.8, 1.1.1.1]
Después de guardar este archivo, aplica la configuración con sudo netplan apply
.
Módulo 5: Introducción a Docker 🐳
Docker revoluciona cómo desplegamos aplicaciones. En lugar de instalar software directamente en tu servidor, lo empaquetas en "contenedores" aislados y portátiles. Esto simplifica la gestión de dependencias y asegura que tus aplicaciones funcionen igual en cualquier lugar.
Conceptos Clave de Docker
Dockerfile
Receta para construir la imagen
Imagen 🖼️
Plantilla de solo lectura (Ej: `nginx`)
Contenedor A 🟢
Instancia en ejecución
Contenedor B 🟢
Otra instancia aislada
Comandos Docker Esenciales
Estos son los comandos básicos para empezar a trabajar con Docker.
# Descarga una imagen (ej: nginx)
docker pull nginx
# Ejecuta un contenedor desde una imagen
# -d: modo detached (segundo plano)
# -p 8080:80: mapea puerto_host:puerto_contenedor
# --name: asigna un nombre
docker run -d -p 8080:80 --name mi-web nginx
# Lista los contenedores en ejecución
docker ps
# Lista todos los contenedores (incluyendo los detenidos)
docker ps -a
# Muestra los logs de un contenedor
docker logs mi-web
# Detiene un contenedor
docker stop mi-web
# Inicia un contenedor detenido
docker start mi-web
# Elimina un contenedor (debe estar detenido)
docker rm mi-web
# Lista las imágenes locales
docker images
# Elimina una imagen
docker rmi nginx
Módulo 6: Despliegue de n8n con Docker Compose
n8n es una potente herramienta de automatización de flujos de trabajo que puedes auto-hospedar. La mejor forma de desplegarla, junto con su base de datos PostgreSQL, es usando Docker Compose. Esta herramienta te permite definir y gestionar aplicaciones multi-contenedor con un único archivo de configuración.
Arquitectura del Despliegue
Así es como se conectan los servicios, volúmenes y redes en nuestro `docker-compose.yml`.
Servicio: n8n 🤖
Imagen: n8nio/n8n
Puerto: 5678:5678
Servicio: Postgres 🐘
Imagen: postgres:15
Puerto: (interno)
Volumen: n8n_app_data 💾
Persiste workflows y credenciales.
Volumen: n8n_postgres_data 💾
Persiste la base de datos.
Archivo docker-compose.yml
Crea este archivo en un directorio (ej: ~/n8n_server
) y ejecútalo con docker compose up -d
. Recuerda cambiar las contraseñas.
version: '3.8'
services:
postgres:
image: postgres:15
container_name: n8n_postgres_db
restart: always
environment:
POSTGRES_USER: n8nuser
POSTGRES_PASSWORD: TU_CONTRASENA_SEGURA_POSTGRES
POSTGRES_DB: n8ndatabase
volumes:
- n8n_postgres_data:/var/lib/postgresql/data
networks:
- n8n_internal_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8nuser -d n8ndatabase"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: n8nio/n8n:latest
container_name: n8n_application
restart: always
ports:
- "5678:5678"
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: n8nuser
DB_POSTGRESDB_PASSWORD: TU_CONTRASENA_SEGURA_POSTGRES
DB_POSTGRESDB_DATABASE: n8ndatabase
GENERIC_TIMEZONE: "America/Mexico_City"
volumes:
- n8n_app_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
networks:
- n8n_internal_network
volumes:
n8n_postgres_data:
n8n_app_data:
networks:
n8n_internal_network:
driver: bridge
Módulo 7: Mantenimiento Básico
Un servidor necesita cuidados para funcionar de forma óptima y segura. Las tareas de mantenimiento regulares incluyen actualizar el sistema, monitorizar los recursos, revisar los logs y realizar copias de seguridad.
🔄 Actualizaciones del Sistema
Mantén tu sistema seguro aplicando las últimas actualizaciones de seguridad y software.
sudo apt update && sudo apt upgrade -y
📊 Monitorización de Recursos
Vigila el uso de CPU, RAM y disco para detectar problemas de rendimiento.
# Uso de CPU/RAM (interactivo)
htop
# Uso de RAM
free -h
# Uso de Disco
df -h
📜 Revisión de Logs
Los logs son tu primera fuente de información para diagnosticar problemas.
# Ver logs del sistema con detalles de error
journalctl -xe
# Ver logs de un servicio (ej: docker)
journalctl -u docker.service
# Ver logs de un contenedor docker
docker compose logs n8n
💾 Copias de Seguridad
Protege tus datos. La estrategia más segura es respaldar los volúmenes de Docker.
Este comando (ejecutado después de docker compose stop n8n
) crea un backup comprimido del volumen de datos de n8n.
docker run --rm \
-v n8n_server_n8n_app_data:/data \
-v $(pwd)/backups:/backup \
alpine \
tar czvf /backup/n8n-backup.tar.gz -C /data .
Módulo 8: Seguridad Esencial
La seguridad no es opcional. Estos pasos fundamentales te ayudarán a proteger tu servidor de accesos no autorizados y ataques automatizados. Es un checklist básico pero poderoso.
🛡️ Checklist de Seguridad del Servidor
-
1.
Asegurar Acceso SSH
Deshabilita el login de `root` y usa autenticación por claves en lugar de contraseñas. Edita
/etc/ssh/sshd_config
y cambiaPermitRootLogin no
yPasswordAuthentication no
. -
2.
Configurar Firewall con UFW
Bloquea todo el tráfico entrante por defecto y permite solo los servicios necesarios (SSH y n8n).
sudo ufw default deny incoming sudo ufw allow ssh sudo ufw allow 5678/tcp sudo ufw enable
-
3.
Instalar Fail2Ban
Protege tu servidor de ataques de fuerza bruta automatizados contra SSH. Fail2Ban banea temporalmente las IPs que fallan al iniciar sesión repetidamente.
sudo apt install fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban
-
4.
Usar Contraseñas Fuertes
Asegúrate de que la contraseña de tu usuario de sistema, de la base de datos y de n8n sean largas, complejas y únicas.
Módulo 9: ¿Qué Sigue?
¡Felicidades! Has cubierto todos los fundamentos para poner en marcha y mantener un servidor local seguro y funcional. Has adquirido una base sólida en administración de sistemas Linux, Docker y seguridad básica. Este es un excelente punto de partida para proyectos más ambiciosos.
Pistas para Aprendizaje Futuro
El mundo de la administración de sistemas es vasto. Aquí tienes algunas ideas para seguir aprendiendo y mejorar tu servidor:
Proxy Inverso (Nginx/Traefik)
Aprende a usar un proxy inverso para gestionar múltiples servicios web en tu servidor y para manejar certificados SSL/TLS, permitiendo el acceso seguro a través de HTTPS.
Automatización con Ansible
Usa herramientas como Ansible para automatizar la configuración de tu servidor. Esto te permite replicar tu configuración fácilmente y mantenerla consistente.
Monitorización Avanzada
Explora herramientas como Prometheus y Grafana para crear dashboards de monitorización detallados y personalizados para tu servidor y aplicaciones.
Redes de Docker Avanzadas
Profundiza en los diferentes tipos de redes de Docker y aprende a crear topologías más complejas para aislar y conectar tus aplicaciones de forma segura.
Estrategias de Backup Mejoradas
Investiga cómo usar `pg_dump` para realizar backups consistentes de tu base de datos PostgreSQL y cómo automatizar todo el proceso de copia de seguridad con scripts y `cron`.
Explora más Servicios
Ahora que tienes la plataforma, ¡experimenta! Despliega otros servicios auto-hospedables como un servidor de medios (Jellyfin), un gestor de archivos (Nextcloud) o un blog (Ghost).