From 53a9c689221d9519b5c43371032b386be1d2e5ef Mon Sep 17 00:00:00 2001 From: KWON Date: Fri, 26 Dec 2025 11:40:50 +0900 Subject: [PATCH] no message --- 8.4/Dockerfile | 107 +++++++++++++++++++++++++++++++++++++++++++++ 8.4/entrypoint.sh | 40 +++++++++++++++++ docker-compose.yml | 5 +++ 3 files changed, 152 insertions(+) create mode 100644 8.4/Dockerfile create mode 100644 8.4/entrypoint.sh diff --git a/8.4/Dockerfile b/8.4/Dockerfile new file mode 100644 index 0000000..e72220f --- /dev/null +++ b/8.4/Dockerfile @@ -0,0 +1,107 @@ +# ========================= +# Build stage (확장 설치) +# ========================= +FROM php:8.4-apache AS build + +# Install system deps and build requirements +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + unzip \ + git \ + curl \ + libfreetype6-dev \ + libicu-dev \ + libjpeg-dev \ + libmagickwand-dev \ + libpng-dev \ + libwebp-dev \ + libzip-dev \ + libxml2-dev \ + ghostscript \ + ; \ + rm -rf /var/lib/apt/lists/* + +# Configure and install PHP extensions +RUN set -eux; \ + docker-php-ext-configure gd \ + --with-freetype \ + --with-jpeg \ + --with-webp \ + ; \ + docker-php-ext-install -j"$(nproc)" \ + bcmath \ + exif \ + gd \ + intl \ + mysqli \ + zip \ + soap \ + ; \ + pecl install imagick-3.6.0; \ + docker-php-ext-enable imagick + +# Enable Opcache with recommended settings +RUN set -eux; \ + docker-php-ext-enable opcache; \ + { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=4000'; \ + echo 'opcache.revalidate_freq=2'; \ + } > /usr/local/etc/php/conf.d/opcache-recommended.ini + +# Error logging settings +RUN { \ + echo 'error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR'; \ + echo 'display_errors = Off'; \ + echo 'display_startup_errors = Off'; \ + echo 'log_errors = On'; \ + echo 'error_log = /dev/stderr'; \ + echo 'log_errors_max_len = 1024'; \ + echo 'ignore_repeated_errors = On'; \ + echo 'ignore_repeated_source = Off'; \ + echo 'html_errors = Off'; \ +} > /usr/local/etc/php/conf.d/error-logging.ini + +# ========================= +# Runtime stage (슬림화) +# ========================= +FROM php:8.4-apache + +# Apache modules +RUN set -eux; \ + a2enmod rewrite expires; \ + a2enmod remoteip; \ + { \ + echo 'RemoteIPHeader X-Forwarded-For'; \ + echo 'RemoteIPInternalProxy 10.0.0.0/8'; \ + echo 'RemoteIPInternalProxy 172.16.0.0/12'; \ + echo 'RemoteIPInternalProxy 192.168.0.0/16'; \ + echo 'RemoteIPInternalProxy 169.254.0.0/16'; \ + echo 'RemoteIPInternalProxy 127.0.0.0/8'; \ + } > /etc/apache2/conf-available/remoteip.conf; \ + a2enconf remoteip; \ + find /etc/apache2 -type f -name '*.conf' -exec sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' '{}' + + +# 복사: build stage 에서 설치한 확장 및 설정 +COPY --from=build /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ +COPY --from=build /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/ + +# Install Composer (official image에서 복사) +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer + +# 프로젝트 composer.json 기반으로 설치하는 게 가장 이상적 +# 여기서는 추가 패키지 예시 +WORKDIR /var/www/html +RUN composer require google/cloud \ + && composer require shuchkin/simplexlsx + +# Entrypoint 설정 +COPY entrypoint.sh /usr/local/bin +RUN chmod +x /usr/local/bin/entrypoint.sh + +VOLUME /var/www/html +ENTRYPOINT ["entrypoint.sh"] +CMD ["apache2-foreground"] + diff --git a/8.4/entrypoint.sh b/8.4/entrypoint.sh new file mode 100644 index 0000000..29de1ed --- /dev/null +++ b/8.4/entrypoint.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +if [[ -n "${PUID}" ]] +then + usermod -u ${PUID} www-data +fi +if [[ -n "${PGID}" ]] +then + groupmod -g ${PGID} www-data +fi + +if [[ "$1" == apache2* ]] || [ "$1" = 'php-fpm' ]; then + uid="$(id -u)" + gid="$(id -g)" + if [ "$uid" = '0' ]; then + case "$1" in + apache2*) + user="${APACHE_RUN_USER:-www-data}" + group="${APACHE_RUN_GROUP:-www-data}" + + # strip off any '#' symbol ('#1000' is valid syntax for Apache) + pound='#' + user="${user#$pound}" + group="${group#$pound}" + ;; + *) # php-fpm + user='www-data' + group='www-data' + ;; + esac + else + user="$uid" + group="$gid" + fi + +fi + +exec "$@" + diff --git a/docker-compose.yml b/docker-compose.yml index ddf6cea..b2fb4aa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,3 +6,8 @@ services: php-apache-8.2: build: ./8.2 image: reg.firstgarden.co.kr/php-apache:8.2 + + php-apache-8.4: + build: ./8.4 + image: reg.firstgarden.co.kr/php-apache:8.4 +