62 lines
2.2 KiB
Docker
62 lines
2.2 KiB
Docker
# ==========================================
|
|
# STAGE 1: Build Stage (Optional Dependency Prefetching)
|
|
# ==========================================
|
|
FROM composer:latest AS builder
|
|
# If you don't have production app assets to copy yet, this stage can remain idle.
|
|
|
|
# ==========================================
|
|
# STAGE 2: Final PHP Environment
|
|
# ==========================================
|
|
FROM php:8.5-fpm-bookworm
|
|
|
|
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
|
|
|
|
# Set work directory matching standard web server setups
|
|
WORKDIR /var/www/test-fhr
|
|
|
|
# Install Linux system dependencies needed for common PHP extensions
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libpng-dev \
|
|
libjpeg-dev \
|
|
libfreetype6-dev \
|
|
libzip-dev \
|
|
unzip \
|
|
git \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Configure and install PHP extensions
|
|
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
|
|
RUN docker-php-ext-install -j$(nproc) gd bcmath pdo_mysql zip
|
|
RUN pecl install redis && docker-php-ext-enable redis
|
|
|
|
# Recommended production PHP configurations
|
|
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
|
COPY ./opcache.ini $PHP_INI_DIR/conf.d/opcache.ini
|
|
|
|
# ----------------------------------------------------
|
|
# COMPOSER & LARAVEL INSTALLER (Safe Direct Method)
|
|
# ----------------------------------------------------
|
|
# 1. Pull the official global Composer executable binary
|
|
COPY --from=builder /usr/bin/composer /usr/local/bin/composer
|
|
|
|
# 2. Configure user bash profile and aliases
|
|
COPY --chown=www-data:www-data ./.bash_aliases /var/www/.bash_aliases
|
|
RUN echo "source /var/www/.bash_aliases" >> /var/www/.bashrc
|
|
|
|
# 3. FIX: Ensure BOTH the home directory and the project directory are owned by www-data
|
|
RUN mkdir -p /var/www/.composer /var/www/test-fhr && chown -R www-data:www-data /var/www
|
|
|
|
# 4. Register the Composer global binaries directory path into the container system
|
|
ENV PATH="/var/www/.composer/vendor/bin:${PATH}"
|
|
|
|
# 5. Switch context to non-root user so paths and permissions map correctly
|
|
USER www-data
|
|
|
|
# 6. Download and unpack the Laravel installer directly into www-data's profile folder
|
|
RUN composer global require laravel/installer --no-interaction
|
|
|
|
# Expose PHP-FPM default communication port
|
|
EXPOSE 9000
|
|
|
|
CMD ["php-fpm"]
|