54 lines
1.3 KiB
Docker
54 lines
1.3 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# ---------- Stage 1: Frontend assets (Vite + Tailwind) ----------
|
|
FROM node:20-alpine AS assets
|
|
WORKDIR /app
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
COPY resources ./resources
|
|
COPY vite.config.js ./
|
|
COPY public ./public
|
|
RUN npm run build
|
|
|
|
# ---------- Stage 2: PHP runtime (php-fpm + nginx) ----------
|
|
FROM serversideup/php:8.3-fpm-nginx AS app
|
|
|
|
# Install PHP extensions the app needs
|
|
USER root
|
|
RUN install-php-extensions \
|
|
pdo_mysql \
|
|
bcmath \
|
|
gd \
|
|
intl \
|
|
zip \
|
|
exif \
|
|
pcntl \
|
|
redis \
|
|
opcache
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
# Composer dependencies first (better layer caching)
|
|
COPY --chown=www-data:www-data composer.json composer.lock ./
|
|
RUN composer install \
|
|
--no-dev \
|
|
--no-scripts \
|
|
--no-autoloader \
|
|
--prefer-dist \
|
|
--no-interaction
|
|
|
|
# Application source
|
|
COPY --chown=www-data:www-data . .
|
|
|
|
# Compiled frontend assets from stage 1
|
|
COPY --chown=www-data:www-data --from=assets /app/public/build ./public/build
|
|
|
|
# Optimize autoloader
|
|
RUN composer dump-autoload --optimize --no-dev --no-interaction
|
|
|
|
# Runtime init (migrate + cache) runs on container start
|
|
COPY --chown=www-data:www-data docker/entrypoint.d/ /etc/entrypoint.d/
|
|
RUN chmod +x /etc/entrypoint.d/*.sh
|
|
|
|
USER www-data
|