# Development Docker Setup This directory contains Docker Compose files for local development using Laravel Sail. ## Files - **docker-compose.yml** - Base Sail configuration for backend (Laravel) and MySQL - **docker-compose.override.yml** - Development overrides: - Podman/SELinux compatibility (`:Z` volume flags) - Standard MySQL image (instead of mysql-server) - Frontend container (Node.js development server) ## Quick Start Use the automated setup script from the project root: ```bash ./bin/start-dev ``` This script will: 1. Create `.env` if it doesn't exist 2. Install backend dependencies (composer) 3. Start all containers (backend, MySQL, frontend) 4. Run database migrations 5. Optionally seed the database ## Manual Usage ### Start all services ```bash docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ up -d ``` ### View logs ```bash # All services docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ logs -f # Specific service docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ logs -f frontend ``` ### Run backend commands ```bash # Run migrations docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ exec backend php artisan migrate # Run tinker docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ exec backend php artisan tinker # Run tests docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ exec backend php artisan test ``` ### Stop all services ```bash docker compose -f .docker/development/docker-compose.yml \ -f .docker/development/docker-compose.override.yml \ down ``` ## Services | Service | Port | Description | |---------|------|-------------| | **backend** | 8000 | Laravel API (PHP 8.4 + Sail) | | **mysql** | 3306 | MySQL 8.0 database | | **frontend** | 5173 | Vite dev server (React Router) | ## Environment Variables The backend reads from `backend/.env`. Key variables: - `APP_PORT` - Backend port (default: 80, set to 8000 for Podman) - `DB_*` - Database connection settings - `FORWARD_DB_PORT` - Exposed MySQL port (default: 3306) ## Volume Mounts - `backend/` → `/var/www/html` (backend container) - `frontend/` → `/app` (frontend container) - MySQL data persists in named volume `sail-mysql` ## Podman Compatibility The `:Z` flag on volumes enables SELinux compatibility for Podman users. This is automatically included in the override file. ## Notes - The frontend container automatically runs `npm install` and `npm run dev` on startup - Laravel Sail handles PHP-FPM, supervisor, and other backend services - Hot reload is enabled for both frontend (Vite HMR) and backend (file watchers)