mirror of
https://github.com/devilbox/docker-php-fpm.git
synced 2026-01-10 09:54:43 +00:00
247 lines
11 KiB
Django/Jinja
247 lines
11 KiB
Django/Jinja
# Auto-generated via Ansible: edit build/ansible/DOCKERFILES/Dockerfile-mods.j2 instead.
|
|
FROM devilbox/php-fpm:{{ php_version }}-base
|
|
MAINTAINER "cytopia" <cytopia@everythingcli.org>
|
|
|
|
|
|
###
|
|
### Labels
|
|
###
|
|
LABEL \
|
|
name="cytopia's PHP-FPM {{ php_version }} Image" \
|
|
image="devilbox/php-fpm" \
|
|
tag="{{ php_version }}-mods" \
|
|
vendor="devilbox" \
|
|
license="MIT"
|
|
|
|
|
|
###
|
|
### Envs
|
|
###
|
|
ENV BUILD_DEPS \
|
|
{# Loop over enabled build dependencies -#}
|
|
{%- set build_deps = [] -%}
|
|
{%- for ext in extensions_enabled -%}
|
|
{#- Not disabled AND not already available by default -#}
|
|
{%- if (('disabled' not in extensions_available[ext]) or (php_version not in extensions_available[ext]['disabled']))
|
|
and ('already_avail' not in extensions_available[ext] or php_version not in extensions_available[ext]['already_avail']) -%}
|
|
{#- Version specific build dependency available? -#}
|
|
{%- if php_version in extensions_available[ext] and 'build_dep' in extensions_available[ext][php_version] -%}
|
|
{%- for build_dep in extensions_available[ext][php_version]['build_dep'] -%}
|
|
{#- Append build dependencies to our array -#}
|
|
{{- build_deps.append(build_dep) -}}
|
|
{%- endfor -%}
|
|
{#- Generic build dependency available? -#}
|
|
{%- elif 'all' in extensions_available[ext] and 'build_dep' in extensions_available[ext]['all'] -%}
|
|
{%- for build_dep in extensions_available[ext]['all']['build_dep'] -%}
|
|
{#- Append build dependencies to our array -#}
|
|
{{- build_deps.append(build_dep) -}}
|
|
{%- endfor -%}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{% for build_dep in build_deps | unique | sort %}
|
|
{{ build_dep }} \
|
|
{% endfor %}
|
|
ca-certificates \
|
|
git
|
|
|
|
ENV RUN_DEPS \
|
|
{# Loop over enabled run-time dependencies -#}
|
|
{%- set run_deps = [] -%}
|
|
{%- for ext in extensions_enabled -%}
|
|
{#- Not disabled -#}
|
|
{%- if ('disabled' not in extensions_available[ext]) or (php_version not in extensions_available[ext]['disabled']) -%}
|
|
{#- Version specific run-time dependency available? -#}
|
|
{%- if php_version in extensions_available[ext] and 'run_dep' in extensions_available[ext][php_version] -%}
|
|
{%- for run_dep in extensions_available[ext][php_version]['run_dep'] -%}
|
|
{#- Append run dependencies to our array -#}
|
|
{{- run_deps.append(run_dep) -}}
|
|
{%- endfor -%}
|
|
{#- Generic run-time dependency available? -#}
|
|
{%- elif 'all' in extensions_available[ext] and 'run_dep' in extensions_available[ext]['all'] -%}
|
|
{%- for run_dep in extensions_available[ext]['all']['run_dep'] -%}
|
|
{#- Append run dependencies to our array -#}
|
|
{{- run_deps.append(run_dep) -}}
|
|
{%- endfor -%}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{% for run_dep in run_deps | unique | sort %}
|
|
{{ run_dep }} \
|
|
{% endfor %}
|
|
ca-certificates
|
|
|
|
|
|
###
|
|
### Install
|
|
###
|
|
RUN set -x \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get update -qq \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests apt-utils \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \
|
|
${BUILD_DEPS} \
|
|
\
|
|
\
|
|
{# Loop over enabled extensions #}
|
|
{% for ext in extensions_enabled %}
|
|
{# Not disabled AND not already enabled #}
|
|
{% if (('disabled' not in extensions_available[ext]) or (php_version not in extensions_available[ext]['disabled'])) and ('already_avail' not in extensions_available[ext] or php_version not in extensions_available[ext]['already_avail']) %}
|
|
{# ---------- Pre Command ---------- #}
|
|
{# Version specific pre-command available? #}
|
|
{% if php_version in extensions_available[ext] and 'pre' in extensions_available[ext][php_version] %}
|
|
&& {{ extensions_available[ext][php_version]['pre'] }} \
|
|
{# Generic pre-command available? #}
|
|
{% elif 'all' in extensions_available[ext] and 'pre' in extensions_available[ext]['all'] %}
|
|
&& {{ extensions_available[ext]['all']['pre'] }} \
|
|
{% endif %}
|
|
{# ---------- Installation (specific) ---------- #}
|
|
{% if php_version in extensions_available[ext] and 'type' in extensions_available[ext][php_version] %}
|
|
{# ---- 1.) Builtin ---- #}
|
|
{% if extensions_available[ext][php_version]['type'] == 'builtin' %}
|
|
{% if 'configure' in extensions_available[ext][php_version] %}
|
|
&& /usr/local/bin/docker-php-ext-configure {{ ext }} {{ extensions_available[ext][php_version]['configure'] }} \
|
|
{% endif %}
|
|
&& /usr/local/bin/docker-php-ext-install{% if php_version != 5.4 %} -j$(getconf _NPROCESSORS_ONLN){% endif %} {{ ext }} \
|
|
{# ---- 2.) PECL ---- #}
|
|
{% elif extensions_available[ext][php_version]['type'] == 'pecl' %}
|
|
{% if 'command' in extensions_available[ext][php_version] %}
|
|
&& {{ extensions_available[ext][php_version]['command'] }} \
|
|
{% else %}
|
|
&& pecl install {{ ext }}{% if 'version' in extensions_available[ext][php_version] %}-{{ extensions_available[ext][php_version]['version'] }}{% endif %} \
|
|
{% endif %}
|
|
&& docker-php-ext-enable {{ ext }} \
|
|
{# ---- 3.) GIT ---- #}
|
|
{% elif extensions_available[ext][php_version]['type'] == 'git' %}
|
|
&& git clone -v {{ extensions_available[ext][php_version]['git_url'] }} /tmp/{{ ext }} \
|
|
&& cd /tmp/{{ ext }} \
|
|
{% if 'git_ref' in extensions_available[ext][php_version] %}
|
|
&& git checkout {{ extensions_available[ext][php_version]['git_ref'] }} \
|
|
{% endif %}
|
|
{% if 'command' in extensions_available[ext][php_version] %}
|
|
&& {{ extensions_available[ext][php_version]['command'] }} \
|
|
{% else %}
|
|
&& phpize \
|
|
&& ./configure {% if 'configure' in extensions_available[ext][php_version] %} {{ extensions_available[ext][php_version]['configure'] }}{% endif %} \
|
|
&& make -j$(getconf _NPROCESSORS_ONLN) \
|
|
&& make install \
|
|
{% endif %}
|
|
&& docker-php-ext-enable {{ ext }} \
|
|
{# ---- 4.) CUSTOM ---- #}
|
|
{% elif extensions_available[ext][php_version]['type'] == 'custom' %}
|
|
&& {{ extensions_available[ext][php_version]['command'] }} \
|
|
{% endif %}
|
|
{# ---------- Installation (generic) ---------- #}
|
|
{% elif 'all' in extensions_available[ext] and 'type' in extensions_available[ext]['all'] %}
|
|
{# ---- 1.) Builtin ---- #}
|
|
{% if extensions_available[ext]['all']['type'] == 'builtin' %}
|
|
{% if 'configure' in extensions_available[ext]['all'] %}
|
|
&& /usr/local/bin/docker-php-ext-configure {{ ext }} {{ extensions_available[ext]['all']['configure'] }} \
|
|
{% endif %}
|
|
&& /usr/local/bin/docker-php-ext-install{% if php_version != 5.4 %} -j$(getconf _NPROCESSORS_ONLN){% endif %} {{ ext }} \
|
|
{# ---- 2.) PECL ---- #}
|
|
{% elif extensions_available[ext]['all']['type'] == 'pecl' %}
|
|
{% if 'command' in extensions_available[ext]['all'] %}
|
|
&& {{ extensions_available[ext]['all']['command'] }} \
|
|
{% else %}
|
|
&& pecl install {{ ext }}{% if 'version' in extensions_available[ext]['all'] %}-{{ extensions_available[ext]['all']['version'] }}{% endif %} \
|
|
{% endif %}
|
|
&& docker-php-ext-enable {{ ext }} \
|
|
{# ---- 3.) GIT ---- #}
|
|
{% elif extensions_available[ext]['all']['type'] == 'git' %}
|
|
&& git clone -v {{ extensions_available[ext]['all']['git_url'] }} /tmp/{{ ext }} \
|
|
&& cd /tmp/{{ ext }} \
|
|
{% if 'git_ref' in extensions_available[ext]['all'] %}
|
|
&& git checkout {{ extensions_available[ext]['all']['git_ref'] }} \
|
|
{% endif %}
|
|
{% if 'command' in extensions_available[ext]['all'] %}
|
|
&& {{ extensions_available[ext]['all']['command'] }} \
|
|
{% else %}
|
|
&& phpize \
|
|
&& ./configure {% if 'configure' in extensions_available[ext]['all'] %} {{ extensions_available[ext]['all']['configure'] }}{% endif %} \
|
|
&& make -j$(getconf _NPROCESSORS_ONLN) \
|
|
&& make install \
|
|
{% endif %}
|
|
&& docker-php-ext-enable {{ ext }} \
|
|
{# ---- 4.) CUSTOM ---- #}
|
|
{% elif extensions_available[ext]['all']['type'] == 'custom' %}
|
|
&& {{ extensions_available[ext]['all']['command'] }} \
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{# Ensure modules that are not disabled have an appropriate ini directive and are loaded #}
|
|
{% if ('disabled' not in extensions_available[ext]) or (php_version not in extensions_available[ext]['disabled']) %}
|
|
{% if php_version in extensions_available[ext] and 'load_ext' in extensions_available[ext][php_version] %}
|
|
&& if [ ! -f "/usr/local/etc/php/conf.d/docker-php-ext-{{ ext }}.ini" ]; then echo "extension={{ extensions_available[ext][php_version]['load_ext'] }}" > "/usr/local/etc/php/conf.d/docker-php-ext-{{ ext }}.ini"; fi \
|
|
{% elif 'all' in extensions_available[ext] and 'load_ext' in extensions_available[ext]['all'] %}
|
|
&& if [ ! -f "/usr/local/etc/php/conf.d/docker-php-ext-{{ ext }}.ini" ]; then echo "extenstion={{ extensions_available[ext]['all']['load_ext'] }}" > "/usr/local/etc/php/conf.d/docker-php-ext-{{ ext }}.ini"; fi \
|
|
{% endif %}
|
|
\
|
|
&& (rm -rf /usr/local/lib/php/test/{{ ext }} || true) \
|
|
&& (rm -rf /usr/local/lib/php/doc/{{ ext }} || true) \
|
|
&& chmod +x "$(php -r 'echo ini_get("extension_dir");')"/* \
|
|
{% endif %}
|
|
{% endfor %}
|
|
&& rm -rf /tmp/* \
|
|
\
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ${BUILD_DEPS} \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests ${RUN_DEPS} \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false apt-utils \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
\
|
|
&& update-ca-certificates \
|
|
\
|
|
&& (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
|
|
&& (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
|
|
&& (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
|
|
&& (find "$(php -r 'echo ini_get("extension_dir");')" -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true)
|
|
|
|
|
|
{% if debug %}
|
|
###
|
|
### Verify
|
|
###
|
|
RUN set -x \
|
|
&& echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \
|
|
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^{{ php_version }}' \
|
|
&& /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 \
|
|
&& PHP_ERROR="$( php -i 2>&1 1>/dev/null )" \
|
|
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \
|
|
\
|
|
&& PHP_FPM_ERROR="$( php-fpm -v 2>&1 1>/dev/null )" \
|
|
&& if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \
|
|
&& PHP_FPM_ERROR="$( php-fpm -i 2>&1 1>/dev/null )" \
|
|
&& if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \
|
|
&& rm -f /usr/local/etc/php/php.ini \
|
|
\
|
|
{% for ext in extensions_enabled %}
|
|
{#- Not disabled #}
|
|
{%- if ('disabled' not in extensions_available[ext]) or (php_version not in extensions_available[ext]['disabled']) %}
|
|
{%- if ext == 'opcache' %}
|
|
&& php -m | grep -oiE '^Zend Opcache$' \
|
|
&& php-fpm -m | grep -oiE '^Zend Opcache$' \
|
|
{# #}
|
|
{%- elif ext not in ['ioncube'] %}
|
|
&& php -m | grep -oiE '^{{ ext }}$' \
|
|
&& php-fpm -m | grep -oiE '^{{ ext }}$' \
|
|
{# #}
|
|
{%- endif %}
|
|
{%- endif %}
|
|
{% endfor %}
|
|
&& true
|
|
|
|
|
|
{% endif %}
|
|
###
|
|
### Ports
|
|
###
|
|
EXPOSE 9000
|
|
|
|
|
|
###
|
|
### Entrypoint
|
|
###
|
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|