Files

117 lines
2.7 KiB
Docker

# 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;"]