--- # Development environment override services: php: image: ${IMAGES_PREFIX:-}app-php-dev build: context: . target: frankenphp_dev volumes: - ./:/app - ./frankenphp/Caddyfile:/etc/frankenphp/Caddyfile:ro - ./frankenphp/conf.d/20-app.dev.ini:/usr/local/etc/php/app.conf.d/20-app.dev.ini:ro # Keep var/ off the bind-mount for faster I/O on Mac/Windows; comment to inspect from the host. - /app/var # If you develop on Mac or Windows you can remove the vendor/ directory # from the bind-mount for better performance by enabling the next line: #- /app/vendor ports: # HTTP-only in dev — no 443 mapping (SERVER_NAME ":80" means nothing listens there). - "${HTTP_PORT:-8100}:80" environment: # HTTP-only in dev (no TLS, no HTTP→HTTPS redirect). App served on http://localhost:8100. SERVER_NAME: ":80" FRANKENPHP_WORKER_CONFIG: watch FRANKENPHP_SITE_CONFIG: hot_reload MERCURE_EXTRA_DIRECTIVES: demo # See https://xdebug.org/docs/all_settings#mode XDEBUG_MODE: "${XDEBUG_MODE:-develop}" APP_ENV: "${APP_ENV:-dev}" extra_hosts: # Ensure that host.docker.internal is correctly defined on Linux - host.docker.internal:host-gateway tty: true # Standalone React/Vite SPA (dev only — not in compose.prod.yaml; see #33/#35). frontend: image: node:22-alpine working_dir: /app volumes: - ./frontend:/app # Named volume shadows the bind-mounted node_modules so native deps # (esbuild/rollup) are built for the container's arch, not the host's. - frontend_node_modules:/app/node_modules ports: - "${VITE_PORT:-5173}:5173" command: sh -c "npm install && npm run dev -- --host 0.0.0.0 --port 5173" depends_on: - php environment: # Reliable file-watching under the bind-mount. CHOKIDAR_USEPOLLING: "true" tty: true ###> symfony/mercure-bundle ### ###< symfony/mercure-bundle ### volumes: frontend_node_modules: