Buscar en la documentación

Arranque del stack (init)

El orden en que se levantan los servicios de Docker con docker compose up -d, quién espera a quién y qué hace el servicio de inicialización.

Módulo operacion1 min de lecturaVer en GitHub

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.

Diagrama5 carriles · 10 pasos · 4 salidas de error
SíNoSíNoSíNoSíNoSíNodocker compose up-d1¿MySQL y Redisestán sanos?2Espera yreintenta elhealthcheck¿Hay APP_KEY?3¿Esproducción?4Se detiene con"Falta APP_KEY"Genera la llavelocal en el volumen5migrate --force--seed6¿Terminó bien?7Nada más arranca;el error queda ensus logsArrancan app,worker, scheduler yReverb8¿app yfrontend estánsanos?9El gateway noarranca hasta quelo esténAbre el puerto 808810
Los números coinciden con el paso a paso. En pantallas pequeñas el diagrama se desliza de lado.

Paso a paso

  1. 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.

  2. 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 .cnf montados.

  3. init¿Hay APP_KEY?

    Si no llega por el entorno, la lee de /run/trazo/app-key (volumen persistente).

  4. 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.

  5. initGenera la llave local en el volumen
  6. initmigrate --force --seed

    Migraciones solo aditivas y seeders idempotentes: catálogos por clave natural, solo lo que falta. Los usuarios demo @trazo.test no se crean en producción; las cuentas de evaluación salen del entorno.

  7. init¿Terminó bien?
  8. 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 backup arranca aparte, en cuanto MySQL está sano.

  9. App y procesos¿app y frontend están sanos?
  10. 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íntomaDónde mirar
init sale con errordocker compose -p trazo logs init: casi siempre una migración o una variable faltante
El gateway no arrancadocker compose -p trazo ps: qué servicio sigue sin estar sano
“Falta APP_KEY” en producciónDefinir 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