1+ FROM alpine:3.18
2+ LABEL maintainer="Shion <shion.chow@gmail.com>"
3+
4+ ENV PHP_VERSION 8.3.17
5+
6+ ENV BUILD_TOOLS \
7+ pkgconf \
8+ curl \
9+ autoconf \
10+ make \
11+ gcc \
12+ libc-dev
13+
14+ ENV BUILD_DEPS \
15+ libxml2-dev \
16+ curl-dev \
17+ sqlite-dev \
18+ gd-dev \
19+ gettext-dev \
20+ gmp-dev \
21+ oniguruma-dev \
22+ postgresql-dev \
23+ libedit-dev \
24+ libzip-dev \
25+ libxpm-dev \
26+ libmemcached-dev \
27+ imagemagick-dev
28+
29+ ENV RUNTIME_DEPS \
30+ libpq \
31+ gmp \
32+ libintl \
33+ libxml2 \
34+ sqlite-libs \
35+ libcurl \
36+ libpng \
37+ libwebp \
38+ libjpeg-turbo \
39+ libxpm \
40+ freetype \
41+ oniguruma \
42+ libedit \
43+ libedit \
44+ libzip \
45+ libmemcached \
46+ icu-libs \
47+ imagemagick
48+
49+ ENV PHP_INI_DIR /usr/local/etc/php
50+
51+ # 82 is the standard uid/gid for "www-data" in Alpine
52+ RUN adduser -u 82 -D -H -S -G www-data www-data
53+
54+ # https://github.com/docker-library/php/issues/272
55+ RUN export CFLAGS="-fstack-protector-strong -fpic -fpie -O2" \
56+ && export CPPFLAGS=${CFLAGS} \
57+ && export LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie" \
58+ && export MAKEFLAGS="-j $(getconf _NPROCESSORS_ONLN)"
59+
60+ RUN apk add --no-cache --virtual .build-tools $BUILD_TOOLS \
61+ && apk add --no-cache --virtual .build-deps $BUILD_DEPS \
62+ && apk add --no-cache --virtual .runtime-deps $RUNTIME_DEPS \
63+ && mkdir -p $PHP_INI_DIR/conf.d \
64+ && mkdir -p /usr/src \
65+ && cd /usr/src \
66+ && curl -o php.tar.gz -L https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz \
67+ && tar -zxf php.tar.gz \
68+ && cd php-${PHP_VERSION} \
69+ && ./configure \
70+ --with-config-file-path=$PHP_INI_DIR \
71+ --with-config-file-scan-dir=$PHP_INI_DIR/conf.d \
72+ --enable-fpm \
73+ --with-fpm-user=www-data \
74+ --with-fpm-group=www-data \
75+ --disable-cgi \
76+ --disable-short-tags \
77+ --with-openssl \
78+ --with-pcre-jit \
79+ --with-zlib \
80+ --enable-bcmath \
81+ --with-curl \
82+ --enable-exif \
83+ --enable-gd \
84+ --with-webp \
85+ --with-jpeg \
86+ --with-xpm \
87+ --with-freetype \
88+ --with-gettext \
89+ --with-gmp \
90+ --enable-mbstring \
91+ --with-pdo-mysql \
92+ --with-pdo-pgsql \
93+ --with-libedit \
94+ --with-zip \
95+ --enable-mysqlnd \
96+ && make \
97+ && make install \
98+ # config
99+ && cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf \
100+ && cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf \
101+ && sed -i 's/;error_log = log\/ php-fpm.log/error_log = \/ proc\/ self\/ fd\/ 2/g' /usr/local/etc/php-fpm.conf \
102+ && sed -i 's/;daemonize = yes/daemonize = no/g' /usr/local/etc/php-fpm.conf \
103+ && sed -i 's!=NONE/!=!g' /usr/local/etc/php-fpm.conf \
104+ && sed -i 's/listen = 127.0.0.1:9000/listen = [::]:9000/g' /usr/local/etc/php-fpm.d/www.conf \
105+ && sed -i 's/;access.log = log\/\$ pool.access.log/access.log = \/ proc\/ self\/ fd\/ 2/g' /usr/local/etc/php-fpm.d/www.conf \
106+ && sed -i 's/;catch_workers_output = yes/catch_workers_output = yes/g' /usr/local/etc/php-fpm.d/www.conf \
107+ && sed -i 's/;clear_env = no/clear_env = yes/g' /usr/local/etc/php-fpm.d/www.conf \
108+ && echo "zend_extension=opcache.so" >> $PHP_INI_DIR/conf.d/opcache.ini \
109+ # memcached
110+ && cd /usr/src \
111+ && curl -o memcached.tar.gz -L https://pecl.php.net/get/memcached \
112+ && tar -zxvf memcached.tar.gz \
113+ && cd memcached-* \
114+ && phpize \
115+ && ./configure --enable-memcached-json --disable-memcached-sasl \
116+ && make \
117+ && make install \
118+ && echo "extension=memcached.so" >> $PHP_INI_DIR/conf.d/memcached.ini \
119+ # redis
120+ && cd /usr/src \
121+ && curl -o redis.tar.gz -L https://pecl.php.net/get/redis \
122+ && tar -zxvf redis.tar.gz \
123+ && cd redis-* \
124+ && phpize \
125+ && ./configure \
126+ && make \
127+ && make install \
128+ && echo "extension=redis.so" >> $PHP_INI_DIR/conf.d/redis.ini \
129+ # mongodb
130+ && cd /usr/src \
131+ && curl -o mongodb.tar.gz -L https://pecl.php.net/get/mongodb \
132+ && tar -zxvf mongodb.tar.gz \
133+ && cd mongodb-* \
134+ && phpize \
135+ && ./configure \
136+ && make \
137+ && make install \
138+ && echo "extension=mongodb.so" >> $PHP_INI_DIR/conf.d/mongodb.ini \
139+ # imagick
140+ && cd /usr/src \
141+ && curl -o imagick.tar.gz -L https://pecl.php.net/get/imagick \
142+ && tar -zxvf imagick.tar.gz \
143+ && cd imagick-* \
144+ && phpize \
145+ && ./configure \
146+ && make \
147+ && make install \
148+ && echo "extension=imagick.so" >> $PHP_INI_DIR/conf.d/imagick.ini \
149+ # clear
150+ && cd ~ && rm -rf /usr/src && apk del .build-tools .build-deps
151+
152+ VOLUME ["/app" ]
153+ WORKDIR /app
154+
155+ EXPOSE 9000
156+ CMD ["php-fpm" ]
0 commit comments