Created
December 26, 2019 07:44
-
-
Save anhdiepmmk/1f29b77261017c01823e6cf318cb52a4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" | |
# | |
# PLEASE DO NOT EDIT IT DIRECTLY. | |
# | |
FROM debian:buster-slim | |
# prevent Debian's PHP packages from being installed | |
# https://github.com/docker-library/php/pull/542 | |
RUN set -eux; \ | |
{ \ | |
echo 'Package: php*'; \ | |
echo 'Pin: release *'; \ | |
echo 'Pin-Priority: -1'; \ | |
} > /etc/apt/preferences.d/no-debian-php | |
# dependencies required for running "phpize" | |
# (see persistent deps below) | |
ENV PHPIZE_DEPS \ | |
autoconf \ | |
dpkg-dev \ | |
file \ | |
g++ \ | |
gcc \ | |
libc-dev \ | |
make \ | |
pkg-config \ | |
re2c | |
# persistent / runtime deps | |
RUN apt-get update && apt-get install -y \ | |
$PHPIZE_DEPS \ | |
ca-certificates \ | |
curl \ | |
xz-utils \ | |
--no-install-recommends && rm -r /var/lib/apt/lists/* | |
ENV PHP_INI_DIR /usr/local/etc/php | |
RUN mkdir -p $PHP_INI_DIR/conf.d | |
##<autogenerated>## | |
ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data | |
##</autogenerated>## | |
# Apply stack smash protection to functions using local buffers and alloca() | |
# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) | |
# Enable optimization (-O2) | |
# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) | |
# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated) | |
# https://github.com/docker-library/php/issues/272 | |
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2" | |
ENV PHP_CPPFLAGS="$PHP_CFLAGS" | |
ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie" | |
#ENV GPG_KEYS 1729F83938DA44E27BA0F4D3DBDB397470D12172 B1B44D8F021E4E2D6021E995DC9FF8D3EE5AF27F | |
#ENV PHP_VERSION 7.2.5 | |
#ENV PHP_URL="https://secure.php.net/get/php-7.2.5.tar.xz/from/this/mirror" PHP_ASC_URL="https://secure.php.net/get/php-7.2.5.tar.xz.asc/from/this/mirror" | |
#ENV PHP_SHA256="af70a33b3f7a51510467199b39af151333fbbe4cc21923bad9c7cf64268cddb2" PHP_MD5="" | |
RUN set -xe; \ | |
\ | |
fetchDeps=' \ | |
# wget \ | |
git \ | |
'; \ | |
if ! command -v gpg > /dev/null; then \ | |
fetchDeps="$fetchDeps \ | |
dirmngr \ | |
gnupg \ | |
"; \ | |
fi; \ | |
apt-get update; \ | |
apt-get install -y --no-install-recommends $fetchDeps; \ | |
rm -rf /var/lib/apt/lists/*; \ | |
\ | |
mkdir -p /usr/src; \ | |
cd /usr/src; \ | |
\ | |
# wget -O php.tar.xz "$PHP_URL"; \ | |
git clone http://git.php.net/repository/php-src.git php; \ | |
cd php; \ | |
git checkout PHP-7.4; \ | |
./buildconf --force; \ | |
rm -rf .git; \ | |
cd /usr/src; \ | |
tar -cJf php.tar.xz php; \ | |
rm -rf php; \ | |
\ | |
# if [ -n "$PHP_SHA256" ]; then \ | |
# echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ | |
# fi; \ | |
# if [ -n "$PHP_MD5" ]; then \ | |
# echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \ | |
# fi; \ | |
# \ | |
# if [ -n "$PHP_ASC_URL" ]; then \ | |
# wget -O php.tar.xz.asc "$PHP_ASC_URL"; \ | |
# export GNUPGHOME="$(mktemp -d)"; \ | |
# for key in $GPG_KEYS; do \ | |
# gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ | |
# done; \ | |
# gpg --batch --verify php.tar.xz.asc php.tar.xz; \ | |
# command -v gpgconf > /dev/null && gpgconf --kill all; \ | |
# rm -rf "$GNUPGHOME"; \ | |
# fi; \ | |
\ | |
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps | |
COPY data/docker-php-source /usr/local/bin/ | |
RUN set -eux; \ | |
\ | |
savedAptMark="$(apt-mark showmanual)"; \ | |
apt-get update; \ | |
apt-get install -y --no-install-recommends \ | |
bison \ | |
libcurl4-openssl-dev \ | |
libedit-dev \ | |
libonig-dev \ | |
libsodium-dev \ | |
libsqlite3-dev \ | |
libssl-dev \ | |
libxml2-dev \ | |
zlib1g-dev \ | |
${PHP_EXTRA_BUILD_DEPS:-} \ | |
; \ | |
rm -rf /var/lib/apt/lists/*; \ | |
# Install latest Argon version from Debian Buser | |
echo "deb http://deb.debian.org/debian buster main" > /etc/apt/sources.list.d/debian-buster.list; \ | |
apt-get update; \ | |
apt-get install -y --no-install-recommends \ | |
libargon2-dev \ | |
; \ | |
rm -rf /var/lib/apt/lists/*; \ | |
rm /etc/apt/sources.list.d/debian-buster.list; \ | |
apt-get update; \ | |
rm -rf /var/lib/apt/lists/*; \ | |
# End of: Install latest Argon version from Debian Buser | |
\ | |
export \ | |
CFLAGS="$PHP_CFLAGS" \ | |
CPPFLAGS="$PHP_CPPFLAGS" \ | |
LDFLAGS="$PHP_LDFLAGS" \ | |
; \ | |
docker-php-source extract; \ | |
cd /usr/src/php; \ | |
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ | |
debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ | |
# https://bugs.php.net/bug.php?id=74125 | |
if [ ! -d /usr/include/curl ]; then \ | |
ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; \ | |
fi; \ | |
./configure \ | |
--build="$gnuArch" \ | |
--with-config-file-path="$PHP_INI_DIR" \ | |
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ | |
\ | |
# make sure invalid --configure-flags are fatal errors intead of just warnings | |
--enable-option-checking=fatal \ | |
\ | |
--disable-cgi \ | |
\ | |
# https://github.com/docker-library/php/issues/439 | |
--with-mhash \ | |
\ | |
# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236) | |
--enable-ftp \ | |
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) | |
--enable-mbstring \ | |
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) | |
--enable-mysqlnd \ | |
# https://wiki.php.net/rfc/argon2_password_hash (7.2+) | |
--with-password-argon2 \ | |
# https://wiki.php.net/rfc/libsodium | |
#--with-sodium=shared \ | |
# TODO: The above resulted in: undefined symbol: sodium_init | |
# https://github.com/docker-library/php/blob/master/7.3/stretch/fpm/Dockerfile#L173 | |
--with-sodium \ | |
\ | |
--with-curl \ | |
--with-libedit \ | |
--with-openssl \ | |
--with-zlib \ | |
\ | |
# Pear has been disabled by default and therefore pecl won't be available: | |
# Branch: PHP-7.4 | |
# Commit: e93d6d97aab7a5de1f7b8dc750ca9d08214de8c4 | |
--with-pear \ | |
\ | |
# bundled pcre does not support JIT on s390x | |
# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT | |
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \ | |
--with-libdir="lib/$debMultiarch" \ | |
\ | |
${PHP_EXTRA_CONFIGURE_ARGS:-} \ | |
; \ | |
make -j "$(nproc)"; \ | |
# Download PEAR from GitHub to mitigate current hack of pear.php.net | |
curl https://raw.githubusercontent.com/pear/pearweb_phars/master/install-pear-nozlib.phar > pear/install-pear-nozlib.phar; \ | |
make install; \ | |
find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; \ | |
make clean; \ | |
cd /; \ | |
docker-php-source delete; \ | |
\ | |
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies | |
apt-mark auto '.*' > /dev/null; \ | |
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ | |
find /usr/local -type f -executable -exec ldd '{}' ';' \ | |
| awk '/=>/ { print $(NF-1) }' \ | |
| sort -u \ | |
| xargs -r dpkg-query --search \ | |
| cut -d: -f1 \ | |
| sort -u \ | |
| xargs -r apt-mark manual \ | |
; \ | |
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false bison; \ | |
\ | |
php --version; \ | |
\ | |
# https://github.com/docker-library/php/issues/443 | |
pecl update-channels; \ | |
rm -rf /tmp/pear ~/.pearrc | |
COPY data/docker-php-ext-* data/docker-php-entrypoint /usr/local/bin/ | |
# https://github.com/docker-library/php/blob/master/7.3/stretch/fpm/Dockerfile#L221 | |
# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598) | |
# TODO: --with-sodium=shared it results in: undefined symbol: sodium_init | |
#RUN docker-php-ext-enable sodium | |
ENTRYPOINT ["docker-php-entrypoint"] | |
##<autogenerated>## | |
WORKDIR /var/www/html | |
RUN set -ex \ | |
&& cd /usr/local/etc \ | |
&& if [ -d php-fpm.d ]; then \ | |
# for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf" | |
sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \ | |
cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \ | |
else \ | |
# PHP 5.x doesn't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency | |
mkdir php-fpm.d; \ | |
cp php-fpm.conf.default php-fpm.d/www.conf; \ | |
{ \ | |
echo '[global]'; \ | |
echo 'include=etc/php-fpm.d/*.conf'; \ | |
} | tee php-fpm.conf; \ | |
fi \ | |
&& { \ | |
echo '[global]'; \ | |
echo 'error_log = /proc/self/fd/2'; \ | |
echo; \ | |
echo '[www]'; \ | |
echo '; if we send this to /proc/self/fd/1, it never appears'; \ | |
echo 'access.log = /proc/self/fd/2'; \ | |
echo; \ | |
echo 'clear_env = no'; \ | |
echo; \ | |
echo '; Ensure worker stdout and stderr are sent to the main error log.'; \ | |
echo 'catch_workers_output = yes'; \ | |
} | tee php-fpm.d/docker.conf \ | |
&& { \ | |
echo '[global]'; \ | |
echo 'daemonize = no'; \ | |
echo; \ | |
echo '[www]'; \ | |
echo 'listen = 9000'; \ | |
} | tee php-fpm.d/zz-docker.conf | |
### | |
### Verify | |
### | |
RUN set -x \ | |
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.4' \ | |
&& /usr/local/sbin/php-fpm --test \ | |
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \ | |
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi | |
EXPOSE 9000 | |
CMD ["php-fpm"] | |
##</autogenerated>## | |
RUN apt-get update && apt-get install supervisor -y | |
COPY supervisord.conf /etc/supervisor/supervisord.conf | |
RUN apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev | |
RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer | |
RUN pecl install redis && docker-php-ext-enable redis | |
RUN pecl install mongodb \ | |
&& docker-php-ext-enable mongodb | |
RUN docker-php-ext-install bcmath | |
RUN useradd -ms /bin/bash diep | |
RUN mkdir -p /var/supervisor/ \ | |
&& mkdir -p /var/supervisor/logs \ | |
&& mkdir -p /var/supervisor/run/ \ | |
&& chmod -R 777 /var/supervisor/ && chown -R diep:diep /var/supervisor/ \ | |
&& touch /var/supervisor/run/supervisord.pid && touch /var/supervisor/supervisord.log && chmod 777 /var/supervisor/supervisord.log | |
USER diep |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[supervisord] | |
nodaemon=true | |
logfile=/var/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) | |
pidfile=/var/supervisor/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) | |
childlogdir=/var/supervisor/logs ; ('AUTO' child log dir, default $TEMP) | |
[supervisorctl] | |
[inet_http_server] | |
port = 127.0.0.1:9001 | |
[rpcinterface:supervisor] | |
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface | |
[include] | |
files = /etc/supervisor/conf.d/*.conf |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment