# 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
:::
----