# syntax=docker/dockerfile:1.6 ###################################### # 1) PHP-FPM runtime (CodeIgniter) # ###################################### FROM php:8.2-fpm-alpine AS php WORKDIR /var/www/html # Install OS deps + PHP extensions (incl. intl) RUN apk add --no-cache icu-dev libzip-dev oniguruma-dev bash curl git unzip \ && docker-php-ext-configure intl \ && docker-php-ext-install pdo pdo_mysql mysqli intl zip opcache # Opcache tuning COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini # Install Composer (copy from official image) COPY --from=composer:2 /usr/bin/composer /usr/bin/composer # Copy only composer files first for better caching COPY composer.json composer.lock ./ # Run composer install **after** intl is available RUN composer install --no-dev --prefer-dist --no-interaction --no-progress # Now copy the rest of your app COPY . . # Non-root user RUN addgroup -g 1000 www \ && adduser -G www -g www -s /bin/sh -D www \ && chown -R www:www /var/www/html USER www EXPOSE 9000 HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD php -v || exit 1 ###################################### # 2) Nginx to serve static + proxy # ###################################### FROM nginx:1.27-alpine AS nginx WORKDIR /var/www/html # Copy app so Nginx can serve assets COPY --from=php /var/www/html /var/www/html # Nginx vhost COPY docker/nginx/codeigniter.conf /etc/nginx/conf.d/default.conf EXPOSE 80 HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD wget -q -O - http://127.0.0.1/ || exit 1