2.2 Instarlar n8n en vps (hostinger) Actualizado

Wishlist Share
Share Course
Page Link
Share On Social Media

About Course

Última actualización: Julio 2025

Configuración: n8n + PostgreSQL + Traefik + SSL automático (Letsencript)

Requisitos Previos

Configuración del Servidor

Paso 1: Instalar imagen ubuntu

  1. Sistema Operativo: Ubuntu 24.04 LTS

Configuración Inicial del Servidor

Paso 1: Conectar por SSH

ssh root@TU_IP_DE_VPS

Paso 2: Actualizar Sistema

apt update && apt upgrade -y

Nota: Si aparece una ventana de configuración de OpenSSH, seleccionar "keep the local version currently installed" usando las flechas ↓ y presionar Enter.

image.png

 

Paso 3: Crear Usuario No-Root

# Crear usuario
adduser n8nuser

# Agregar a grupo sudo
usermod -aG sudo n8nuser

# Cambiar a nuevo usuario
su - n8nuser

image.png

 

Instalación de Docker

Paso 4: Instalar Docker y Docker Compose

# Instalar dependencias
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# Agregar clave GPG de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Agregar repositorio Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instalar Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Instalar Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Agregar usuario al grupo docker
sudo usermod -aG docker $USER
newgrp docker

Configuración de la Estructura de Archivos

Paso 5: Crear Directorios

# Crear estructura de directorios
mkdir -p ~/n8n-stack/{traefik,n8n,postgres}
cd ~/n8n-stack

# Crear directorios para datos persistentes
mkdir -p traefik/data
mkdir -p traefik/config
mkdir -p n8n/data
mkdir -p postgres/data

Paso 6: Configurar Traefik

Crear archivo de configuración principal:

nano traefik/traefik.yml

Contenido del archivo:

# Traefik Configuration
global:
  checkNewVersion: false
  sendAnonymousUsage: false

api:
  dashboard: true
  debug: true
  insecure: false

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entrypoint:
          to: websecure
          scheme: https
          permanent: true
  websecure:
    address: ":443"

certificatesResolvers:
  letsencrypt:
    acme:
      tlsChallenge: {}
      email: tu-email@ejemplo.com  # CAMBIAR POR TU EMAIL
      storage: /letsencrypt/acme.json
      caServer: https://acme-v02.api.letsencrypt.org/directory

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
  file:
    filename: /config/dynamic.yml
    watch: true

log:
  level: INFO

Crear configuración dinámica:

nano traefik/config/dynamic.yml

Contenido del archivo:

# Dynamic Configuration
http:
  middlewares:
    secure-headers:
      headers:
        accessControlAllowMethods:
          - GET
          - OPTIONS
          - PUT
        accessControlMaxAge: 100
        hostsProxyHeaders:
          - "X-Forwarded-Host"
        referrerPolicy: "same-origin"
        sslRedirect: true
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000

Configuración de Docker Compose

Paso 7: Generar Password Hash para Traefik

# Instalar herramientas
sudo apt install -y apache2-utils

# Generar hash (reemplazar 'tupassword' por tu password real)
htpasswd -nb admin tupassword

Ejemplo de salida:

admin:$apr1$n33ZsPF2$ibyAnDwObZ3OCEnpgfMqn.

image.png

 

Copiar este hash para usarlo en el siguiente paso.

 

Queda..

admin:$$apr1$$n33ZsPF2$$ibyAnDwObZ3OCEnpgfMqn.

Paso 8: Crear docker-compose.yml

nano docker-compose.yml

Contenido del archivo:

networks:
  traefik:
    external: true
  internal:
    external: false

volumes:
  postgres_data:
  n8n_data:

services:
  # Traefik Reverse Proxy
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - traefik
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik/traefik.yml:/traefik.yml:ro
      - ./traefik/config:/config:ro
      - ./traefik/data:/letsencrypt
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.rule=Host(`traefik.tu-dominio.com`)"  # CAMBIAR DOMINIO
      - "traefik.http.routers.traefik.middlewares=traefik-auth"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$n33ZsPF2$$ibyAnDwObZ3OCEnpgfMqn."  # CAMBIAR POR TU HASH

  # PostgreSQL Database
  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    networks:
      - internal
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: TU_PASSWORD_SEGURO_POSTGRES  # CAMBIAR PASSWORD
      POSTGRES_NON_ROOT_USER: n8n
      POSTGRES_NON_ROOT_PASSWORD: TU_PASSWORD_SEGURO_POSTGRES  # CAMBIAR PASSWORD
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U n8n -d n8n']
      interval: 10s
      timeout: 5s
      retries: 5

  # n8n Application
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    networks:
      - traefik
      - internal
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      # Database
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: TU_PASSWORD_SEGURO_POSTGRES  # CAMBIAR PASSWORD

      # n8n Configuration
      N8N_HOST: n8n.tu-dominio.com  # CAMBIAR DOMINIO
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://n8n.tu-dominio.com  # CAMBIAR DOMINIO

      # Timezone
      GENERIC_TIMEZONE: Europe/Berlin
      TZ: Europe/Berlin

      # Security
      N8N_SECURE_COOKIE: true
      N8N_LOG_LEVEL: info

      # Features
      N8N_USER_MANAGEMENT_DISABLED: false
      N8N_PERSONALIZATION_ENABLED: true
      N8N_VERSION_NOTIFICATIONS_ENABLED: true
      N8N_DIAGNOSTICS_ENABLED: false
      N8N_PUBLIC_API_DISABLED: false

      # Performance
      EXECUTIONS_PROCESS: main
      EXECUTIONS_MODE: regular

    volumes:
      - n8n_data:/home/node/.n8n
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.n8n.entrypoints=websecure"
      - "traefik.http.routers.n8n.rule=Host(`n8n.tu-dominio.com`)"  # CAMBIAR DOMINIO
      - "traefik.http.routers.n8n.tls=true"
      - "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
      - "traefik.http.services.n8n.loadbalancer.server.port=5678"
      - "traefik.http.routers.n8n.middlewares=secure-headers@file"

Paso 9: Configurar Permisos y Redes

# Crear archivo para certificados SSL
touch traefik/data/acme.json
chmod 600 traefik/data/acme.json

# Crear red de Traefik
docker network create traefik

Paso 10: Configurar Firewall

# Configurar ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

Paso 11: Configurar DNS (Solo si tienes dominio)

Configurar estos registros DNS en tu proveedor de dominio:

Para generar subdominio y apuntarlo hacia tu dirección IP de tu servidor, ir a administrador de DNS y generar nuevo registro tipo A especificando el subdominio apuntando a la dirección IP de tu VPS

image.png

 

Tipo A: n8n.tu-dominio.com → IP_DE_TU_LINODE
Tipo A: traefik.tu-dominio.com → IP_DE_TU_LINODE

Iniciar los Servicios

Paso 12: Verificar y Iniciar

# Verificar configuración
docker-compose config

# Iniciar servicios
docker-compose up -d

# Verificar estado
docker-compose ps

Resultado esperado (sin warnings):

NAME           IMAGE                COMMAND                  SERVICE    CREATED          STATUS                    PORTS
n8n            n8nio/n8n:latest     "tini -- /docker-ent…"   n8n        43 seconds ago   Up 32 seconds             5678/tcp
n8n-postgres   postgres:15-alpine   "docker-entrypoint.s…"   postgres   43 seconds ago   Up 43 seconds (healthy)   5432/tcp
traefik        traefik:v3.0         "/entrypoint.sh trae…"   traefik    43 seconds ago   Up 43 seconds             0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp

Acceso a n8n

Con Dominio Configurado:

  • n8n: https://n8n.tu-dominio.com

  • Dashboard Traefik: https://traefik.tu-dominio.com

Comandos de Mantenimiento

Ver Logs:

# Logs de n8n
docker-compose logs -f n8n

# Logs de Traefik
docker-compose logs -f traefik

# Logs de PostgreSQL
docker-compose logs -f postgres

Reiniciar Servicios:

# Reiniciar n8n
docker-compose restart n8n

# Reiniciar todos los servicios
docker-compose restart

Actualizar Servicios:

# Descargar últimas versiones
docker-compose pull

# Aplicar actualizaciones
docker-compose up -d

Backup de Base de Datos:

# Crear backup
docker-compose exec postgres pg_dump -U n8n n8n > backup_$(date +%Y%m%d).sql

# Restaurar backup
docker-compose exec -T postgres psql -U n8n -d n8n < backup_file.sql

Solución de Problemas Comunes

Problema: Warnings sobre variables no definidas

Solución: Verificar que el hash de password esté correctamente formateado con $$ duplicados.

Problema: Certificados SSL no se generan

Solución:

  1. Verificar que los registros DNS estén configurados correctamente

  2. Esperar 5-10 minutos para propagación DNS

  3. Revisar logs de Traefik: docker-compose logs traefik

Problema: n8n no carga

Solución:

  1. Verificar que PostgreSQL esté saludable: docker-compose ps

  2. Revisar logs de n8n: docker-compose logs n8n

  3. Verificar conectividad de red: docker network ls

Próximos Pasos

  1. Acceder a n8n y crear tu cuenta de administrador

  2. Configurar workflows según tus necesidades

  3. Configurar backups automáticos de la base de datos

  4. Monitorear el sistema usando el dashboard de Traefik

  5. Considerar añadir servicios adicionales como Portainer para gestión de contenedores

Beneficios de esta Configuración

SSL automático con Let’s Encrypt

Renovación automática de certificados

Dashboard de monitoreo con Traefik

Base de datos PostgreSQL para mejor rendimiento

Cumplimiento GDPR (servidores en Frankfurt)

Alta disponibilidad con restart automático

Fácil escalabilidad para servicios adicionales

Seguridad mejorada con headers HTTP y encriptación


Guía creada por: Kevin Belier

Fecha: 12 jun 2025

Versión: 1.0

Show More

Student Ratings & Reviews

No Review Yet
No Review Yet