# syntax=docker/dockerfile:1 FROM php:8.3-fpm-bookworm AS php-base ARG APP_UID=1000 ARG APP_GID=1000 ENV APP_ENV=production \ APP_DEBUG=false \ COMPOSER_ALLOW_SUPERUSER=1 WORKDIR /var/www/html RUN apt-get update \ && apt-get install -y --no-install-recommends \ libfcgi-bin \ libfreetype6-dev \ libicu-dev \ libjpeg62-turbo-dev \ libpng-dev \ libzip-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j"$(nproc)" \ bcmath \ exif \ gd \ intl \ pcntl \ pdo_mysql \ sockets \ zip \ && apt-mark manual \ libfcgi-bin \ libfreetype6 \ libicu72 \ libjpeg62-turbo \ libpng16-16 \ libzip4 \ && apt-get purge -y --auto-remove \ libfreetype6-dev \ libicu-dev \ libjpeg62-turbo-dev \ libpng-dev \ libzip-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && groupadd --gid "$APP_GID" app \ && useradd --uid "$APP_UID" --gid "$APP_GID" --create-home --shell /usr/sbin/nologin app COPY docker/production/php.ini /usr/local/etc/php/conf.d/99-production.ini COPY docker/production/php-fpm-pool.conf /usr/local/etc/php-fpm.d/zz-production.conf FROM php-base AS vendor COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer COPY . . RUN composer install \ --no-dev \ --prefer-dist \ --optimize-autoloader \ --no-interaction \ --no-progress \ && composer clear-cache FROM node:24-bookworm-slim AS frontend WORKDIR /var/www/html COPY package.json package-lock.json ./ RUN npm ci --no-audit --no-fund COPY resources ./resources COPY public ./public COPY vite.config.* ./ ARG VITE_APP_NAME=Moonwell ENV VITE_APP_NAME="$VITE_APP_NAME" RUN npm run build FROM php-base AS app COPY --from=vendor --chown=app:app /var/www/html /var/www/html COPY --from=frontend --chown=app:app /var/www/html/public/build /var/www/html/public/build RUN mkdir -p \ bootstrap/cache \ storage/app/public \ storage/framework/cache/data \ storage/framework/sessions \ storage/framework/views \ storage/logs \ && chown -R app:app bootstrap/cache storage EXPOSE 9000 CMD ["php-fpm", "--nodaemonize"] FROM nginx:1.27-alpine AS web ARG APP_UID=1000 ARG APP_GID=1000 RUN addgroup -S -g "$APP_GID" app \ && adduser -S -D -H -u "$APP_UID" -G app app COPY docker/production/nginx.conf /etc/nginx/nginx.conf COPY --from=vendor --chown=app:app /var/www/html/public /var/www/html/public COPY --from=frontend --chown=app:app /var/www/html/public/build /var/www/html/public/build USER app EXPOSE 8080 CMD ["nginx", "-g", "daemon off;"]