Supabase auto-hospedado: alternativa Open-Source a Firebase
Qué cubre este artículo
- Qué es Supabase: Postgres + Auth + Realtime + Storage como backend listo.
- Auto-hospedaje con Docker y qué diferencia hay respecto a la versión cloud.
- Por qué pgvector convierte a Supabase en candidato para vector database en RAG.
- REST-API (PostgREST), Auth y Realtime en la práctica.
- Cuándo elegir Supabase vs. Postgres simple vs. Firebase.
Introducción
Supabase es la alternativa Open-Source líder a Firebase: obtienes una base de datos Postgres con REST-API, autenticación (correo, OAuth, Magic Links), suscripciones Realtime (WebSocket), almacenamiento de archivos y Edge Functions, todo en un stack, todo Open Source.
Para proyectos de IA, Supabase resulta especialmente interesante: Postgres incluye pgvector, así que Supabase se convierte en vector database para embeddings y RAG sin necesidad de sistemas adicionales.
Casos de uso típicos
- Backend de app con IA: aplicación web con autenticación Supabase + Postgres + pgvector para RAG.
- Persistencia de chatbots: conversaciones, perfiles de usuario, índice de documentos en una sola BD.
- Dashboards en tiempo real: actualizaciones en vivo para monitoreo o generaciones con IA.
- Servicios multi-usuario: auth + Row-Level-Security = separación de tenants limpia.
- Backend de formularios: reemplazo de NocoDB con programabilidad real.
Instalación: Docker
Supabase auto-hospedado es un stack multi-contenedor (Postgres, PostgREST, GoTrue Auth, Realtime, Storage, interfaz Studio):
git clone --depth 1 https://github.com/supabase/supabase.git
cd supabase/docker
cp .env.example .env
# Editar .env: POSTGRES_PASSWORD, JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEY, Site-URL
docker compose up -d
Variables .env importantes:
POSTGRES_PASSWORD=geheim
JWT_SECRET=llave-aleatoria-larga
ANON_KEY=jwt-con-anon-role # generado con JWT_SECRET
SERVICE_ROLE_KEY=jwt-con-service-role # clave admin, nunca al frontend
SITE_URL=https://app.tu-dominio.com
API_EXTERNAL_URL=https://api.tu-dominio.com
Generas las claves con supabase gen o herramientas JWT: ANON_KEY (pública, protegida por RLS) y SERVICE_ROLE_KEY (admin, secreta).
La interfaz Studio corre en http://localhost:8000: gestión de base de datos, auth, documentación de API.
Características principales
REST-API automática (PostgREST)
Cada tabla obtiene una REST-API de inmediato:
# Tabla "documents" → automáticamente:
curl "https://api.tu-dominio.com/rest/v1/documents?select=*" \
-H "apikey: ANON_KEY" \
-H "Authorization: Bearer USER_JWT"
Sin necesidad de programar backend: CRUD está disponible automáticamente.
Auth (GoTrue)
Correo/contraseña, Magic Links, OAuth (Google, GitHub), JWT-Tokens, autenticación lista con componentes UI para React/Next.js.
Realtime
Suscripciones WebSocket a cambios en BD: “nueva fila en tabla X” se transmite en vivo al frontend.
Storage
Almacenamiento de archivos compatible con S3 con reglas de bucket y RLS de acceso.
pgvector: Supabase como vector database para IA
La característica clave para IA: la extensión Postgres pgvector almacena embeddings directamente en Supabase:
-- En la consola SQL de Supabase:
create extension if not exists vector;
create table documents (
id bigint primary key generated always as identity,
content text,
embedding vector(1024) -- bge-m3 tiene 1024 dimensiones
);
-- Búsqueda de similitud
create function match_documents(query_embedding vector(1024), match_count int)
returns table (id bigint, content text, similarity float)
language sql as $$
select id, content, 1 - (embedding <=> query_embedding) as similarity
from documents
order by embedding <=> query_embedding
limit match_count;
$$;
# Desde tu aplicación: embedding de Ollama, búsqueda en Supabase
emb = ollama_client.embeddings(model="bge-m3", prompt=query)["embedding"]
result = supabase.rpc("match_documents", {
"query_embedding": emb,
"match_count": 5
}).execute()
context = "\n".join(r["content"] for r in result.data)
No necesitas Qdrant o Chroma separados: Supabase es BD + búsqueda vectorial en una. Para volúmenes muy grandes (>1 millón de vectores), Qdrant dedicado es más rápido, pero para la mayoría de proyectos pgvector es suficiente.
Row-Level-Security (RLS)
La característica de seguridad más importante: reglas directamente en Postgres: “el usuario ve solo sus datos”:
alter table documents enable row level security;
create policy "own docs" on documents
for all using (auth.uid() = user_id);
Así la REST-API es segura y multi-tenant sin código backend adicional.
Auto-hospedado vs. Supabase Cloud
| Aspecto | Auto-hospedado | Supabase Cloud |
|---|---|---|
| Soberanía de datos | ✅ Tu servidor | Cloud US/EU |
| Instalación | Stack Docker, ~7 contenedores | 5 minutos con sign-up |
| Costos | Solo servidor | Free-tier, después $25+ |
| Mantenimiento | Tú (actualizaciones, backups) | Managed |
| Características | Núcleo completo | Algunas solo en cloud |
Seguridad
- SERVICE_ROLE_KEY secreta: tiene permisos admin, evita RLS, nunca al frontend.
- ANON_KEY + RLS: la clave pública es segura porque RLS controla quién ve qué.
- HTTPS: endpoint de API detrás de reverse proxy con TLS.
- Backups: dump de Postgres periódicamente, ver Backup.
- JWT_SECRET: fuerte y secreto, con él se firman todos los tokens de auth.
Supabase vs. alternativas
| Herramienta | Fortaleza | Debilidad |
|---|---|---|
| Supabase | Backend completo (DB+Auth+Realtime+Storage), pgvector | Stack multi-contenedor, complejo |
| Firebase | Managed, maduro | Google Cloud, proprietario, caro |
| NocoDB | UI sin código, simple | Menos programable |
| Postgres puro | ligero, control total | sin Auth/REST/Realtime out-of-box |
| Pocketbase | un binario, muy ligero | SQLite, menos potente |
Enlaces de interés
- IRC-Coding.de: tutoriales de programación avanzada: Postgres, REST, Auth, WebSocket.
- RAG local: embeddings y búsqueda vectorial en detalle.
- Qdrant: vector database dedicada.
- NocoDB: alternativa sin código.
- Docker: fundamentos de deployment.
Puntos clave:
- Supabase = Postgres + Auth + Realtime + Storage + REST-API como backend Open-Source.
- pgvector lo convierte en vector database para RAG, sin sistemas adicionales.
- Auto-hospedado es un stack de ~7 contenedores, más configuración, pero control total.
- RLS (Row-Level-Security) = API multi-tenant segura sin código backend.
- Para apps con IA, la mejor base integrada: auth + BD + búsqueda vectorial en uno.
FAQ
¿Puede Supabase realmente hacer búsqueda vectorial?
¿Es el auto-hospedaje complicado?
¿Supabase o NocoDB?
¿Auth sin escribir código?
¿Por qué Supabase para IA?
¿Límites en auto-hospedaje?
Referencias y lecturas adicionales
- Supabase: GitHub.
- Supabase Self-Hosting: documentación.
- pgvector: extensión vectorial.
- IRC-Coding.de: tutoriales de programación.


