117 lines
2.7 KiB
Docker
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;"]
|