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
| Servicio | URL de acceso |
|---|---|
| n8n | http://localhost:5678 |
| Portainer | https://localhost:9444 |
| Evolution API | http://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
Publicar un comentario