Ir al contenido principal

Instalar n8n, Supabase, Evolution API y Portainer

Cómo instalar n8n, Supabase, Evolution API y Portainer en contenedores Docker separados con red compartida

En este tutorial aprenderás a desplegar n8n, Supabase, Evolution API y Portainer en contenedores independientes, todos conectados entre sí mediante una red Docker común. Este enfoque mantiene cada servicio modular y fácil de administrar, sin perder comunicación interna entre ellos.


1. Objetivo del entorno

El objetivo es contar con los siguientes servicios corriendo en el mismo servidor:

  • n8n – Automatización de flujos.
  • Supabase – Base de datos PostgreSQL utilizada por n8n.
  • Evolution API – API para integrar modelos de IA o bots.
  • Portainer – Panel web para administración de contenedores Docker.

Todos se comunicarán dentro de la red local mi_red_local, sin necesidad de exponer internamente las bases de datos o servicios entre sí.


2. Crear la red compartida

Ejecuta este comando una sola vez. La red servirá para que todos los servicios puedan comunicarse por nombre dentro del entorno Docker:

sudo docker network create mi_red_local

3. Estructura recomendada de carpetas

/home/docker/
├── n8n/
│   └── docker-compose.yml
├── supabase/
│   └── docker-compose.yml
├── evolution/
│   └── docker-compose.yml
└── portainer/
    └── docker-compose.yml

Cada servicio tiene su propio archivo docker-compose.yml para facilitar su mantenimiento y actualizaciones.


4. Archivos de configuración

n8n

version: "3.9"

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=false
      - N8N_SECURE_COOKIE=false
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=supabase-db
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=postgres
      - DB_POSTGRESDB_PASSWORD=postgres
    volumes:
      - n8n_data:/home/node/.n8n
    restart: always
    networks:
      - mi_red_local

volumes:
  n8n_data:

networks:
  mi_red_local:
    external: true

Supabase (PostgreSQL)

services:
  supabase-db:
    image: supabase/postgres:14.1.0
    container_name: supabase-db
    ports:
      - "5433:5432"
    command: postgres -c config_file=/etc/postgresql/postgresql.conf
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: n8n
    volumes:
      - supabase_data:/var/lib/postgresql/data
    restart: always
    networks:
      - mi_red_local

volumes:
  supabase_data:

networks:
  mi_red_local:
    external: true

Evolution API

services:
  redis:
    container_name: evolution_redis
    image: redis:7-alpine
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --save 60 1 --loglevel warning
    networks:
      - mi_red_local

  evolution-api:
    container_name: evolution_api
    image: atendai/evolution-api
    restart: unless-stopped
    ports:
      - "8085:8080"
    env_file:
      - .env
    environment:
      - REDIS_URI=redis://redis:6379
    volumes:
      - evolution_store:/evolution/store
      - evolution_instances:/evolution/instances
    depends_on:
      - redis
    networks:
      - mi_red_local

volumes:
  evolution_store:
  evolution_instances:
  redis_data:

networks:
  mi_red_local:
    external: true

Portainer

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    ports:
      - "9444:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    networks:
      - mi_red_local

volumes:
  portainer_data:

networks:
  mi_red_local:
    external: true

5. Iniciar los contenedores

Inicia cada servicio por separado con los siguientes comandos:

cd /home/docker/supabase && sudo docker compose up -d
cd /home/docker/n8n && sudo docker compose up -d
cd /home/docker/evolution && sudo docker compose up -d
cd /home/docker/portainer && sudo docker compose up -d

Verifica el estado general:

sudo docker ps

Deberías ver todos los contenedores en ejecución: n8n, supabase-db, evolution_api, evolution_redis y portainer.


6. Accesos web

ServicioURL de acceso
n8nhttp://localhost:5678
Portainerhttps://localhost:9444
Evolution APIhttp://localhost:8085
Supabase (DB interna)supabase-db:5432

Si accedes desde otra computadora dentro de la red local, reemplaza localhost por la IP del servidor.


7. Comunicación interna entre servicios

  • n8n → Supabase: usa supabase-db:5432
  • n8n → Evolution API: usa http://evolution-api:8080
  • Evolution API → Redis: usa redis://redis:6379

Gracias a la red mi_red_local, los servicios pueden comunicarse por nombre sin necesidad de conocer direcciones IP reales.


8. Comprobación rápida

Dentro de n8n puedes crear un flujo simple con un nodo de tipo “PostgreSQL” y configurar la conexión de esta forma:

  • Host: supabase-db
  • Base de datos: n8n
  • Usuario: postgres
  • Contraseña: postgres
  • Puerto: 5432

Al probar la conexión, deberías obtener una respuesta exitosa.


Conclusión

Este enfoque modular te permite desplegar un entorno de automatización profesional totalmente aislado, con administración visual mediante Portainer y comunicación interna segura entre contenedores. La red compartida mi_red_local simplifica las integraciones sin comprometer la estructura de tus servicios.

Comentarios