### =============================== ### STAGE 1: COMPOSER ### =============================== FROM composer:latest AS composer WORKDIR /app COPY composer.json composer.lock ./ RUN composer install --no-dev --optimize-autoloader --no-interaction ### =============================== ### STAGE 2: FRONTEND BUILD ### =============================== FROM node:20-alpine AS frontend WORKDIR /app # COPY vendor dari composer stage COPY --from=composer /app/vendor vendor COPY package*.json ./ RUN npm install COPY resources resources COPY vite.config.* . COPY tailwind.config.* . COPY postcss.config.* . RUN npm run build ### =============================== ### STAGE 3: PHP / RUNTIME ### =============================== FROM dunglas/frankenphp:1-php8.3 ENV SERVER_NAME=":80" WORKDIR /app # System deps RUN apt-get update && apt-get install -y \ libpng-dev libjpeg-dev libfreetype6-dev \ libzip-dev libicu-dev pkg-config \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install gd pdo pdo_mysql zip bcmath intl exif \ && rm -rf /var/lib/apt/lists/* # Copy app COPY . . # Copy vendor COPY --from=composer /app/vendor vendor # Copy Vite build COPY --from=frontend /app/public/build public/build RUN php artisan optimize:clear