76 views
# IA sin Skynet Repositorio Oficial: https://github.com/n8n-io/self-hosted-ai-starter-kit ## Guía de Despliegue ## En Ubuntu Server Mínimal fresco: - Instalar git ```bash= sudo apt install git -y ``` - Instalar Docker y Docker Compose ```bash= sudo apt install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo usermod -aG docker $USER ``` Luego descargamos el repositorio del Starter Kit de N8N que incluye el modelo Ollama de Meta e ingresamos a la carpeta. ```bash= git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git cd self-hosted-ai-starter-kit ``` Dentro de la carpeta vamos a modificar el archivo compose de docker, para desactivar la cookie segura, ya que N8N pide certificados SSL/TLS para funcionar. ``` sudo nano docker-compose.yml ``` y en enviroment agregamos: ```bash= - N8N_SECURE_COOKIE=false ``` Hecho esto podemos levantar los contenedores. Ojo que este comando depende si tienes GPU Nvidia, AMD u otras. Consulta el repo oficial. ```bash= docker compose --profile cpu up ``` AHora podemos ingresar a N8N y crear la cuenta de administración en: :::success https://ip_maquina:5678 ::: :::info Una vez dentro encontrar un workflow de ejemplo. Ese es un chatbot funcional. ::: ---- ### Más Ajustes ### #### Postgres #### El kit de N8N viene con una base de datos Postgres integrada, pero para poder utilizarla hay que declarar sus puertos en el docker-compose.yml ```bash= postgres: image: postgres:16-alpine hostname: postgres networks: ['demo'] restart: unless-stopped ports: - 5432:5432 ``` Una vez hecho esto, podremos conectarnos a ella a través de la interfaz gráfica con las credenciales: :::warning - host: ip_maquina - base de datos: n8n - user: root - password: password ::: ---- #### Embedings #### Para agregar nomic-embed-text ejecutamos el siguiente comando: ```bash= docker exec -it <CONTAINER_ID> ollama pull nomic-embed-text ``` ---- #### Agregar Base de Datos en Qdrant #### Ejecutamos el siguiente comando sobre host fijándonos de colocar la ip de del contendor de Qdrant y el nombre de la colección: ```bash= curl -X PUT http://ip_maquina:6333/collections/{nombre_coleccion} \ -H 'Content-Type: application/json' \ --data-raw '{ "vectors": { "size": 300, "distance": "Cosine" } }' ``` ---- #### Desplegar Base de vectores Supabase #### Supabase es un alternativa a Qdrant, que es la base de vectores que trar el kit por defecto. Pero también podemos usar Supabase como alternativa: ```bash= # Descargamos el repo: git clone --depth 1 https://github.com/supabase/supabase # Vamos a la carpeta: cd supabase/docker # Coiamos el .env de ejemplo para usarlo: cp .env.example .env # Jalamos las últimas imágenes: docker compose pull ``` El Self Hosted Starter Kit de N8N trae su postgres. Supabase también trae incluido un postgres, por lo que antes de iniciar el docker-compose.yml hay que modificar el archivo .env, para que no choquen los puertos de ambos postgres. ```bash= POSTGRES_PORT=5422 ``` Iniciamos los servicios: ``` docker compose up -d ``` Ahora podrás acceder a través de un navegador web a Supabase en: :::success https://ip_maquina:8000 ::: :::warning - user: supabase - password: this_password_is_insecure_and_should_be_updated ::: Para crear una base de datos vectorial en supabase, vamos en su interfaz gráfica a *SQL Editor* y en *SQL query* pegamos el texto a continuación, luego clikeamos *Run Ctrl*: ```sql= -- Enable the pgvector extension to work with embedding vectors create extension vector; -- Create a table to store your documents create table documents ( id bigserial primary key, content text, -- corresponds to Document.pageContent metadata jsonb, -- corresponds to Document.metadata embedding vector(768) -- 1536 works for OpenAI embeddings, change if needed ); -- Create a function to search for documents create function match_documents ( query_embedding vector(768), match_count int default null, filter jsonb DEFAULT '{}' ) returns table ( id bigint, content text, metadata jsonb, similarity float ) language plpgsql as $$ #variable_conflict use_column begin return query select id, content, metadata, 1 - (documents.embedding <=> query_embedding) as similarity from documents where metadata @> filter order by documents.embedding <=> query_embedding limit match_count; end; $$; ``` Una vez hecho esto, podremos conectarnos a ella a través de la interfaz gráfica con las credenciales: :::warning - host: http://ip_maquina:8000 - Service Role Secret: Viene en el archivo .env ::: ----