| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # Dev overlay — load alongside docker-compose.yml:
- # docker compose -f docker-compose.yml -f docker-compose.dev.yml up
- # (or `make dev`).
- #
- # Differences from prod:
- # * APP_ENV=development → Twig auto_reload kicks in (see View.php:36)
- # * Source dirs bind-mounted from host so edits show up without rebuild
- # * css-watcher sidecar runs `tailwindcss --watch` and seeds vendor JS
- # * tests profile builds the `tests` Dockerfile target on demand
- #
- # Volumes intentionally mount specific subdirs, NOT the project root —
- # mounting `.` would mask the composer-installed /var/www/html/vendor.
- services:
- app:
- environment:
- APP_ENV: development
- volumes:
- - ./src:/var/www/html/src
- - ./views:/var/www/html/views
- - ./public:/var/www/html/public
- - ./assets:/var/www/html/assets
- - ./migrations:/var/www/html/migrations
- - ./bin:/var/www/html/bin
- - ./tailwind.config.js:/var/www/html/tailwind.config.js
- - ./composer.json:/var/www/html/composer.json
- - ./composer.lock:/var/www/html/composer.lock
- - ./phpunit.xml:/var/www/html/phpunit.xml
- css-watcher:
- build:
- context: .
- target: css-watcher
- # Run as the host user so files written into the bind-mounted host dirs
- # (public/assets/css/app.css, public/assets/js/vendor/*) land with the
- # right ownership and don't need a `sudo chown` later. The Makefile
- # exports HOST_UID/HOST_GID; the :-1000 fallback covers the typical
- # case when someone invokes compose directly without going through make.
- user: "${HOST_UID:-1000}:${HOST_GID:-1000}"
- volumes:
- - ./assets:/build/assets
- - ./views:/build/views
- - ./src:/build/src
- - ./public:/build/public
- - ./tailwind.config.js:/build/tailwind.config.js
- restart: unless-stopped
- tests:
- build:
- context: .
- target: tests
- profiles: ["test"]
- env_file: .env
- # Read-only bind mounts — tests should never mutate source. The data
- # volume is anonymous and per-run, so each `docker compose run --rm
- # tests` gets a fresh SQLite via the entrypoint's migrate step.
- volumes:
- - ./src:/var/www/html/src:ro
- - ./tests:/var/www/html/tests:ro
- - ./views:/var/www/html/views:ro
- - ./migrations:/var/www/html/migrations:ro
- - ./bin:/var/www/html/bin:ro
- - ./phpunit.xml:/var/www/html/phpunit.xml:ro
- - ./composer.json:/var/www/html/composer.json:ro
- - ./composer.lock:/var/www/html/composer.lock:ro
|