docker compose up -d levanta Trazo completo, con el nombre de proyecto propio trazo. Cada servicio espera a que el anterior esté sano (healthcheck) o haya terminado bien, así nada arranca contra una base que todavía no responde. Las migraciones y los seeders son idempotentes: el servicio init los corre en cada arranque y no duplica nada.
Paso a paso
- Dockerdocker compose up -d
Por defecto, imágenes finales (lo que verán los clientes) más Mailpit para el correo local. El modo desarrollo se agrega con
docker-compose.dev.yml. - MySQL y Redis¿MySQL y Redis están sanos?
MySQL 8.4 y Redis 8.4 con sus healthchecks. La configuración de MySQL va como parámetros del
command, porque desde Windows ignora los.cnfmontados. - init¿Hay APP_KEY?
Si no llega por el entorno, la lee de
/run/trazo/app-key(volumen persistente). - init¿Es producción?
En producción la llave se define a mano y se respalda; generarla sola rompería los datos cifrados al recrear el volumen.
- initGenera la llave local en el volumen
- initmigrate --force --seed
Migraciones solo aditivas y seeders idempotentes: catálogos por clave natural, solo lo que falta. Los usuarios demo
@trazo.testno se crean en producción; las cuentas de evaluación salen del entorno. - init¿Terminó bien?
- App y procesosArrancan app, worker, scheduler y Reverb
Una sola imagen de Laravel para los cuatro, sin root y con límites de CPU y memoria. El servicio
backuparranca aparte, en cuanto MySQL está sano. - App y procesos¿app y frontend están sanos?
- GatewayAbre el puerto 8088
Único puerto publicado (
TRAZO_HTTP_PORT). Sirve/(el front),/api(Laravel) y/ws(Reverb). Resuelve los servicios por DNS en cada petición, para que un contenedor recreado no deje un 502.
Qué hacer si algo falla
| Síntoma | Dónde mirar |
|---|---|
init sale con error | docker compose -p trazo logs init: casi siempre una migración o una variable faltante |
| El gateway no arranca | docker compose -p trazo ps: qué servicio sigue sin estar sano |
| “Falta APP_KEY” en producción | Definir APP_KEY en el .env del servidor |
Nunca se usan comandos globales de Docker (system prune, volume prune…): en la misma máquina hay otros proyectos.
Dónde está en el código
docker-compose.yml: servicios, dependencias, healthchecks y límites.entrypoint.sh: la llave de la aplicación.DatabaseSeeder: qué siembra y cuándo.gateway.conf: las tres rutas del gateway.- Explicación: Docker.