Instalación de n8n AI Starter Kit con Ollama
El Self-hosted AI Starter Kit es una plantilla de Docker Compose del equipo de n8n para crear flujos de trabajo de IA que se ejecutan por completo en su propio servidor. Los prompts y los documentos los procesa un modelo de lenguaje local y no se envían a servicios de IA externos.
El kit incluye cuatro componentes:
- n8n, la plataforma de automatización de flujos de trabajo con nodos de IA;
- Ollama, que ejecuta modelos de lenguaje abiertos de forma local;
- Qdrant, una base de datos vectorial para almacenar y buscar embeddings de documentos;
- PostgreSQL, la base de datos de n8n.
Sus autores indican que el kit oficial está pensado para pruebas. En el momento de redactar esta guía, ejecutado tal como se describe en su README, presenta varios problemas en un servidor con dirección IP pública: n8n, Ollama y Qdrant están abiertos a internet, Ollama y Qdrant no tienen autenticación, los secretos de la configuración son los mismos en todas las instalaciones y el flujo de trabajo de demostración no se importa. Esta guía instala el kit tal cual y corrige todo ello mediante un archivo override independiente, de modo que pueda seguir actualizando el kit desde su repositorio.
Esta guía está escrita para Ubuntu 24.04 LTS, n8n 2.47.3, Ollama 0.40.16, Qdrant 1.20.0, Docker 29 y Docker Compose v5.
Antes de empezar
Necesitará:
- un servidor con Ubuntu 24.04 LTS y acceso root por SSH;
- al menos 15 GB de espacio libre en disco: las imágenes de Docker ocupan unos 11 GB y el modelo Llama 3.2 predeterminado, unos 2 GB;
- un dominio o subdominio para n8n, por ejemplo
n8n.example.com, con un registro A que apunte a la dirección IPv4 del servidor.
Sin GPU, el modelo se ejecuta en la CPU y responde con lentitud. Para un uso habitual, elija un servidor con GPU NVIDIA.
Todos los comandos siguientes se ejecutan como root. Si trabaja como usuario normal con permisos sudo, añada sudo antes de cada comando.
Instalar Docker
Instale Docker Engine y el plugin Compose desde el repositorio oficial de Docker:
apt update && apt install -y ca-certificates curl git install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc
Añada el repositorio:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list
Instale los paquetes y compruebe las versiones:
apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker --version docker compose version
Descargar el kit
Clone el repositorio en /opt y cree el archivo de configuración a partir del ejemplo:
cd /opt git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git cd self-hosted-ai-starter-kit cp .env.example .env
Sustituir los secretos predeterminados
El archivo de ejemplo contiene valores fijos, como password para PostgreSQL y super-secret-key para la clave de cifrado de n8n. Son iguales en todas las copias del kit, así que sustitúyalos por valores aleatorios:
sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$(openssl rand -hex 24)/" .env sed -i "s/^N8N_ENCRYPTION_KEY=.*/N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)/" .env sed -i "s/^N8N_USER_MANAGEMENT_JWT_SECRET=.*/N8N_USER_MANAGEMENT_JWT_SECRET=$(openssl rand -hex 32)/" .env chmod 600 .env
N8N_ENCRYPTION_KEY cifra las credenciales que guarda en n8n. N8N_USER_MANAGEMENT_JWT_SECRET firma las sesiones de usuario.
Copie el archivo .env en un lugar seguro fuera del servidor, por ejemplo, un gestor de contraseñas. Sin N8N_ENCRYPTION_KEY, las credenciales guardadas en n8n no se pueden descifrar tras una restauración.
Cerrar los puertos y añadir HTTPS
En el archivo docker-compose.yml del kit, n8n (puerto 5678), Ollama (11434) y Qdrant (6333) se publican en todas las interfaces de red. Docker añade sus propias reglas de firewall para los puertos publicados, y estas eluden UFW. En un servidor con dirección IP pública, esto significa que cualquiera puede abrir el editor de n8n por HTTP sin cifrar y usar las API de Ollama y Qdrant, que no tienen autenticación.
En lugar de editar docker-compose.yml, cree docker-compose.override.yml junto a él. Docker Compose lee este archivo automáticamente y lo aplica sobre el principal. Los archivos propios del kit permanecen sin cambios, por lo que actualizarlos desde el repositorio no sobrescribe su configuración.
Cree /opt/self-hosted-ai-starter-kit/docker-compose.override.yml y sustituya n8n.example.com por su dominio:
services: n8n: ports: !override - "127.0.0.1:5678:5678" environment: - N8N_HOST=n8n.example.com - N8N_PROTOCOL=https - N8N_PROXY_HOPS=1 - N8N_WEBHOOK_URL=https://n8n.example.com/ ollama-cpu: ports: !reset [] ollama-gpu: ports: !reset [] qdrant: ports: !reset [] caddy: image: caddy:2 restart: unless-stopped networks: ['demo'] ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config:
Esto es lo que cambia este archivo:
- n8n escucha solo en
127.0.0.1y los usuarios acceden a él a través de Caddy mediante HTTPS; - Ollama y Qdrant no se publican en absoluto; n8n accede a ellos por la red interna de Docker mediante los nombres
ollamayqdrant; - se añade Caddy como proxy inverso que obtiene y renueva un certificado de Let's Encrypt, siempre que el dominio apunte al servidor y los puertos 80 y 443 estén abiertos;
- los volúmenes de datos de n8n, PostgreSQL, Qdrant y Ollama permanecen tal como se definen en el
docker-compose.ymldel kit; el archivo override no los modifica.
La línea networks: ['demo'] es obligatoria. Todos los servicios del kit se ejecutan en la red llamada demo, y sin esta línea Caddy no puede acceder a n8n y devuelve el error 502.
N8N_WEBHOOK_URL establece la dirección que n8n usa para los webhooks, incluida la ventana de chat del editor. El dominio debe resolverse a su servidor desde el equipo en el que abre n8n. Si no es así, el chat solo muestra el mensaje «Failed to receive response», sin señalar el DNS como causa.
Cree /opt/self-hosted-ai-starter-kit/Caddyfile con su dominio:
n8n.example.com { reverse_proxy n8n:5678 }
Compruebe la configuración combinada:
docker compose --profile cpu config | grep -A4 "ports:"
Solo deberían aparecer n8n en 127.0.0.1:5678 y Caddy en los puertos 80 y 443.
Configurar el firewall
El archivo override ya mantiene los servicios internos del kit fuera de la red. UFW bloquea el resto del tráfico entrante hacia el servidor, salvo SSH, HTTP y HTTPS. Permítalos y active UFW:
ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw --force enable
Iniciar el kit
Inicie el stack en modo CPU:
docker compose --profile cpu up -d
En el primer inicio, Docker descarga unos 11 GB de imágenes y un contenedor aparte descarga el modelo Llama 3.2. Esto lleva un tiempo, según la velocidad de la conexión. Compruebe que el modelo está disponible:
docker exec ollama ollama list
La lista debería incluir llama3.2:latest.
Compruebe que en el servidor solo están abiertos los puertos esperados:
ss -tlnp
Los puertos 80 y 443 deberían estar abiertos en todas las interfaces y el puerto 5678 solo en 127.0.0.1. Los puertos 11434 y 6333 no deberían aparecer en la lista.
El kit usa PostgreSQL 16. El registro de n8n puede mostrar una advertencia de que esta versión está fuera del rango compatible. Esta advertencia no afecta al funcionamiento de n8n.
Importar el flujo de trabajo de demostración
El kit incluye un flujo de trabajo de demostración y dos credenciales de demostración. Se supone que se importan en el primer inicio, pero en el momento de redactar esta guía la comprobación de importación del docker-compose.yml del kit nunca se supera, por lo que no se importa nada. Ejecute la importación manualmente:
docker compose --profile cpu run --rm n8n-import -c "n8n import:credentials --separate --input=/demo-data/credentials" docker compose --profile cpu run --rm n8n-import -c "n8n import:workflow --separate --input=/demo-data/workflows"
La opción -c es obligatoria: el servicio n8n-import inicia un shell y, sin -c, el comando falla con el error «can't open 'n8n'».
Crear la cuenta de propietario
Abra https://n8n.example.com en su navegador y cree la cuenta de propietario: introduzca su correo electrónico, nombre y apellidos, y una contraseña de al menos 8 caracteres con al menos un número y una letra mayúscula. Tras el primer inicio de sesión, n8n puede mostrar una breve encuesta y la oferta de una clave de licencia gratuita para algunas funciones de la Community Edition. Ambas son opcionales.
La página de resumen muestra el Demo workflow importado.

Corregir las credenciales de demostración
Las credenciales de demostración se cifraron con la clave predeterminada de .env.example. Tras sustituir N8N_ENCRYPTION_KEY, n8n no puede descifrarlas, por lo que hay que rellenar ambas de nuevo. Los ajustes se guardan cifrados con su propia clave.
Abra Overview, vaya a la pestaña Credentials y abra Local Ollama service. La conexión falla y el campo Base URL muestra http://localhost:11434. Dentro del contenedor de n8n, localhost es el propio n8n, no Ollama.

Establezca Base URL en http://ollama:11434, deje API Key vacío y haga clic en Save. n8n prueba la conexión y muestra Connection tested successfully.

Abra Local QdrantApi database. Establezca Qdrant URL en http://qdrant:6333, deje API Key vacío y haga clic en Save.

Probar el flujo de trabajo de demostración
Abra Demo workflow. Contiene tres nodos: Chat Trigger recibe un mensaje, Basic LLM Chain lo pasa al modelo y Ollama Chat Model lo envía a Llama 3.2 en Ollama.

Haga clic en Open chat en la parte inferior del lienzo (canvas) y envíe una pregunta breve. Los nodos se vuelven verdes a medida que se ejecuta el flujo de trabajo y la respuesta del modelo aparece en el chat. La primera respuesta tarda más, porque Ollama carga el modelo en la memoria.

Si el chat muestra «Failed to receive response» y el flujo de trabajo no se inicia, compruebe que el dominio de N8N_WEBHOOK_URL se resuelve a su servidor desde su equipo.
Usar una GPU NVIDIA
Si el servidor tiene una GPU NVIDIA, el kit puede ejecutar Ollama en ella. Para ello, Docker necesita el NVIDIA Container Toolkit. Si todavía no ha usado la GPU con Docker en este servidor, instálelo primero siguiendo las instrucciones de Ollama para Docker.
A continuación, inicie el kit con el perfil gpu-nvidia en lugar de cpu:
docker compose --profile gpu-nvidia up -d
El archivo override anterior ya cierra el puerto de Ollama para este perfil. Use el mismo perfil en todos los demás comandos. Por ejemplo, la importación de la demostración con el perfil de GPU:
docker compose --profile gpu-nvidia run --rm n8n-import -c "n8n import:credentials --separate --input=/demo-data/credentials" docker compose --profile gpu-nvidia run --rm n8n-import -c "n8n import:workflow --separate --input=/demo-data/workflows"
Y la actualización:
cd /opt/self-hosted-ai-starter-kit git pull docker compose --profile gpu-nvidia pull docker compose --profile gpu-nvidia up -d
Actualizar el kit
Para actualizar los archivos y las imágenes del kit, ejecute los comandos con el perfil que utilice:
cd /opt/self-hosted-ai-starter-kit git pull docker compose --profile cpu pull docker compose --profile cpu up -d
Sus archivos docker-compose.override.yml, Caddyfile y .env no forman parte del repositorio, por lo que git pull no los modifica.
Próximos pasos
El kit está listo para sus propios flujos de trabajo de IA. A partir de aquí puede:
- descargar otros modelos con
docker exec ollama ollama pullseguido del nombre del modelo y seleccionarlos en el nodo Ollama Chat Model; - usar Qdrant para buscar en sus propios documentos con los nodos de almacén vectorial de n8n;
- conectar sus servicios y crear flujos de trabajo que los combinen con el modelo local.
Para una instalación general de n8n sin componentes de IA, consulte la guía Instalación de n8n con Docker y PostgreSQL . También explica cómo hacer copias de seguridad y restaurar una base de datos de n8n.