Ir al contenido

Arrancar a trabajar

Esta página es la de cada día. Da por hecho que la máquina ya está provisionada: si es la primera vez, primero va Entorno local, que instala Postgres, crea las bases y los roles, y deja los servicios corriendo.

1 · Los servicios que no se arrancan a mano

Sección titulada «1 · Los servicios que no se arrancan a mano»

Postgres y Mailpit están instalados como servicios de brew y arrancan solos con la máquina. No hay que hacer nada — pero sí conviene mirarlos cuando algo raro pasa:

Ventana de terminal
brew services list

Lo que tiene que decir:

Servicio Estado esperado
postgresql@17 started
mailpit started

Si Postgres está caído:

Ventana de terminal
brew services start postgresql@17

Este es el paso que más se olvida, y el que produce los errores más confusos: el código pide columnas que la base todavía no tiene, y lo que se ve es un 500 que no dice por qué.

Después de cualquier git pull que traiga migraciones:

Ventana de terminal
cd api && pnpm db:migrate

El migrador anuncia a qué base y a qué schema apunta antes de tocarlos. Leé esa línea siempre:

→ migrando aquazaku@localhost/aquazaku_dev → schema "public"
✓ migraciones aplicadas
Ventana de terminal
pnpm --dir api dev

Corre con tsx watch: se reinicia sola al guardar. Queda en el 3001.

En otra terminal —los dos servidores quedan en primer plano—:

Ventana de terminal
pnpm --dir web dev

Queda en el 3000.

Tres comprobaciones, en orden. Si una falla, las de abajo no importan.

Ventana de terminal
curl -s localhost:3001/health
{"status":"ok","service":"aquazaku-api","base":"ok","desdeHaceMs":377602}

Lo que hay que mirar:

Campo Qué significa
"base":"ok" La api habla con Postgres
"base":"arrancando" Todavía no hubo primer contacto. Esperá unos segundos
"base":"sin-contacto" Perdió la base. Mirá brew services list
faltan: [...] Hay migraciones sin aplicar. Volvé al paso 2

El campo faltan solo aparece cuando algo está pendiente. Si no está, el schema está al día.

Después:

Ventana de terminal
curl -s -o /dev/null -w '%{http_code}\n' localhost:3000/login

Un 200 quiere decir que el front levantó y que pudo hablar con la api — la pantalla de login se arma del lado del servidor.

En localhost:3000, con un usuario de aquazaku_dev.

Ventana de terminal
pnpm --dir docs dev

Queda en el 4321. Solo hace falta cuando se escribe documentación — no es parte del arranque normal.

Corre en CI en cada push, y a veces conviene correrla en local antes. Necesita dos condiciones que la base de desarrollo no cumple: estar vacía y tener un solo administrador. Por eso va contra la base de tests, en el 3002.

Está explicado en la propia colección (bruno/aquazaku/collection.bru) y hay una configuración api-pruebas en .claude/launch.json que la levanta apuntada a aquazaku_test.

Puerto Qué
3000 web
3001 api
3002 api contra la base de tests, solo para Bruno
4321 docs
5432 Postgres
1025 Mailpit, SMTP
8025 Mailpit, la bandeja para leer

Para ver qué está ocupando uno:

Ventana de terminal
lsof -nP -iTCP:3000 -sTCP:LISTEN

Liberar un puerto colgado y el resto de la gestión de servicios están en Entorno local.

Síntoma Causa más probable
ECONNREFUSED :5432 Postgres caído → brew services start postgresql@17
/health dice faltan: [...] Migraciones sin aplicar → paso 2
Los tests fallan por columnas que no existen Falta pnpm db:migrate:test
Another next dev server is already running Ya está levantado. Usá ese
La pantalla de login no carga La api está caída: el front la consulta del lado del servidor
El correo de recuperación «no llega» Llegó a Mailpit, no a internet → localhost:8025
Un 500 en todas las pantallas Casi siempre el schema desactualizado. Mirá /health