¿Qué es un BaaS y por qué autoalojarlo?
Un Backend-as-a-Service (BaaS) reúne en un solo producto todo lo que una aplicación moderna necesita del lado del servidor: base de datos, autenticación, almacenamiento de archivos, funciones serverless y comunicación en tiempo real. Firebase popularizó este modelo, pero su naturaleza propietaria plantea problemas de coste, conformidad con el RGPD y dependencia del proveedor.
Autoalojar un BaaS open source en su propio VPS le da un control total sobre sus datos, elimina los gastos por petición y le permite respetar los requisitos de localización de los datos. Supabase y Appwrite son las dos soluciones más maduras en este ámbito.
Comparativa Supabase vs Appwrite — 12 criterios
Desplace la tabla
| Criterio | Supabase | Appwrite |
|---|---|---|
| Base de datos | PostgreSQL | MariaDB (≤ 1.8), PostgreSQL (2.0+) |
| RAM mínima | 4 GB | 2 GB |
| RAM recomendada en producción | 8 GB | 4 GB |
| Número de contenedores | ~13 | ~19 |
| Puerto principal | 8000 (Envoy desde 0.8.0, Kong antes) | 80 / 443 (Traefik) |
| Puerto de administración | 3000 (Studio) | 80 / consola (Traefik) |
| Servicios incluidos | Auth, PostgREST, Realtime, Storage, Edge Functions, Studio | Auth, Databases, Storage, Functions, Messaging, Realtime |
| Proveedores de autenticación | 15+ | 30+ |
| Runtime de funciones | Solo Deno | 30+ runtimes (Node, Python, PHP, Go, Dart, Ruby, Bun…) |
| SDK de cliente | JS, Python, Swift, Kotlin, Flutter, C# | JS, iOS, Android, Flutter, React Native, Web |
| Tiempo real | WebSocket mediante el servicio Realtime | WebSocket mediante Appwrite Realtime |
| Licencia | Apache 2.0 | BSD 3-Clause |
Desplegar Supabase en un VPS
Paso 1 — Requisitos del servidor
Aprovisione un VPS con al menos 4 GB de RAM (8 GB recomendados en producción), Docker y Docker Compose instalados. Abra el puerto 8000 (gateway API) y el puerto 3000 (Studio) en su cortafuegos. Se aconseja un disco SSD de 40 GB como mínimo para PostgreSQL.
Paso 2 — Clonar el repositorio y configurar el entorno
Clone con
git clone --depth 1 https://github.com/supabase/supabase, entre ensupabase/dockery copie.env.examplecomo.env. Defina como mínimoPOSTGRES_PASSWORD,JWT_SECRET,ANON_KEYySERVICE_ROLE_KEY.Paso 3 — Lanzar la stack
Ejecute
docker compose up -d. El arranque completo tarda de 60 a 120 segundos. Con Supabase 0.8.0+, Envoy (no Kong) sirve el puerto 8000. Compruebe el estado condocker compose psy espere a que todos los contenedores esténhealthy.Paso 4 — Verificar la instalación
Acceda al Studio en
http://su-ip:3000. Pruebe una llamada API sencilla concurl http://su-ip:8000/rest/v1/ -H "apikey: SU_ANON_KEY". Una respuesta JSON vacía{}confirma que PostgREST responde correctamente.
Desplegar Appwrite en un VPS
Paso 1 — Requisitos del servidor
Appwrite es más ligero al arrancar: 2 GB de RAM bastan para probar, pero se recomiendan 4 GB en producción. Sus ~19 contenedores incluyen Traefik como reverse proxy. Los puertos 80 y 443 deben estar abiertos.
Paso 2 — Lanzar el instalador interactivo
Ejecute
docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw --entrypoint="install" appwrite/appwrite:latest. El asistente le pedirá el dominio y los puertos y generará undocker-compose.ymladaptado a su entorno.Paso 3 — Esperar a las migraciones de la base de datos
En el primer arranque, Appwrite ejecuta sus migraciones. Este proceso tarda entre 2 y 5 minutos y provoca errores 503 temporales — es lo esperado. Siga el progreso con
docker compose logs -f appwrite.Paso 4 — Crear la cuenta de administrador
Una vez terminadas las migraciones, acceda a
http://su-dominio/console. Cree su primera cuenta de administrador y, después, su primer proyecto.
Autenticación — comparativa de proveedores y configuración OAuth
Ambas plataformas gestionan la autenticación por correo electrónico/contraseña y por número de teléfono (SMS OTP). Appwrite admite más de 30 proveedores OAuth2 frente a los 15+ de Supabase.
Supabase utiliza GoTrue como servicio de autenticación. Appwrite integra su propio servicio Auth configurable desde la consola web por proyecto.
Nota importante para Appwrite 2.0: la issue #13547 (https://github.com/appwrite/appwrite/issues/13547) reporta que el restablecimiento de contraseña y las invitaciones por correo están rotos en Appwrite 2.0 self-hosted. Pruebe estos flujos en un entorno de pruebas antes de migrar su instancia de producción.
Funciones serverless — Deno frente a 30+ runtimes
Supabase Edge Functions se ejecutan exclusivamente sobre Deno — el runtime JavaScript/TypeScript moderno. Deno ofrece seguridad por defecto (permisos explícitos), compatibilidad nativa con TypeScript y un ecosistema en plena expansión.
Appwrite Functions admite más de 30 runtimes: Node.js, Python, PHP, Ruby, Go, Dart, .NET, Java, Kotlin, Swift, Bun y muchos más. Esta flexibilidad es una ventaja importante para los equipos políglotas.
Nota Appwrite 2.0: las variables _APP_LOGGING_PROVIDER y _APP_LOGGING_CONFIG_REALTIME se eliminan en 2.1.0. Quítelas de su .env antes de actualizar para evitar errores de arranque.
Tiempo real y almacenamiento de archivos
Tiempo real. Ambas plataformas utilizan WebSockets. Supabase expone los cambios de PostgreSQL en tiempo real mediante su servicio Realtime (logical replication). Appwrite Realtime cubre los eventos sobre los documentos, los archivos y los equipos — menos ligado a la base de datos subyacente y, por tanto, más portable.
Almacenamiento. Supabase Storage se apoya en una API compatible con S3 y permite definir políticas de acceso RLS directamente desde PostgreSQL. Appwrite Storage propone un sistema de permisos por equipo y por usuario, más sencillo de configurar.
Appwrite: error 503 en el primer arranque — espere a las migraciones
Si la consola de Appwrite muestra un error 503 o permanece inaccesible durante los primeros minutos, no reinicie los contenedores. Appwrite ejecuta automáticamente sus migraciones de base de datos en el primer arranque, un proceso que dura entre 2 y 5 minutos. Siga el progreso con docker compose logs -f appwrite y espere el mensaje Migrations completed. Reiniciar los contenedores durante esta fase corromperá la base de datos y obligará a una reinstalación completa.
Supabase: 502 Bad Gateway desde el gateway al arrancar — comportamiento normal
El gateway API de Supabase (Kong hasta 0.7.x, Envoy desde 0.8.0) puede devolver errores 502 durante los primeros 30 a 60 segundos después de docker compose up -d. Este comportamiento es normal y transitorio. Espere hasta que docker compose ps muestre todos los contenedores en estado healthy. Si los 502 persisten más allá de 2 minutos, inspeccione los logs con docker compose logs supabase-rest-proxy (0.8.0+) o docker compose logs kong (versiones anteriores).
Appwrite 2.0: migración desde 1.x — procedimiento y breaking changes
Appwrite 2.0 fue publicado el 7 de septiembre de 2026 (fuente: https://appwrite.io/changelog/entry/2026-09-07). Es una actualización mayor que migra el motor de persistencia de MariaDB a PostgreSQL de forma irreversible — no es posible volver a 1.x después de la migración.
Ruta de migración obligatoria. Debe actualizar primero a la versión 1.9.6 antes de pasar a 2.0. Saltarse este paso intermedio hace imposible la migración. Procedimiento recomendado:
1. Realice una copia de seguridad completa de sus volúmenes Docker: docker compose down y luego copie el directorio de datos de Appwrite.
2. Actualice primero a 1.9.6: modifique la imagen en su docker-compose.yml a appwrite/appwrite:1.9.6, luego ejecute docker compose pull && docker compose up -d.
3. Espere a que terminen las migraciones de 1.9.6 (docker compose logs -f appwrite | grep -i migrat).
4. Actualice a 2.0: cambie la imagen a appwrite/appwrite:2.0 y ejecute docker compose pull && docker compose up -d.
5. Las migraciones de PostgreSQL se ejecutan automáticamente al primer arranque de 2.0 — no detenga los contenedores durante este proceso.
Breaking changes. La issue #13547 reporta que el restablecimiento de contraseña y las invitaciones están rotos en Appwrite 2.0 self-hosted. Pruebe estos flujos en preproducción antes de migrar su instancia principal. Las variables _APP_LOGGING_PROVIDER y _APP_LOGGING_CONFIG_REALTIME se eliminan en 2.1.0 — quítelas de su .env ahora. La migración es irreversible: una vez en 2.0, solo una restauración completa desde la copia de seguridad permite volver atrás.
Supabase 0.8.0: de Kong a Envoy — impacto y migración TLS
Supabase docker-compose 0.8.0, publicado el 11 de agosto de 2026 (fuente: https://github.com/supabase/supabase/blob/master/docker/CHANGELOG.md), sustituye Kong por Envoy como gateway API. Este cambio arquitectónico es transparente para la mayoría de los despliegues, pero elimina un breaking change TLS: el listener TLS en el puerto 8443 desaparece.
Qué cambia concretamente. Si su reverse proxy o sus scripts de comprobación de salud hacían peticiones HTTPS directas a https://su-ip:8443, esas llamadas fallarán silenciosamente tras la actualización. Envoy no re-expone este puerto. La terminación TLS debe ser gestionada exclusivamente por su reverse proxy frontal.
Pasos de migración. Antes de actualizar a 0.8.0, audite todas las referencias al puerto 8443 en sus scripts de despliegue, health checks y reglas de cortafuegos. Reemplácelas por llamadas al puerto 8000 en HTTP desde la red interna, con TLS terminado por el reverse proxy. Tras docker compose pull && docker compose up -d, verifique que docker compose ps no muestre ya el servicio kong y que un servicio Envoy esté presente y healthy.
Guía de elección — ¿Supabase o Appwrite para su proyecto?
Elija Supabase si: su aplicación es web-first, su equipo conoce PostgreSQL, migra desde Firebase, o necesita una API REST autogenerada a partir del esquema de su base de datos (PostgREST).
Elija Appwrite si: desarrolla una aplicación móvil (iOS/Android) multiplataforma, su equipo trabaja en varios lenguajes y quiere elegir el runtime de sus funciones, o prefiere una interfaz de administración más accesible sin conocimientos SQL profundos.
En 2026, ambas plataformas evolucionan rápidamente. Appwrite 2.0 adopta PostgreSQL de forma irreversible — reduciendo la ventaja histórica de Supabase en ese punto — mientras que Supabase moderniza su gateway con Envoy. Para una instalación nueva, ambas son equivalentes en la cuestión de la base de datos. Para una instalación existente, planifique una ventana de mantenimiento y pruebe los flujos críticos antes de cualquier actualización mayor.
Errores frecuentes y soluciones — ambas plataformas
- Supabase — 502 Bad Gateway (gateway): esperar 30-60 s a que todos los servicios estén
healthy. Si persiste:docker compose restart supabase-rest-proxy(0.8.0+) odocker compose restart kong(versiones anteriores). - Supabase — Realtime
could not connect to the database: solucióndocker compose restart realtime. - Supabase — JWT no válido: comprobar que
ANON_KEYySERVICE_ROLE_KEYestén firmados con el mismoJWT_SECRETque en.env. - Supabase 0.8.0 — puerto 8443 inaccesible: el listener TLS de Kong desapareció con Envoy. Eliminar las llamadas directas al puerto 8443 y delegar TLS al reverse proxy frontal.
- Appwrite — 503 al arrancar: migraciones en curso (2-5 min). No reiniciar los contenedores.
- Appwrite —
docker compose down -v: PELIGRO — elimina todos los volúmenes de datos. No ejecutar nunca en producción. - Appwrite — timeout de las funciones: el cold start de un runtime no utilizado puede superar el timeout por defecto. Aumentar el límite en los ajustes del proyecto.
- Appwrite 2.0 — migración bloqueada: debe pasar por 1.9.6 antes de 2.0. Saltarse este paso hace imposible la migración. Restaure su copia de seguridad y empiece de nuevo.
- Appwrite 2.0 — restablecimiento de contraseña/invitaciones rotos: issue #13547 confirmada en self-hosted. Pruebe estos flujos antes de la puesta en producción.
- Appwrite 2.1.0 — variables eliminadas: quite
_APP_LOGGING_PROVIDERy_APP_LOGGING_CONFIG_REALTIMEdel.envantes de actualizar para evitar errores de arranque.
Conclusión: dos excelentes BaaS, dos filosofías diferentes
Supabase y Appwrite son dos opciones sólidas para autoalojar un BaaS open source en su VPS. Supabase brilla por su profundidad PostgreSQL, su API autogenerada y su Studio elaborado. Appwrite se distingue por su ligereza relativa, la riqueza de sus runtimes de funciones y la calidad de sus SDK móviles.
En septiembre de 2026, ambas plataformas atraviesan actualizaciones estructurantes: Appwrite 2.0 adopta PostgreSQL de forma irreversible, Supabase 0.8.0 cambia de Kong a Envoy. Planifique sus migraciones con una copia de seguridad completa, un entorno de pruebas y una validación de los flujos críticos — especialmente la autenticación por correo electrónico para Appwrite 2.0. Desde 99 DH/mes/mes en ServOrbit.