|
|
@@ -0,0 +1,64 @@
|
|
|
+# 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
|