clupilot/Dockerfile

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-scripts --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