FROM composer:2 AS vendor WORKDIR /app COPY composer.json composer.lock ./ # --no-scripts: artisan belum ada di stage ini, post-autoload-dump dijalankan di stage final # tanpa --prefer-dist agar Composer bisa fallback ke git source saat unduhan dist gagal (mis. GitHub 504) RUN composer install \ --no-dev \ --no-interaction \ --no-progress \ --no-scripts \ --no-autoloader FROM node:22-alpine AS assets WORKDIR /app COPY package.json package-lock.json vite.config.js ./ COPY resources ./resources COPY public ./public RUN npm ci && npm run build FROM php:8.3-cli-bookworm WORKDIR /var/www/html RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ default-mysql-client \ git \ libicu-dev \ libzip-dev \ unzip \ && docker-php-ext-install \ intl \ pdo_mysql \ zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY --from=composer:2 /usr/bin/composer /usr/bin/composer COPY docker/app/php.ini /usr/local/etc/php/conf.d/99-webgis.ini COPY docker/app/entrypoint.sh /usr/local/bin/webgis-entrypoint COPY . . COPY --from=vendor /app/vendor ./vendor COPY --from=assets /app/public/build ./public/build RUN composer dump-autoload --no-dev --optimize --no-interaction \ && php artisan package:discover --ansi RUN chmod +x /usr/local/bin/webgis-entrypoint EXPOSE 8000 ENTRYPOINT ["webgis-entrypoint"] CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]