FROM php:8.3-fpm-alpine LABEL maintainer="Infra Manager" # Build arguments ARG NODE_VERSION=22 ARG USER_ID=1000 ARG GROUP_ID=1000 # Install system dependencies RUN apk add --no-cache \ bash \ curl \ git \ icu-dev \ libzip-dev \ linux-headers \ oniguruma-dev \ openssl-dev \ sqlite \ sqlite-dev \ supervisor \ unzip \ zip \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ shadow \ nodejs \ npm # Install PHP extensions RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install \ bcmath \ exif \ gd \ intl \ mbstring \ opcache \ pcntl \ pdo \ pdo_sqlite \ zip # Install pdo_mysql for later MySQL migration RUN apk add --no-cache mysql-client \ && docker-php-ext-install pdo_mysql # Install Redis extension RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \ && pecl install redis \ && docker-php-ext-enable redis \ && apk del .build-deps # Install Composer COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer # Configure opcache RUN docker-php-ext-enable opcache COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini # PHP configuration COPY docker/php/php.ini /usr/local/etc/php/conf.d/custom.ini # Create application user RUN addgroup -g ${GROUP_ID} appgroup 2>/dev/null || true \ && adduser -u ${USER_ID} -G appgroup -s /bin/bash -D appuser 2>/dev/null || true # Set working directory WORKDIR /var/www/html # Copy application COPY --chown=appuser:appgroup . . # Install PHP dependencies RUN composer install --no-dev --optimize-autoloader --no-interaction 2>/dev/null || \ composer install --optimize-autoloader --no-interaction # Install Node dependencies and build assets RUN npm ci && npm run build # Set permissions RUN chown -R appuser:appgroup /var/www/html \ && chmod -R 755 /var/www/html/storage \ && chmod -R 755 /var/www/html/bootstrap/cache USER appuser EXPOSE 9000 CMD ["php-fpm"]