# event-uploader API – Laravel. Same image used for api and queue (different command). FROM php:8.4-cli-alpine # PHP extensions for Laravel + MySQL + Google etc. RUN apk add --no-cache \ git \ unzip \ libzip-dev \ libpng-dev \ libxml2-dev \ oniguruma-dev \ && docker-php-ext-install -j$(nproc) \ pdo_mysql \ gd \ fileinfo \ mbstring \ xml \ zip \ pcntl \ bcmath # Composer COPY --from=composer:2 /usr/bin/composer /usr/bin/composer ENV COMPOSER_ALLOW_SUPERUSER=1 WORKDIR /app # Dependencies first (better layer cache). --no-scripts so Laravel's post-autoload-dump (artisan) is not run yet. COPY composer.json composer.lock ./ RUN composer install --no-dev --optimize-autoloader --no-interaction --no-scripts # Application COPY . . # Regenerate autoloader and run Laravel's post-install scripts (e.g. package:discover) now that artisan exists RUN composer dump-autoload --optimize --no-dev # .env and APP_KEY are provided at runtime via compose # Writable dirs (runtime will mount or use defaults) RUN mkdir -p storage/framework/cache storage/framework/sessions storage/framework/views storage/logs bootstrap/cache \ && chmod -R 775 storage bootstrap/cache EXPOSE 8000 CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]