57 lines
1.9 KiB
Docker
57 lines
1.9 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
|
|
# ---------- composer deps ----------
|
|
FROM composer:2.7 AS composer-deps
|
|
WORKDIR /build
|
|
COPY app/composer.json app/composer.lock ./
|
|
RUN composer install \
|
|
--no-dev --no-scripts --no-autoloader \
|
|
--prefer-dist --no-interaction --no-progress
|
|
|
|
# ---------- node / vite build ----------
|
|
FROM node:20-alpine AS node-build
|
|
WORKDIR /build
|
|
COPY app/package.json app/package-lock.json ./
|
|
RUN npm ci --no-audit --no-fund
|
|
COPY app/ ./
|
|
RUN npm run build
|
|
|
|
# ---------- assembled code ----------
|
|
FROM alpine:3.20 AS code
|
|
WORKDIR /var/www/html
|
|
COPY app/ ./
|
|
COPY --from=composer-deps /build/vendor ./vendor
|
|
COPY --from=node-build /build/public/build ./public/build
|
|
|
|
# ---------- PHP-FPM runtime ----------
|
|
FROM php:8.4-fpm-alpine AS php
|
|
RUN apk add --no-cache \
|
|
git curl libpng-dev libzip-dev oniguruma-dev icu-dev \
|
|
autoconf g++ make linux-headers $PHPIZE_DEPS \
|
|
&& docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd intl sockets \
|
|
&& pecl install redis && docker-php-ext-enable redis \
|
|
&& apk del autoconf g++ make linux-headers $PHPIZE_DEPS \
|
|
&& rm -rf /tmp/* /var/cache/apk/*
|
|
|
|
COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer
|
|
|
|
WORKDIR /var/www/html
|
|
COPY --from=code /var/www/html /var/www/html
|
|
|
|
RUN composer dump-autoload --optimize --no-dev --no-interaction \
|
|
&& mkdir -p storage/framework/cache storage/framework/sessions storage/framework/views \
|
|
storage/logs storage/app/public bootstrap/cache \
|
|
&& chown -R www-data:www-data storage bootstrap/cache \
|
|
&& chmod -R 775 storage bootstrap/cache
|
|
|
|
COPY docker/php/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
|
CMD ["php-fpm"]
|
|
|
|
# ---------- nginx runtime ----------
|
|
FROM nginx:1.27-alpine AS nginx
|
|
COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf
|
|
COPY --from=code /var/www/html/public /var/www/html/public
|