no message

This commit is contained in:
2025-12-26 11:40:50 +09:00
parent 60937bee12
commit 53a9c68922
3 changed files with 152 additions and 0 deletions

107
8.4/Dockerfile Normal file
View File

@ -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"]

40
8.4/entrypoint.sh Normal file
View File

@ -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 "$@"

View File

@ -6,3 +6,8 @@ services:
php-apache-8.2: php-apache-8.2:
build: ./8.2 build: ./8.2
image: reg.firstgarden.co.kr/php-apache: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