# Local Development Docker Compose version: '3.8' services: app: build: context: . dockerfile: Dockerfile.dev container_name: dishplanner_app restart: unless-stopped # Remove user directive to run as root in container # The container will handle permissions internally ports: - "8000:8000" # Laravel app - "5173:5173" # Vite dev server environment: # Laravel APP_NAME: "${APP_NAME:-DishPlanner}" APP_ENV: "${APP_ENV:-local}" APP_KEY: "${APP_KEY:-base64:YOUR_KEY_HERE}" APP_DEBUG: "${APP_DEBUG:-true}" APP_URL: "${APP_URL:-http://localhost:8000}" # Database DB_CONNECTION: mysql DB_HOST: db DB_PORT: 3306 DB_DATABASE: "${DB_DATABASE:-dishplanner}" DB_USERNAME: "${DB_USERNAME:-dishplanner}" DB_PASSWORD: "${DB_PASSWORD:-dishplanner}" # Session & Cache SESSION_DRIVER: "${SESSION_DRIVER:-file}" CACHE_DRIVER: "${CACHE_DRIVER:-file}" QUEUE_CONNECTION: "${QUEUE_CONNECTION:-sync}" # Mail (for development) MAIL_MAILER: "${MAIL_MAILER:-log}" # Vite VITE_HOST: "0.0.0.0" volumes: # Mount entire project for hot reload with SELinux context - .:/app:Z # Named volumes for performance and permission isolation - app_vendor:/app/vendor - app_node_modules:/app/node_modules depends_on: - db networks: - dishplanner db: image: mariadb:11 container_name: dishplanner_db restart: unless-stopped ports: - "3306:3306" environment: MYSQL_DATABASE: "${DB_DATABASE:-dishplanner}" MYSQL_USER: "${DB_USERNAME:-dishplanner}" MYSQL_PASSWORD: "${DB_PASSWORD:-dishplanner}" MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD:-root}" volumes: - db_data:/var/lib/mysql # Optional: Initialize with SQL dump # - ./database/dumps:/docker-entrypoint-initdb.d healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 3 networks: - dishplanner # Optional: Mailhog for email testing mailhog: image: mailhog/mailhog container_name: dishplanner_mailhog restart: unless-stopped ports: - "1025:1025" # SMTP server - "8025:8025" # Web UI networks: - dishplanner # Optional: Redis for caching/sessions # redis: # image: redis:alpine # container_name: dishplanner_redis # restart: unless-stopped # ports: # - "6379:6379" # networks: # - dishplanner networks: dishplanner: driver: bridge volumes: db_data: app_vendor: app_node_modules: