itsez.dev
📖Tutorial

Cómo instalar Supabase en un VPS

2026-07-30·5 min de lectura·Datos y backend

Supabase combina PostgreSQL con autenticación, APIs, storage y un dashboard para backends de aplicaciones. Su despliegue self-hosted es un stack Docker de varios servicios, por lo que esta guía usa los archivos Compose oficiales, protege secretos y expone solo el gateway público.

Requisitos previos

Elige Ubuntu 22.04 o 24.04 con SSH, IP pública y un dominio dedicado como api.example.com. Los mínimos oficiales son 4 GB RAM mínimo (8 GB recomendado), 2+ núcleos CPU, 40+ GB SSD. Una instalación de desarrollo puede usar una máquina modesta, pero producción necesita margen para PostgreSQL, logs, storage y migraciones.

Necesitas Docker Compose, una forma segura de generar secretos y almacenamiento externo al VPS para backups. Supabase autoalojado implica mantener el sistema operativo y la base de datos, no es una base de datos gestionada.

Paso 1, Conectarte a tu servidor

Conéctate y crea una carpeta protegida:

ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl git
mkdir -p /opt/supabase
cd /opt/supabase
chmod 750 /opt/supabase

Abre solo SSH, HTTP y HTTPS en el proveedor. No instales otro reverse proxy o PostgreSQL hasta entender los puertos del stack oficial.

Paso 2, Instalar Docker y Docker Compose

Instala Docker Engine y Compose siguiendo las instrucciones oficiales para Ubuntu. Comprueba la instalación:

docker --version
docker compose version
systemctl enable --now docker

Revisa el espacio y la memoria antes de descargar imágenes:

df -h
free -h

Paso 3, Ejecutar el stack oficial de Supabase

Supabase mantiene la configuración Docker de self-hosting en su repositorio oficial. La forma recomendada de empezar es con el script de instalación oficial:

curl -fsSL https://supabase.link/setup.sh | sh

Alternativamente, clona el repositorio manualmente:

git clone --depth 1 https://github.com/supabase/supabase.git source
cd source/docker
cp .env.example .env

Secretos y claves JWT

Supabase ahora usa pares de claves JWT asimétricas en lugar de un único JWT_SECRET. Después de clonar, genera las claves necesarias con los scripts auxiliares incluidos:

./docker/utils/generate-keys.sh
./docker/utils/add-new-auth-keys.sh

Estos scripts crean el par RSA para la firma JWT y añaden las nuevas claves a la configuración de auth. Los archivos docker/volumes/api/kong.yml gestionan el Gateway y docker/volumes/db/init/ maneja la base de datos.

Variables de entorno críticas

Abre .env y reemplaza cada valor placeholder. Los valores por defecto de .env.example son PELIGROSOS y nunca deben usarse en producción.

Variable Requisitos
DASHBOARD_PASSWORD Debe contener al menos una letra (las contraseñas solo numéricas son rechazadas)
POSTGRES_PASSWORD Usa solo letras y números para evitar problemas de codificación URL

Todos los demás valores placeholder en .env también deben reemplazarse con valores únicos generados. Nunca publiques el archivo.

Usuarios Windows: Si clonas el repositorio en Windows, asegúrate de que los saltos de línea sean LF (estilo Unix). Los saltos CRLF rompen el entrypoint de Kong Gateway. Usa git config --global core.autocrlf false antes de clonar, o convierte con dos2unix.

Valida el proyecto oficial antes de arrancar:

docker compose config
docker compose pull
docker compose up -d
docker compose ps

El Compose oficial es el ejemplo de despliegue de esta guía. No lo reemplaces por un archivo corto, porque podrías eliminar el gateway, una migración o el servicio de storage.

Paso 4, Configurar el proxy inverso

Supabase incluye archivos de anulación oficiales para Caddy y Nginx. Actívalos con:

sh run.sh config add caddy
# o
sh run.sh config add nginx

Dirige api.example.com al puerto localhost del gateway indicado por el Compose oficial. Actualiza estas variables en .env para que coincidan con tu dominio:

SUPABASE_PUBLIC_URL=https://api.example.com
API_EXTERNAL_URL=https://api.example.com
SITE_URL=https://api.example.com

Termina TLS en el proxy, conserva las cabeceras de host y protocolo y mantén PostgreSQL y los servicios internos en privado. Si necesitas Studio remotamente, protégelo mediante el método de tu versión, no abriendo todos los puertos.

WebSocket: Supabase Realtime necesita soporte WebSocket en tu proxy. Asegúrate de que la configuración de tu proxy inverso permita actualizaciones WebSocket (Caddy lo hace por defecto; Nginx necesita proxy_set_header Upgrade $http_upgrade y proxy_set_header Connection "upgrade" de forma explícita).

Prueba el endpoint HTTPS, una petición autenticada y una operación de storage. Que cargue el dashboard no demuestra por sí solo que auth, migraciones y objetos estén bien.

Paso 5, Primer acceso y configuración inicial

Abre la dirección de Studio a través de la ruta protegida e inicia sesión con las credenciales de .env. Crea un proyecto de prueba o usa el proyecto por defecto solo para evaluar. Guarda la URL y la clave pública anónima en la configuración de tu aplicación, pero mantén las service-role keys en el servidor.

Crea una tabla, aplica una migración y prueba auth desde una aplicación desechable. Comprueba que row-level security está activado donde corresponda. Nunca uses una service-role key en código del navegador.

Mantenimiento

Haz backup de PostgreSQL, los objetos de storage y todos los secretos de entorno. Revisa las notas upstream antes de actualizar el repositorio y las imágenes. Toma un snapshot antes de migrar y verifica auth, APIs y storage después.

Monitoriza conexiones, disco, objetos, errores del gateway y salud de contenedores. Si falla un servicio, guarda docker compose ps, sus logs y la configuración efectiva antes de reiniciar o borrar nada.

Herramientas mencionadas

Supabase

Backend Postgres con base de datos, auth, storage, realtime y funciones edge.

FreemiumSin tarjetaOSS

2 proyectos, 500 MB de base de datos, 1 GB de storage, 5 GB de salida y 50.000 usuarios activos al mes.

SOBRE NOSOTROS

Honesto, independiente, sin relleno.

Sin patrocinios. Solo un análisis claro de qué hace, cuánto cuesta y lo que debes saber antes de comprometerte.

Leer más

FAQ

Preguntas frecuentes

Supabase puede funcionar en un VPS pequeño?

Necesita más recursos que un contenedor PostgreSQL porque ejecuta varios servicios. Consulta los requisitos oficiales actuales antes de elegir servidor.

Qué puertos de Supabase deben ser públicos?

Expón solo el gateway a través de HTTPS. Mantén PostgreSQL, Studio y los servicios internos en interfaces privadas salvo que el despliegue lo requiera.

Cuál es el backup más importante de Supabase?

Guarda los datos PostgreSQL, los objetos de storage y los secretos del despliegue, y prueba una restauración completa.