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

  1. Respalda tus datos: La instalación borrará el disco de la laptop.
  2. Arranca desde el USB: Accede al menú de arranque del BIOS/UEFI (teclas comunes: Esc, F2, F10, F12) y selecciona la USB.
  3. Sigue el instalador: Configura idioma, teclado y red.
  4. Particiona el disco: Elige usar todo el disco (fácil) o particionar manualmente (recomendado para aprender).
  5. Crea un usuario: Define tu nombre de usuario y una contraseña segura.
  6. Instala OpenSSH Server: ¡Muy importante para el acceso remoto!
  7. 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.

SW

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

192.168.1.100
Tu Servidor (IP Estática)
192.168.1.1
Router (Gateway)
8.8.8.8
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

↓ build

Imagen 🖼️

Plantilla de solo lectura (Ej: `nginx`)

↓ run

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`.

Host (Tu Laptop Servidor)

Servicio: n8n 🤖

Imagen: n8nio/n8n

Puerto: 5678:5678

Servicio: Postgres 🐘

Imagen: postgres:15

Puerto: (interno)

Red Docker: n8n_internal_network

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 cambia PermitRootLogin no y PasswordAuthentication 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).

Volver al Inicio