Skip to main content

Develop stack

The develop stack is docker-compose.yml at the monorepo root — the default compose file. It runs php-fpm + nginx + MySQL + Redis with the backend source bind-mounted from apps/backend (no host PHP required), a queue worker for queued jobs (notifications today), a Reverb websocket server for realtime notifications, and the admin and storefront dev servers behind the frontend profile.

cp .env.example .env
docker compose up -d

First-time Laravel setup (composer install, key generation, migrations) runs automatically on boot.

Services​

ServiceImagePortNotes
appbaxela/backend:develop—php-fpm; backend source bind-mounted
queuebaxela/backend:develop—queue:work on the database queue
reverbbaxela/backend:develop8080Laravel Reverb websockets (realtime notifications)
webnginx:stable-bookworm8085Serves the API; health-checked via /up
adminbaxela/admin:develop5173Vite dev server (frontend profile)
storefrontbaxela/storefront:develop3000Next.js dev server (frontend profile)
mysqlmysql:8-debian3308Database with healthcheck
redisredis:7-bookworm6378Cache/queues with healthcheck
mailaxllent/mailpit8025Catch-all mail UI (mail profile)

The queue service mirrors the production stack's worker so queued notifications (and anything else on the database queue) process locally too. The reverb service runs php artisan reverb:start on the same bind-mounted image — the backend broadcasts notifications through it, and both the admin panel and the storefront connect to it (via laravel-echo/pusher-js) instead of polling the API.

Profiles​

  • frontend (on by default via COMPOSE_PROFILES in .env.example) — starts the admin and storefront dev servers. Set COMPOSE_PROFILES= (empty) for a backend-only stack.
  • mail — starts Mailpit so every outgoing email is catchable at http://localhost:8025.

Backend-only mode​

Handy when working on the API without the frontends:

COMPOSE_PROFILES= docker compose up -d

Health​

The nginx service healthcheck curls /up, which passes through php-fpm into Laravel — a healthy web service means the whole request path works.

All host ports are overridable through the root .env (see Configuration).