# --- vendor: PHP dependencies --- # Includes require-dev on purpose: database/seeders relies on fakerphp/faker # (via Laravel's fake() helper) to seed a demo owner account. This is an MVP # image seeded with demo data, not a hardened production build — trimming to # --no-dev is a reasonable follow-up once seeding no longer needs Faker. FROM composer:2 AS vendor WORKDIR /app COPY composer.json composer.lock ./ RUN composer install --no-scripts --no-interaction --prefer-dist --no-progress COPY . . RUN composer dump-autoload --optimize # --- assets: compiled Vite frontend (Breeze's Blade views use @vite) --- FROM node:22-alpine AS assets WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY resources/ resources/ COPY vite.config.js ./ RUN npm run build # --- final: php-fpm + nginx in one container, supervised --- FROM php:8.4-fpm-alpine RUN apk add --no-cache nginx supervisor postgresql-dev libzip-dev icu-dev oniguruma-dev \ && docker-php-ext-install pdo_pgsql pgsql bcmath zip intl opcache WORKDIR /var/www/html COPY --from=vendor /app ./ COPY --from=assets /app/public/build ./public/build COPY docker/nginx.conf /etc/nginx/http.d/default.conf COPY docker/supervisord.conf /etc/supervisord.conf RUN chown -R www-data:www-data storage bootstrap/cache \ && mkdir -p /run/nginx EXPOSE 80 CMD ["supervisord", "-c", "/etc/supervisord.conf"]