---
title: "Requisitos previos"
description: "Cuentas, Node, PostgreSQL y condiciones del env antes de instalar un clon de Ring Platform, verificados con install.sh y env.local.template"
locale: "es"
---
# Requisitos previos

> **Info**
> **Antes de la [Instalación](/docs/getting-started/installation.md):** necesitas una máquina que pueda ejecutar **Node.js 20+**, una instancia de **PostgreSQL** para trabajar con paridad de producción y (para que los testers inicien sesión) al menos un camino de Auth.js. Las versiones de abajo coinciden con `install.sh`, `INSTALL.md` y `env.local.template`, no con la antigua guía de Node 18. Usa las pestañas **Fundador** / **Desarrollador** de la barra lateral para filtrar esta página.

Ring Platform es una aplicación **Next.js 16 + React 19** con un `DB_BACKEND_MODE` **obligatorio**. Los clones locales y con paridad de producción usan **PostgreSQL como base principal** (`k8s-postgres-fcm`). Solo Firestore (`firebase-full`) es un camino de prototipo más limitado.

## Comparación de destinos de despliegue

| Camino | Quién | Qué debes aportar | Qué te ahorras |
|------|-----|---------------------|-------|
| **Autoalojamiento OSS** (GitHub + `install.sh`) | Indie / integrador contratado | Node 20+, Git, Postgres (o Docker), `.env.local`, OAuth o Ring Mailer | k8s gestionado / entrega al colono |
| **Gestionado por Ringdom** (alojamiento llave en mano) | Fundador / colono | Dominio + brief del colono; secretos del clúster después de la entrega | Casi toda esta lista en local |
| **Prototipo `firebase-full`** | Prueba rápida de UI | Proyecto de Firebase + Node 20+ | Profundidad de ERP / PaymentConductor / News Kingdom sobre Postgres |

> **Tip**
> Predeterminado para ring-platform.org y la paridad entre clones: **`DB_BACKEND_MODE=k8s-postgres-fcm`**. Consulta [Modos de backend](/docs/architecture/backend-modes-and-databases.md) y [Selección de base de datos](/docs/customization/database-selection.md).

## De un vistazo

| Requisito | Base verificada | Fuente / notas |
|-------------|-------------------|----------------|
| **Node.js** | **v20+** (se recomienda v22+) | `install.sh` falla por debajo de 20; `INSTALL.md` recomienda 22+ |
| **npm** | **10+** | `INSTALL.md`; el instalador ejecuta `npm install` |
| **Git** | Reciente | Clona [connectplatform/ring](https://github.com/connectplatform/ring) |
| **PostgreSQL** | **14+** (imagen de Docker **16**; Homebrew **18** es habitual en la documentación) | Base de datos `ring_platform`, usuario `ring_user` (`env.local.template`) |
| **PostGIS** | Necesario para un `data/schema.sql` desde cero | La cabecera del esquema activa `CREATE EXTENSION postgis` (v4.1.0+) |
| **Puertos** | `3000` (app), `5432` (Postgres) | Servidor propio: `node --import tsx server.ts` mediante `npm run dev` |
| **Redis** | Opcional | `REDIS_URL`: rate-limit / set-nx recurren a memoria del proceso si no está definido |
| **Disco / RAM** | Un portátil cómodo | Solo orientación para operadores, no es un SLA medido |

### For founders

## Qué necesitan los fundadores antes de ringizar

Estás preparando un **clon white-label**: la marca en `ring-config.json`, los secretos en `.env.local` y (para las funciones de producción) Postgres con `data/schema.sql` aplicado.

### MVP frente a listo para producción

  
- **[Explorar la UI en local](/docs/getting-started/installation.md)** — Node 20+, `install.sh --quick`, Postgres **o** un `firebase-full` de corta duración. Consulta [Selección de base de datos](/docs/customization/database-selection.md).

  
- **[Clon con paridad de producción](/docs/getting-started/migrations.md)** — **Postgres como base principal** + `data/schema.sql` (v4.1+) + migraciones del reino: tienda, PaymentConductor, profundidad de News Kingdom.

  
- **[Inicio de sesión para testers](/docs/features/authentication.md)** — Al menos un camino de Auth.js: Google OAuth, Apple o Ring Mailer (`SMTP_*` o `EMAIL_MODE=ethereal`).

  
- **[Pagos más adelante](/docs/features/payment-conductor.md)** — Credenciales de WayForPay / Stripe. **No** son necesarias para el primer `npm run dev`; añádelas antes del checkout.

### Lista de cuentas (fundador)

| Cuenta / artefacto | Cuándo se necesita |
|--------------------|---------------|
| Clon de GitHub de `connectplatform/ring` | Siempre para el autoalojamiento OSS |
| PostgreSQL (Docker local, Homebrew o alojado) | Modos Postgres (`k8s-postgres-fcm`, `supabase-fcm`) |
| Cliente OAuth de Google Cloud **o** Apple Sign In **o** SMTP / Ethereal | Antes del inicio de sesión real de los testers |
| Proyecto de Firebase (claves FCM) | Opcional hasta las notificaciones push |
| WayForPay / Stripe | Solo antes del checkout de PaymentConductor |
| Entrega de colono de Ringdom | Si te saltas el autoalojamiento y usas alojamiento gestionado |

### Tiempo realista (aproximado)

| Camino | Primera pasada típica | Resultado |
|------|--------------------|---------|
| `./install.sh --quick` + Postgres existente | Decenas de minutos | Estructura del env; aún tienes que aplicar el esquema y OAuth |
| Arranque completo con Postgres como base principal | Una sesión de alrededor de una hora | Coincide con un stack local al estilo de ring-platform.org |
| Prototipo `firebase-full` | Prueba más corta | Se salta la profundidad de ERP / conductor |

Los tiempos varían según la máquina y la configuración de credenciales. Tómalos como rangos de planificación, no como SLA.

> **Warning**
> El **alojamiento gestionado por Ringdom** se salta casi toda esta lista: los colonos reciben un clúster ya configurado. Quienes se autoalojan desde GitHub siguen esta página ([OSS frente a enterprise](/docs/development/oss-vs-enterprise.md)).

### For developers

## Herramientas

### Node.js y gestor de paquetes

{`node --version   # v20.0.0+ (v22+ recommended in INSTALL.md)
npm --version    # 10+`}

`install.sh` falla de inmediato si Node está por debajo de v20. Usa nvm, fnm o los instaladores oficiales; consulta `INSTALL.md`. El camino del instalador en el árbol público es **npm**. Otros gestores de paquetes no son la fuente de verdad documentada para la instalación.

### PostgreSQL + PostGIS

Conexión predeterminada (de `env.local.template`):

{`DB_BACKEND_MODE=k8s-postgres-fcm
DB_HOST=localhost
DB_PORT=5432
DB_NAME=ring_platform
DB_USER=ring_user
DB_PASSWORD=ring_password_2024
# or: DATABASE_URL=postgresql://ring_user:ring_password_2024@localhost:5432/ring_platform`}

Base de datos rápida con Docker (coincide con la etiqueta de imagen de `docker-compose.template.yml`):

{`docker run -d --name ring-postgres-dev \\
  -e POSTGRES_USER=ring_user \\
  -e POSTGRES_PASSWORD=ring_password_2024 \\
  -e POSTGRES_DB=ring_platform \\
  -p 5432:5432 \\
  postgres:16-alpine`}

Un `data/schema.sql` desde cero (cabecera **4.1.0**) ejecuta `CREATE EXTENSION` para `uuid-ossp`, `pgcrypto` y **`postgis`**. Al aplicar el esquema, usa preferiblemente una imagen con PostGIS o Homebrew `postgresql@18` + `postgis`. Consulta [Migraciones de base de datos](/docs/getting-started/migrations.md).

### Modo de backend (obligatorio)

Define **`DB_BACKEND_MODE`** antes del primer arranque (`lib/database/backend-mode-config.ts`, sin valor predeterminado silencioso en runtime):

| Valor | Cuándo |
|-------|------|
| `k8s-postgres-fcm` | **Camino predeterminado**: datos de la app en Postgres + push FCM opcional |
| `supabase-fcm` | Postgres en Supabase + FCM opcional |
| `firebase-full` | Solo prototipo con Firestore |

**`DATABASE_MODE` se ha eliminado**: no lo definas. En detalle: [Modos de backend](/docs/architecture/backend-modes-and-databases.md).

### Variables de entorno mínimas

{`cp env.local.template .env.local
# install.sh generates AUTH_SECRET and WALLET_ENCRYPTION_KEY

AUTH_SECRET=...                    # required: npx @better-auth/cli secret
DB_BACKEND_MODE=k8s-postgres-fcm
DB_* or DATABASE_URL               # required for postgres modes

# At least one sign-in path:
AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRET
# and/or AUTH_APPLE_*
# and/or Ring Mailer: EMAIL_MODE=ethereal or SMTP_HOST + SMTP_USER + SMTP_PASSWORD
# (email_login_tokens table, migration 038 / included in flattened schema.sql)`}

Proveedores registrados en `auth.ts`: Credentials de **Ring Mailer** (`email-otp`, `email-magic`, `credentials`), OAuth de **Google**, **Google One Tap**, **Apple** y credenciales de billetera/cripto. OAuth de GitHub/Discord **no** está en la lista predeterminada de proveedores. **Resend / `AUTH_RESEND_KEY` no forman parte de la fuente de verdad del mailer** (usa `SMTP_*` / Ethereal).

Opcional para funciones posteriores:

- `BLOB_READ_WRITE_TOKEN`: subidas a Vercel Blob  
- `WAYFORPAY_*` / `STRIPE_*`: PaymentConductor  
- `NEXT_PUBLIC_FIREBASE_*` + cuenta de servicio de Admin: push FCM (no la base de datos Firestore en Postgres como base principal)  
- `OPENAI_API_KEY` / `ANTHROPIC_API_KEY`: AI matcher / Email CRM  
- `REDIS_URL`: opcional; si no está definido se usa la memoria del proceso  

Nunca hagas commit de `.env.local`. Consulta [Configuración del entorno](/docs/deployment/environment.md).

### Lista de validación

### Sistema

{`node --version && npm --version
curl -fsS -o /dev/null https://registry.npmjs.org/ || echo "npm registry unreachable"`}

### Base de datos

{`psql "$DATABASE_URL" -c "SELECT version();"
# or:
docker exec ring-postgres-dev psql -U ring_user -d ring_platform -c "SELECT 1;"`}

### Salud (después de instalar)

{`curl -sS http://localhost:3000/api/health | jq .status`}

Espera `"healthy"` cuando `AUTH_SECRET` está definido (`app/api/health/route.ts` trata la ausencia de `AUTH_SECRET` como crítica). Consulta [Monitorización](/docs/deployment/monitoring.md).

### Opcional: stack de Docker Compose

`install.sh` puede generar `docker-compose.yml` a partir de `docker-compose.template.yml` (app + **postgres:16-alpine** + **redis:7-alpine**, más un perfil opcional de monitorización). Para el `npm run dev` del primer día basta con un solo contenedor de Postgres (o Homebrew). Redis sigue siendo opcional.

## Camino recomendado

Sigue el flujo de la guía de Primeros pasos: cumple esta lista → ejecuta `install.sh` → aplica el esquema → haz una prueba rápida.

1. Confirma Node 20+ y un plan para Postgres (Docker 16 o Homebrew 18 + PostGIS).
2. Continúa con la [Instalación](/docs/getting-started/installation.md) (`./install.sh --quick` o env manual).
3. Aplica las [Migraciones de base de datos](/docs/getting-started/migrations.md) y luego el [Primer éxito](/docs/getting-started/first-success.md).

## Camino manual

### Inventario de cuentas y puertos

Decide entre autoalojamiento OSS y gestión por Ringdom. Libera **3000** y **5432** (o define `DB_PORT` / `PORT` de la app a propósito).

### Prepara Postgres con PostGIS

Crea la base de datos `ring_platform` / el usuario `ring_user` (o haz que coincidan con tu `DATABASE_URL`). Confirma que `CREATE EXTENSION postgis` funcionará antes de aplicar `data/schema.sql`.

### Prepara el env sin inventar claves

Copia `env.local.template` → `.env.local` (o deja que lo haga `install.sh`). Define `DB_BACKEND_MODE`, genera `AUTH_SECRET` / `WALLET_ENCRYPTION_KEY` y añade un camino de autenticación. No pegues secretos de producción en la documentación ni en git.

## Preguntas frecuentes

### Impacto

#### ¿Arrancará mi clon sin Google OAuth?

Sí, el proceso arranca: lo primero que importa es `AUTH_SECRET` + `DB_BACKEND_MODE`. El inicio de sesión de los testers sigue necesitando **al menos un** proveedor: Google, Apple o Ring Mailer (Ethereal/SMTP).

#### ¿Necesito Firebase el primer día?

No para los datos de la app con Postgres como base principal. Firebase Admin / `NEXT_PUBLIC_FIREBASE_*` importan cuando activas el **push FCM** o cuando eliges `firebase-full`.

#### ¿Necesito Redis?

No para un `npm run dev` local con una sola réplica. Define `REDIS_URL` cuando quieras compartir rate-limit / set-nx entre procesos.

### Operación

#### ¿Node 18 sigue siendo compatible?

No. `install.sh` requiere **Node 20+**. Es preferible Node 22+, según los ejemplos de solución de problemas de `INSTALL.md`.

#### ¿PostGIS falló con `schema.sql`?

Instala PostGIS para tu Postgres (Homebrew `postgis` o una imagen con PostGIS). El esquema aplanado **4.1.0** activa la extensión en una aplicación desde cero.

#### ¿`/api/health` no está sano?

Comprueba que `.env.local` tenga `AUTH_SECRET`. En las rutas de detección de Postgres, la ruta de salud trata ese secreto como crítico. Las variables de Firebase que faltan importan más en configuraciones sin Postgres.

#### Alojamiento gestionado: ¿me salto esta página?

Para el primer arranque, en gran parte sí. Consérvala como contrato para cuando más adelante añadas OAuth propio, pagos o un fork de Layer1.

## Documentación relacionada

  
- [getting-started/installation](/docs/getting-started/installation.md) — Siguiente paso: ejecuta install.sh y aplica el esquema después de esta lista.

  
- [getting-started/migrations](/docs/getting-started/migrations.md) — Depende de: Postgres + PostGIS antes de aplicar data/schema.sql.

  
- [getting-started/first-success](/docs/getting-started/first-success.md) — Siguiente paso: prueba rápida después de npm run dev.

  
- [deployment/environment](/docs/deployment/environment.md) — En detalle: toda la superficie de env.local.template más allá del mínimo del primer arranque.

  
- [architecture/backend-modes-and-databases](/docs/architecture/backend-modes-and-databases.md) — Mismo flujo: elige DB_BACKEND_MODE antes del primer arranque.

> **Success**
> ¿Cumples los requisitos? Continúa con la [Instalación](/docs/getting-started/installation.md).

=20 en package.json para que npm/yarn avisen pronto. Hoy solo install.sh exige Node 20+."
  implementationCost={4}
  labels={['tooling']}
  voteCount={0}
/>
