Cómo Instalar Supabase Self-Hosted en EasyPanel (Guía Completa 2026)
Si vienes de Firebase y quieres migrar a open source, Supabase es la alternativa más directa: misma estructura (Auth, Storage, Realtime, API), pero con Postgres debajo y sin que te cobren por cada lectura o escritura. Esta guía cubre la instalación completa en EasyPanel, incluyendo los errores más comunes.
⏱️ Antes de empezar
Tiempo estimado: 30–45 minutos · Nivel: Intermedio (requiere SSH y manejo básico de variables de entorno) · Requisito: VPS con EasyPanel instalado
NocoDB vs Supabase — ¿cuándo usar cada uno?
En el Nivel 2 de la comunidad Innovarketing usamos NocoDB. Aquí la diferencia real:
| Característica | NocoDB | Supabase |
|---|---|---|
| Concepto | Airtable open source | Firebase open source |
| Contenedores Docker | 1 contenedor | 8+ contenedores |
| Interfaz visual | Spreadsheet, intuitivo | Dashboard técnico |
| Autenticación de usuarios | No incluye | Completa (email, OAuth) |
| Storage de archivos | No | Sí (S3-compatible) |
| Tiempo real | No | Sí (WebSockets) |
| Edge Functions | No | Sí (serverless) |
| RAM mínima recomendada | 512 MB | 4 GB |
| Ideal para | CRMs, bases de datos de clientes | Apps con login y archivos |
Usa NocoDB para CRMs y sistemas de atención para clientes. Usa Supabase cuando construyes una app con usuarios registrados, login propio, archivos o tiempo real.
Requisitos del VPS
⚠️ RAM mínima: 4 GB
Supabase levanta 8+ contenedores simultáneos. Con 2 GB el servidor hará swap constante y EasyPanel mostrará el botón en gris o rojo. Si tienes menos de 4 GB, considera desactivar servicios opcionales (Analytics, imgproxy) o hacer upgrade del VPS.
- RAM: 4 GB mínimo (8 GB recomendado para producción)
- vCPU: 2 cores mínimo
- Almacenamiento: 30 GB libre
- EasyPanel: ya instalado y corriendo
- Dominio: con acceso para configurar DNS
Generar los JWT Secrets
Este paso es obligatorio antes de tocar EasyPanel. Supabase necesita 3 valores criptográficos que tú generas:
- Ve a supabase.com → self-hosting → generate API keys
- Genera un JWT Secret (mínimo 32 caracteres aleatorios)
- Con ese secret, genera el ANON_KEY y el SERVICE_ROLE_KEY
También puedes generar el JWT Secret desde SSH:
openssl rand -base64 32
📋 Guarda estos 3 valores — los necesitas en todos los pasos siguientes
JWT_SECRET— la semilla maestraANON_KEY— clave pública (para el frontend)SERVICE_ROLE_KEY— clave privada con permisos totales (solo backend)
Obtener el docker-compose oficial
⚠️ No uses el template de easypanel-io/compose
Ese repositorio tiene versiones desactualizadas de Supabase. Usa siempre el repositorio oficial.
Conéctate a tu VPS por SSH y ejecuta:
git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker
cp .env.example .env
Configurar el archivo .env
nano .env
Variables críticas que debes cambiar:
| Variable | Valor / Instrucción |
|---|---|
| POSTGRES_PASSWORD | Password seguro (sin @, #, $, %) |
| JWT_SECRET | El secret generado en el Paso 1 |
| ANON_KEY | El anon key generado en el Paso 1 |
| SERVICE_ROLE_KEY | El service role key del Paso 1 |
| DASHBOARD_USERNAME | admin |
| DASHBOARD_PASSWORD | Password del dashboard |
| SITE_URL | https://supabase.tudominio.com |
| API_EXTERNAL_URL | https://supabase.tudominio.com |
⚠️ Caracteres especiales en POSTGRES_PASSWORD
Evita @ # $ % en el password de Postgres — rompen la cadena de conexión entre los contenedores internos de Supabase.
Crear el Compose en EasyPanel
- EasyPanel → + Create Project → nómbralo
supabase - Dentro → + Create Service → selecciona “Compose”
- URL del repositorio:
https://github.com/supabase/supabase - Compose file path:
docker/docker-compose.yml
Variables de entorno en EasyPanel
En la sección Environment del Compose service, agrega las mismas variables del .env:
| Variable | Valor |
|---|---|
| POSTGRES_PASSWORD | tu_password |
| JWT_SECRET | tu_jwt_secret |
| ANON_KEY | tu_anon_key |
| SERVICE_ROLE_KEY | tu_service_role_key |
| DASHBOARD_USERNAME | admin |
| DASHBOARD_PASSWORD | tu_password_dashboard |
| SITE_URL | https://tudominio.com |
| API_EXTERNAL_URL | https://tudominio.com |
Configurar dominios
| Servicio | Puerto | Para qué sirve |
|---|---|---|
| Kong (API Gateway) | 8000 | API, auth, storage, realtime — acceso principal |
| Studio | 3000 | Dashboard visual para gestionar la base de datos |
En EasyPanel agrega dominio → supabase.tudominio.com → puerto 8000
Deploy y verificar
- Clic en Deploy
- Ve a Logs — espera 3 a 5 minutos
✅ Contenedores que deben quedar verdes
supabase-db— Postgressupabase-kong— API Gatewaysupabase-auth— Autenticaciónsupabase-rest— API automáticasupabase-studio— Dashboardsupabase-realtime— WebSocketssupabase-storage— Archivos
El botón gris — qué significa y cómo resolverlo
El botón gris en EasyPanel indica que el Compose está detenido porque uno o más contenedores fallaron al arrancar. Si podías entrar al dashboard, algunos servicios corrieron (Kong y Studio), pero probablemente supabase-db o supabase-auth fallaron.
🔍 Diagnóstico rápido
Ve a Logs del Compose → busca el contenedor con texto en rojo → copia ese error. El 90% de las veces es una variable de entorno mal configurada.
El diseño diferente — es completamente normal
El dashboard self-hosted de Supabase tiene un diseño levemente diferente al de supabase.com. La versión cloud incluye features extra (billing, métricas globales, logs de plataforma) que no existen en self-hosted. Para construir tu app es funcionalmente idéntico.
Conectar por MCP o SDK
La única diferencia con la nube es la URL base. Configura así:
SUPABASE_URL=https://supabase.tudominio.com
SUPABASE_ANON_KEY=tu_anon_key
SUPABASE_SERVICE_ROLE_KEY=tu_service_role_key
Todas las librerías de Supabase (JS, Python, etc.) aceptan URL personalizada. Solo cambia el endpoint y todo lo demás funciona igual que en la nube.
Errores comunes y soluciones
Botón gris / contenedor en loop de reinicios
→ 90% de las veces es JWT_SECRET, ANON_KEY o SERVICE_ROLE_KEY mal configurado. Verifica que no tengan espacios al inicio o al final.
Error de conexión a la base de datos
→ POSTGRES_PASSWORD con caracteres especiales (@ # $). Usa solo letras y números.
Dashboard no carga
→ Espera 5 minutos completos después del deploy. Verifica que el dominio apunta al puerto 8000, no al 3000.
Servidor lento / RAM insuficiente
→ Desactiva temporalmente analytics e imgproxy en el docker-compose.yml. Solución definitiva: upgrade a 4 GB RAM.
SSL no funciona
→ Verifica que los registros DNS apuntan a la IP del VPS y que Traefik en EasyPanel gestiona los certificados automáticamente.
✅ Acceso al Dashboard
- URL: https://supabase.tudominio.com
- Usuario: valor de
DASHBOARD_USERNAME - Password: valor de
DASHBOARD_PASSWORD
🖥️ ¿Necesitas un VPS para Supabase?
Supabase requiere mínimo 4 GB de RAM. Hostinger tiene datacenter en São Paulo, lo que da menor latencia para Chile y LatAm, y mejor rendimiento en benchmarks reales de producción.
- Plan recomendado: KVM4 o superior (4 GB RAM mínimo para Supabase)
- Tip: Elige plan de 1 o 2 años para congelar el precio de oferta
¿Tienes un error que no está aquí?
Copia el mensaje exacto del Log en EasyPanel y compártelo en el muro de la comunidad. Con eso podemos diagnosticar exactamente qué falla.
Ir a la Comunidad →¿Listo para instalar tu propio Supabase?
Sigue los 7 pasos de esta guía, revisa los logs si algo falla, y en menos de una hora tendrás Supabase corriendo en tu VPS sin costos por uso.
VPS para montar tu propio stack open source
Si quieres instalar n8n, NocoDB o Supabase en tu propio servidor, necesitas un VPS confiable. Hostinger tiene servidores en São Paulo (el más cercano para LATAM) con buen rendimiento y soporte en español.
20% de descuento entrando directamente por este link:
Link de afiliado — el precio para ti es el mismo o menor, yo recibo una comisión si contratas.