diff --git a/.ansible/DOCKERFILES/Dockerfile-slim.j2 b/.ansible/DOCKERFILES/Dockerfile-slim.j2 new file mode 100644 index 0000000..45f20db --- /dev/null +++ b/.ansible/DOCKERFILES/Dockerfile-slim.j2 @@ -0,0 +1,402 @@ +# vi: ft=dockerfile +{{ edit_comment_slim }} +{% import './jinja2/macros-work.j2' as fn %} + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:{{ php_version }}-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ +{%- for repo in base_apt_repositories_enabled -%} + {#- Not disabled -#} + {%- if ('disabled' not in base_apt_repositories_available[repo]) or (php_version not in base_apt_repositories_available[repo]['disabled']) -%} + {#- -#} + {#- [PRE] -#} + {%- if fn.get_pre(php_version, repo, base_apt_repositories_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_pre(php_version, repo, base_apt_repositories_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [KEY] -#} + {%- if fn.tool_repo_get_key(php_version, repo, base_apt_repositories_available) | length -%} + {{ "\n\t" }}&& APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv {{ fn.tool_repo_get_key(php_version, repo, base_apt_repositories_available) }} \ + {%- endif -%} + {#- -#} + {#- [DEB] -#} + {%- if fn.tool_repo_get_deb(php_version, repo, base_apt_repositories_available) | length -%} + {{ "\n\t" }}&& echo "{{ fn.tool_repo_get_deb(php_version, repo, base_apt_repositories_available) }}" > /etc/apt/sources.list.d/{{ repo }}.list \ + {%- endif -%} + {%- endif -%} +{%- endfor -%} + {{ "\n\t" }}&& true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ +{% if php_version in [7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] %} + mariadb-client \ +{% else %} + mysql-client \ +{% endif %} + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### +{% for tool in base_software_enabled -%} + {# Not disabled #} + {%- if ('disabled' not in base_software_available[tool]) or (php_version not in base_software_available[tool]['disabled']) -%} + {{- "\n" }}# -------------------- {{ tool }} -------------------- + {{- "\n" }}RUN set -eux \ + {#- -#} + {#- [PRE] -#} + {%- if fn.get_pre(php_version, tool, base_software_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_pre(php_version, tool, base_software_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [COMMAND] -#} + {%- if fn.get_type(php_version, tool, base_software_available) == 'custom' -%} + {{ "\n\t" }}&& {{ fn.tool_custom_get_command(php_version, tool, base_software_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [POST] -#} + {%- if fn.get_post(php_version, tool, base_software_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_post(php_version, tool, base_software_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [CHECK] -#} + {%- if 'check' in base_software_available[tool] -%} + {{ "\n\t" }}&& {{ base_software_available[tool]['check'] | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- Finalize -#} + {{ "\n\t" }}&& true{{ "\n" }} + {%- endif -%} +{%- endfor %} + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:{{ php_version }}-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-{{ php_version }}.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-{{ php_version }}.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### +{% for tool in base_software_enabled -%} + {# Not disabled #} + {%- if ('disabled' not in base_software_available[tool]) or (php_version not in base_software_available[tool]['disabled']) -%} + {{- "\n" }}# -------------------- {{ tool }} -------------------- + {{- "\n" }}RUN set -eux \ + {#- -#} + {#- [CHECK] -#} + {%- if 'check' in base_software_available[tool] -%} + {{ "\n\t" }}&& {{ base_software_available[tool]['check'] | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- Finalize -#} + {{ "\n\t" }}&& true{{ "\n" }} + {%- endif -%} +{%- endfor %} + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="{{ php_version }}-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM {{ php_version }}-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM {{ php_version }}-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/.ansible/DOCKERFILES/Dockerfile-work.j2 b/.ansible/DOCKERFILES/Dockerfile-work.j2 index c73eaf6..2915e4b 100644 --- a/.ansible/DOCKERFILES/Dockerfile-work.j2 +++ b/.ansible/DOCKERFILES/Dockerfile-work.j2 @@ -1,9 +1,526 @@ # vi: ft=dockerfile {{ edit_comment_work }} -FROM devilbox/php-fpm:{{ php_version }}-prod -MAINTAINER "cytopia" +{% import './jinja2/macros-work.j2' as fn %} -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:{{ php_version }}-slim as devilbox-work-help-builder + +{% set build_deps = [] -%} +{%- for ext in help_software_enabled -%} + {%- for dep in fn.get_build_dep(php_version, ext, help_software_available) | from_json -%} + {%- if dep -%} + {{- build_deps.append(dep) -}} + {%- endif -%} + {%- endfor -%} +{%- endfor -%} +{%- if build_deps -%} +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ +{% for build_dep in build_deps | unique | sort %} + {{ build_dep }} \ +{% endfor %} + && rm -rf /var/lib/apt/lists/* +{%- endif %} + +{% set run_deps = [] -%} +{%- for ext in help_software_enabled -%} + {%- for dep in fn.get_run_dep(php_version, ext, help_software_available) | from_json -%} + {%- if dep -%} + {{- run_deps.append(dep) -}} + {%- endif -%} + {%- endfor -%} +{%- endfor -%} +{%- if run_deps -%} + +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ +{% for run_dep in run_deps | unique | sort %} + {{ run_dep }} \ +{% endfor %} + && rm -rf /var/lib/apt/lists/* +{%- endif %} + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### +{% for tool in help_software_enabled -%} + {# Not disabled #} + {%- if ('disabled' not in help_software_available[tool]) or (php_version not in help_software_available[tool]['disabled']) -%} + {{- "\n" }}# -------------------- {{ tool }} -------------------- + {{- "\n" }}RUN set -eux \ + {#- -#} + {#- [PRE] -#} + {%- if fn.get_pre(php_version, tool, help_software_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_pre(php_version, tool, help_software_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [COMMAND] -#} + {%- if fn.get_type(php_version, tool, help_software_available) == 'custom' -%} + {{ "\n\t" }}&& {{ fn.tool_custom_get_command(php_version, tool, help_software_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [POST] -#} + {%- if fn.get_post(php_version, tool, help_software_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_post(php_version, tool, help_software_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- Finalize -#} + {{ "\n\t" }}&& true{{ "\n" }} + {%- endif -%} +{%- endfor %} + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="{{ nvm_home }}/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:{{ php_version }}-slim as devilbox-work-help + +{% set run_deps = [] -%} +{%- for ext in help_software_enabled -%} + {%- for dep in fn.get_run_dep(php_version, ext, help_software_available) | from_json -%} + {%- if dep -%} + {{- run_deps.append(dep) -}} + {%- endif -%} + {%- endfor -%} +{%- endfor -%} +{%- if run_deps -%} +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ +{% for run_dep in run_deps | unique | sort %} + {{ run_dep }} \ +{% endfor %} + && rm -rf /var/lib/apt/lists/* +{%- endif %} + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### +{% for tool in help_software_enabled -%} + {# Not disabled #} + {%- if ('disabled' not in help_software_available[tool]) or (php_version not in help_software_available[tool]['disabled']) -%} + {{- "\n" }}# -------------------- {{ tool }} -------------------- + {{- "\n" }}RUN set -eux \ + {#- -#} + {#- [CHECK] -#} + {%- if 'check' in help_software_available[tool] -%} + {{ "\n\t" }}&& {{ help_software_available[tool]['check'] | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- Finalize -#} + {{ "\n\t" }}&& true{{ "\n" }} + {%- endif -%} +{%- endfor %} + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +{% set build_deps = [] -%} +{%- set run_deps = [] -%} +{%- set tools_apt = [] -%} +{%- for tool in tools_enabled -%} + {%- for dep in fn.get_build_dep(php_version, tool, tools_available) | from_json -%} + {%- if dep -%} + {{- build_deps.append(dep) -}} + {%- endif -%} + {%- endfor -%} + {%- for dep in fn.get_run_dep(php_version, tool, tools_available) | from_json -%} + {%- if dep -%} + {{- run_deps.append(dep) -}} + {%- endif -%} + {%- endfor -%} + {%- if ('disabled' not in tools_available[tool]) or (php_version not in tools_available[tool]['disabled']) -%} + {%- if fn.tool_apt_get_package(php_version, tool, tools_available) -%} + {{- tools_apt.append(fn.tool_apt_get_package(php_version, tool, tools_available)) -}} + {%- endif -%} + {%- endif -%} +{%- endfor %} + +{%- if build_deps or run_deps or tools_apt -%} +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + {{- "\n" -}} + {%- if build_deps -%} + {{- "\t\t# ---------- build_deps ----------\n" -}} + {%- for apt in build_deps | unique | sort -%} + {{- "\t\t" + apt + " \\" + "\n" -}} + {%- endfor -%} + {%- endif -%} + {%- if run_deps -%} + {{- "\t\t# ---------- run_deps ----------\n" -}} + {%- for apt in run_deps | unique | sort -%} + {{- "\t\t" + apt + " \\" + "\n" -}} + {%- endfor -%} + {%- endif -%} + {%- if tools_apt -%} + {{- "\t\t# ---------- type: apt ----------\n" -}} + {%- for apt in tools_apt | unique | sort -%} + {{- "\t\t" + apt + " \\" + "\n" -}} + {%- endfor -%} + {%- endif -%} + {{- "\t" -}}&& rm -rf /var/lib/apt/lists/*{{- "\n" -}} +{% endif %} + +### +### Install defined php_tools +### +{% for tool in tools_enabled -%} + {# Not disabled #} + {%- if ('disabled' not in tools_available[tool]) or (php_version not in tools_available[tool]['disabled']) -%} + {{- "\n" }}# -------------------- ({{ fn.get_type(php_version, tool, tools_available) }}) {{ tool }} -------------------- + {{- "\n" }}RUN set -eux \ + {#- -#} + {#- [PRE] -#} + {%- if fn.get_pre(php_version, tool, tools_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_pre(php_version, tool, tools_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [CUSTOM] -#} + {%- if fn.get_type(php_version, tool, tools_available) == 'custom' -%} + {{ "\n\t" }}&& {{ fn.tool_custom_get_command(php_version, tool, tools_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [NPM] -#} + {%- if fn.get_type(php_version, tool, tools_available) == 'npm' -%} + {%- set npm_package = fn.tool_npm_get_package(php_version, tool, tools_available) -%} + {%- set npm_version = fn.tool_npm_get_version(php_version, tool, tools_available) -%} + {%- set npm_binary = fn.tool_npm_get_binary(php_version, tool, tools_available) -%} + {{ "\n\t" }}&& su -c '. {{ nvm_home }}/nvm.sh; npm install -g --force {{ npm_package }}{{ npm_version }}' devilbox \ + {%- if npm_binary | length -%} + {{ "\n\t" }}&& ln -s {{ nvm_home }}/versions/node/$(su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox)/bin/{{ npm_binary }} /usr/local/bin/ \ + {%- endif -%} + {%- endif -%} + {#- -#} + {#- [COMPOSER] -#} + {%- if fn.get_type(php_version, tool, tools_available) == 'composer' -%} + {%- set comp_composer = fn.tool_composer_get_composer(php_version, tool, tools_available) -%} + {%- set comp_package = fn.tool_composer_get_package(php_version, tool, tools_available) -%} + {%- set comp_version = fn.tool_composer_get_version(php_version, tool, tools_available) -%} + {%- set comp_binary = fn.tool_composer_get_binary(php_version, tool, tools_available) -%} + {#- FIXME: use su -c ' devilbox -#} + {{ "\n\t" }}&& COMPOSER_HOME="{{ composer_home }}" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-{{ comp_composer }} global require {{ comp_package }}{{ comp_version }} \ + {%- if comp_binary | length -%} + {{ "\n\t" }}&& ln -s {{ composer_home }}/vendor/{{ comp_package }}/{{ comp_binary }} /usr/local/bin/ \ + {%- endif -%} + {%- endif -%} + {#- -#} + {#- [RUBYGEM] -#} + {%- if fn.get_type(php_version, tool, tools_available) == 'rubygem' -%} + {%- set rubygem_package = fn.tool_rubygem_get_package(php_version, tool, tools_available) -%} + {%- set rubygem_version = fn.tool_rubygem_get_version(php_version, tool, tools_available) -%} + {{ "\n\t" }}&& gem install {{ rubygem_package }}{{ rubygem_version }} \ + {%- endif -%} + {#- -#} + {#- [PIP] -#} + {%- if fn.get_type(php_version, tool, tools_available) == 'pip' -%} + {%- set pip_package = fn.tool_pip_get_package(php_version, tool, tools_available) -%} + {%- set pip_version = fn.tool_pip_get_version(php_version, tool, tools_available) -%} + {{ "\n\t" }}&& pip install --no-cache-dir --no-compile --force-reinstall {{ pip_package }}{{ pip_version }} \ + {%- endif -%} + {#- -#} + {#- [POST] -#} + {%- if fn.get_post(php_version, tool, tools_available) | length -%} + {{ "\n\t" }}&& {{ fn.get_post(php_version, tool, tools_available) | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- [CHECK] -#} + {%- if 'check' in tools_available[tool] -%} + {{ "\n\t" }}&& {{ tools_available[tool]['check'] | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {#- -#} + {#- Finalize -#} + {{ "\n\t" }}&& true{{ "\n" }} + {%- endif -%} +{%- endfor %} + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +{% set run_deps = [] -%} +{%- set tools_apt = [] -%} +{%- for tool in tools_enabled -%} + {%- for dep in fn.get_run_dep(php_version, tool, tools_available) | from_json -%} + {%- if dep -%} + {{- run_deps.append(dep) -}} + {%- endif -%} + {%- endfor -%} + {%- if ('disabled' not in tools_available[tool]) or (php_version not in tools_available[tool]['disabled']) -%} + {%- if fn.tool_apt_get_package(php_version, tool, tools_available) -%} + {{- tools_apt.append(fn.tool_apt_get_package(php_version, tool, tools_available)) -}} + {%- endif -%} + {%- endif -%} +{%- endfor %} + +{%- if build_deps or run_deps or tools_apt -%} +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + {{- "\n" -}} + {%- if run_deps -%} + {{- "\t\t# ---------- run_deps ----------\n" -}} + {%- for apt in run_deps | unique | sort -%} + {{- "\t\t" + apt + " \\" + "\n" -}} + {%- endfor -%} + {%- endif -%} + {%- if tools_apt -%} + {{- "\t\t# ---------- type: apt ----------\n" -}} + {%- for apt in tools_apt | unique | sort -%} + {{- "\t\t" + apt + " \\" + "\n" -}} + {%- endfor -%} + {%- endif -%} + {{- "\t" -}}&& rm -rf /var/lib/apt/lists/*{{- "\n" -}} +{% endif %} + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + +{% for tool in tools_enabled -%} + {%- if fn.is_not_disabled(php_version, tool, tools_available) -%} + {{- "\n" }}# -------------------- ({{ fn.get_type(php_version, tool, tools_available) }}) {{ tool }} -------------------- + {{- "\n" }}RUN set -eux \ + {%- if 'check' in tools_available[tool] -%} + {{ "\n\t" }}&& {{ tools_available[tool]['check'] | indent( "\t" ) }}{{ "\t\\" }} + {%- endif -%} + {{ "\n\t" }}&& true{{ "\n" }} + {%- endif -%} +{%- endfor %} + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,578 +540,6 @@ LABEL "org.opencontainers.image.ref.name"="{{ php_version }}-work" LABEL "org.opencontainers.image.title"="PHP-FPM {{ php_version }}-work" LABEL "org.opencontainers.image.description"="PHP-FPM {{ php_version }}-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ -{%- for repo in apt_repositories_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in apt_repositories_available[repo]) or (php_version not in apt_repositories_available[repo]['disabled']) -%} - {#- Version specific pre-command available? -#} - {%- if php_version in apt_repositories_available[repo] and 'pre' in apt_repositories_available[repo][php_version] -%} - {{ "\n\t" }}&& {{ apt_repositories_available[repo][php_version]['pre'] }} \ - {#- Generic pre-command available? -#} - {%- elif 'all' in apt_repositories_available[repo] and 'pre' in apt_repositories_available[repo]['all'] -%} - {{ "\n\t" }}&& {{ apt_repositories_available[repo]['all']['pre'] }} \ - {%- endif -%} - {#- Version specific key available? -#} - {%- if php_version in apt_repositories_available[repo] and 'key' in apt_repositories_available[repo][php_version] -%} - {{ "\n\t" }}&& APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv {{ apt_repositories_available[repo][php_version]['key'] }} \ - {#- Generic key available? -#} - {%- elif 'all' in apt_repositories_available[repo] and 'key' in apt_repositories_available[repo]['all'] -%} - {{ "\n\t" }}&& APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv {{ apt_repositories_available[repo]['all']['key'] }} \ - {%- endif -%} - {#- Version specific repository available? -#} - {%- if php_version in apt_repositories_available[repo] and 'deb' in apt_repositories_available[repo][php_version] -%} - {{ "\n\t" }}&& echo "{{ apt_repositories_available[repo][php_version]['deb'] }}" > /etc/apt/sources.list.d/{{ repo }}.list \ - {#- Generic repository available? -#} - {%- elif 'all' in apt_repositories_available[repo] and 'deb' in apt_repositories_available[repo]['all'] -%} - {{ "\n\t" }}&& echo "{{ apt_repositories_available[repo]['all']['deb'] }}" > /etc/apt/sources.list.d/{{ repo }}.list \ - {%- endif -%} - {%- endif -%} -{%- endfor -%}{{ "\n\t" }}\ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ -{% if php_version not in [5.2, 5.3, 5.4, 5.5] %} - certbot \ -{% endif %} - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ -{% if php_version in [7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] %} - mariadb-client \ -{% else %} - mysql-client \ -{% endif %} - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ -{% if php_version in [5.6, 7.0] %} - zsh-common \ -{% endif %} - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -{% if not build_fail_fast %} -RUN set -eux \ -{%- endif -%} -{%- for tool in software_enabled -%} - {# Not disabled #} - {%- if ('disabled' not in software_available[tool]) or (php_version not in software_available[tool]['disabled']) -%} - {{ "\n" }}# -------------------- {{ tool }} -------------------- - {%- if build_fail_fast -%} - {{ "\n" }}RUN set -eux \ - {%- endif -%} - {#- Version specific pre-command available? -#} - {%- if php_version in software_available[tool] and 'pre' in software_available[tool][php_version] -%} - {{ "\n\t" }}&& {{ software_available[tool][php_version]['pre'] }} \ - {#- Generic pre-command available? -#} - {%- elif 'all' in software_available[tool] and 'pre' in software_available[tool]['all'] -%} - {{ "\n\t" }}&& {{ software_available[tool]['all']['pre'] }} \ - {%- endif -%} - {#- Version specific command available? -#} - {%- if php_version in software_available[tool] and 'command' in software_available[tool][php_version] -%} - {{ "\n\t" }}&& {{ software_available[tool][php_version]['command'] }} \ - {#- Generic command available? -#} - {%- else -%} - {{ "\n\t" }}&& {{ software_available[tool]['all']['command'] }} \ - {%- endif -%} - {#- Version specific post-command available? -#} - {%- if php_version in software_available[tool] and 'post' in software_available[tool][php_version] -%} - {{ "\n\t" }}&& {{ software_available[tool][php_version]['post'] }} \ - {#- Generic post-command available? -#} - {%- elif 'all' in software_available[tool] and 'post' in software_available[tool]['all'] -%} - {{ "\n\t" }}&& {{ software_available[tool]['all']['post'] }} \ - {%- endif -%} - {#- Fail fast version -#} - {%- if build_fail_fast -%} - {%- if 'check' in software_available[tool] -%} - {{ "\n\t" }}&& {{ software_available[tool]['check'] }}{{ "\n\n" }} - {%- else -%} - {{ "\n\t" }}&& true{{ "\n\n" }} - {%- endif -%} - {%- else -%} - {{ "\n\t" }}\ - {%- endif -%} - {#- end of Fail fast version -#} - {%- endif -%} -{%- endfor -%} -{% if build_fail_fast -%} - RUN set -eux \{{ "\n" }} -{%- else -%} - {{ "\n\t" }}\{{ "\n" }} -{%- endif %} - \ - {% for f in directory_to_clean %} - && (rm -rf /home/devilbox/{{ f }} || true) \ - {% endfor %} - \ - {% for f in directory_to_clean %} - && (rm -rf /root/{{ f }} || true) \ - {% endfor %} - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -{% if not build_fail_fast %} -RUN set -eux \ -{%- endif -%} -{%- for tool in composer_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in composer_available[tool]) or (php_version not in composer_available[tool]['disabled']) -%} - {{ "\n" }}# -------------------- {{ tool }} -------------------- - {%- if build_fail_fast -%} - {{ "\n" }}RUN set -eux \ - {%- endif -%} - {#- Version specific gem version available? -#} - {%- if php_version in composer_available[tool] and 'version' in composer_available[tool][php_version] -%} - {{ "\n\t" }}&& COMPOSER_HOME="{{ composer_home }}" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-{{ composer_available[tool]['version'] }} global require {{ composer_available[tool]['name'] }}:{{ composer_available[tool][php_version]['version'] }} \ - {#- Generic gem version available? -#} - {%- elif 'all' in composer_available[tool] and 'version' in composer_available[tool]['all'] -%} - {{ "\n\t" }}&& COMPOSER_HOME="{{ composer_home }}" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-{{ composer_available[tool]['version'] }} global require {{ composer_available[tool]['name'] }}:{{ composer_available[tool]['all']['version'] }} \ - {#- No version info available -#} - {%- else -%} - {{ "\n\t" }}&& COMPOSER_HOME="{{ composer_home }}" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-{{ composer_available[tool]['version'] }} global require {{ composer_available[tool]['name'] }} \ - {%- endif -%} - {#- Symlinks available? -#} - {%- if 'link' in composer_available[tool] -%} - {{ "\n\t" }}&& ln -s {{ composer_home }}/vendor/{{ composer_available[tool]['name'] }}/{{ composer_available[tool]['link'] }} /usr/local/bin/ \ - {%- endif -%} - {#- Fail fast version -#} - {%- if build_fail_fast -%} - {%- if 'check' in composer_available[tool] -%} - {{ "\n\t" }}&& {{ composer_available[tool]['check'] }}{{ "\n\n" }} - {%- else -%} - {{ "\n\t" }}&& true{{ "\n\n" }} - {%- endif -%} - {%- else -%} - {{ "\n\t" }}\ - {%- endif -%} - {#- end of Fail fast version -#} - {%- endif -%} -{% endfor %} -{% if build_fail_fast -%} - RUN set -eux \{{ "\n" }} -{%- else -%} - {{ "\n\t" }}\{{ "\n" }} -{%- endif %} - \ - {% for f in directory_to_clean %} - && (rm -rf /home/devilbox/{{ f }} || true) \ - {% endfor %} - \ - {% for f in directory_to_clean %} - && (rm -rf /root/{{ f }} || true) \ - {% endfor %} - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -{% if not build_fail_fast %} -RUN set -eux \ -{%- endif -%} -{%- for tool in npm_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in npm_available[tool]) or (php_version not in npm_available[tool]['disabled']) -%} - {{ "\n" }}# -------------------- {{ tool }} -------------------- - {%- if build_fail_fast -%} - {{ "\n" }}RUN set -eux \ - {%- endif -%} - {#- Version specific gem version available? -#} - {%- if php_version in npm_available[tool] and 'version' in npm_available[tool][php_version] -%} - {{ "\n\t" }}&& su -c '. {{ nvm_home }}/nvm.sh; npm install -g --force {{ npm_available[tool]['name'] }} {{ npm_available[tool][php_version]['version'] }}' devilbox \ - {#- Generic gem version available? -#} - {%- elif 'all' in npm_available[tool] and 'version' in npm_available[tool]['all'] -%} - {{ "\n\t" }}&& su -c '. {{ nvm_home }}/nvm.sh; npm install -g --force {{ npm_available[tool]['name'] }} {{ npm_available[tool]['all']['version'] }}' devilbox \ - {#- No version info available -#} - {%- else -%} - {{ "\n\t" }}&& su -c '. {{ nvm_home }}/nvm.sh; npm install -g --force {{ npm_available[tool]['name'] }}' devilbox \ - {%- endif -%} - {#- Fail fast version -#} - {%- if build_fail_fast -%} - {%- if 'check' in npm_available[tool] -%} - {{ "\n\t" }}&& PATH=$PATH:{{ nvm_home }}/versions/node/$(/bin/ls -1 {{ nvm_home }}/versions/node/ | sort -V | tail -1)/bin {{ nvm_home }}/versions/node/$(/bin/ls -1 {{ nvm_home }}/versions/node/ | sort -V | tail -1)/bin/{{ npm_available[tool]['check'] }}{{ "\n\n" }} - {%- else -%} - {{ "\n\t" }}&& true{{ "\n\n" }} - {%- endif -%} - {%- else -%} - {{ "\n\t" }}\ - {%- endif -%} - {#- end of Fail fast version -#} - {%- endif -%} -{%- endfor -%} -{% if build_fail_fast -%} - RUN set -eux \{{ "\n" }} -{%- else -%} - {{ "\n\t" }}\{{ "\n" }} -{%- endif %} - \ - && if [ -f "{{ nvm_home }}/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. {{ nvm_home }}/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. {{ nvm_home }}/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. {{ nvm_home }}/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - {% for f in directory_to_clean %} - && (rm -rf /home/devilbox/{{ f }} || true) \ - {% endfor %} - \ - {% for f in directory_to_clean %} - && (rm -rf /root/{{ f }} || true) \ - {% endfor %} - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find {{ nvm_home }} -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -{% if not build_fail_fast %} -RUN set -eux \ -{%- endif -%} -{%- for tool in gem_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in gem_available[tool]) or (php_version not in gem_available[tool]['disabled']) -%} - {{ "\n" }}# -------------------- {{ tool }} -------------------- - {%- if build_fail_fast -%} - {{ "\n" }}RUN set -eux \ - {%- endif -%} - {#- Version specific gem version available? -#} - {%- if php_version in gem_available[tool] and 'version' in gem_available[tool][php_version] -%} - {{ "\n\t" }}&& gem install {{ gem_available[tool]['name'] }} -v {{ gem_available[tool][php_version]['version'] }} \ - {#- Generic gem version available? -#} - {%- elif 'all' in gem_available[tool] and 'version' in gem_available[tool]['all'] -%} - {{ "\n\t" }}&& gem install {{ gem_available[tool]['name'] }} -v {{ gem_available[tool]['all']['version'] }} \ - {#- No version info available -#} - {%- else -%} - {{ "\n\t" }}&& gem install {{ gem_available[tool]['name'] }} \ - {%- endif -%} - {#- Fail fast version -#} - {%- if build_fail_fast -%} - {%- if 'check' in gem_available[tool] -%} - {{ "\n\t" }}&& {{ gem_available[tool]['check'] }}{{ "\n\n" }} - {%- else -%} - {{ "\n\t" }}&& true{{ "\n\n" }} - {%- endif -%} - {%- else -%} - {{ "\n\t" }}\ - {%- endif -%} - {#- end of Fail fast version -#} - {%- endif -%} -{%- endfor -%} -{% if build_fail_fast -%} - RUN set -eux \{{ "\n" }} -{%- else -%} - {{ "\n\t" }}\{{ "\n" }} -{%- endif %} - \ - {% for f in directory_to_clean %} - && (rm -rf /home/devilbox/{{ f }} || true) \ - {% endfor %} - \ - {% for f in directory_to_clean %} - && (rm -rf /root/{{ f }} || true) \ - {% endfor %} - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -{% if not build_fail_fast %} -RUN set -eux \ -{%- endif -%} -{%- for tool in pip_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in pip_available[tool]) or (php_version not in pip_available[tool]['disabled']) -%} - {{ "\n" }}# -------------------- {{ tool }} -------------------- - {%- if build_fail_fast -%} - {{ "\n" }}RUN set -eux \ - {%- endif -%} - {#- Version specific gem version available? -#} - {%- if php_version in pip_available[tool] and 'version' in pip_available[tool][php_version] -%} - {{ "\n\t" }}&& pip install --no-cache-dir --force-reinstall {{ pip_available[tool]['name'] }}=={{ pip_available[tool][php_version]['version'] }} || true \ - {#- Generic gem version available? -#} - {%- elif 'all' in pip_available[tool] and 'version' in pip_available[tool]['all'] -%} - {{ "\n\t" }}&& pip install --no-cache-dir --force-reinstall {{ pip_available[tool]['name'] }}=={{ pip_available[tool]['all']['version'] }} || true \ - {#- No version info available -#} - {%- else -%} - {{ "\n\t" }}&& pip install --no-cache-dir --force-reinstall {{ pip_available[tool]['name'] }} || true \ - {%- endif -%} - {#- Fail fast version -#} - {%- if build_fail_fast -%} - {%- if 'check' in pip_available[tool] -%} - {{ "\n\t" }}&& {{ pip_available[tool]['check'] }}{{ "\n\n" }} - {%- else -%} - {{ "\n\t" }}&& true{{ "\n\n" }} - {%- endif -%} - {%- else -%} - {{ "\n\t" }}\ - {%- endif -%} - {#- end of Fail fast version -#} - {%- endif -%} -{%- endfor -%} -{% if build_fail_fast -%} - RUN set -eux \{{ "\n" }} -{%- else -%} - {{ "\n\t" }}\{{ "\n" }} -{%- endif %} - \ - {% for f in directory_to_clean %} - && (rm -rf /home/devilbox/{{ f }} || true) \ - {% endfor %} - \ - {% for f in directory_to_clean %} - && (rm -rf /root/{{ f }} || true) \ - {% endfor %} - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="{{ nvm_home }}/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -{% if debug %} -### -### Verify -### -RUN set -eux \ - && 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 - -RUN set -eux \ -# -------------------- Software -------------------- -{%- for tool in software_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in software_available[tool]) or (php_version not in software_available[tool]['disabled']) -%} - {%- if 'check' in software_available[tool] -%} - {{ "\n\t" }}&& {{ software_available[tool]['check'] }} \ - {%- endif -%} - {%- endif -%} -{%- endfor -%}{{ "\n\t" }}\ -# -------------------- Composer -------------------- -{%- for tool in composer_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in composer_available[tool]) or (php_version not in composer_available[tool]['disabled']) -%} - {%- if 'check' in composer_available[tool] -%} - {{ "\n\t" }}&& {{ composer_available[tool]['check'] }} \ - {%- endif -%} - {%- endif -%} -{%- endfor -%}{{ "\n\t" }}\ -# -------------------- PIP -------------------- -{%- for tool in pip_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in pip_available[tool]) or (php_version not in pip_available[tool]['disabled']) -%} - {%- if 'check' in pip_available[tool] -%} - {{ "\n\t" }}&& {{ pip_available[tool]['check'] }} \ - {%- endif -%} - {%- endif -%} -{%- endfor -%}{{ "\n\t" }}\ -# -------------------- NPM -------------------- -{%- for tool in npm_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in npm_available[tool]) or (php_version not in npm_available[tool]['disabled']) -%} - {%- if 'check' in npm_available[tool] -%} - {{ "\n\t" }}&& {{ npm_available[tool]['check'] }} \ - {%- endif -%} - {%- endif -%} -{%- endfor -%}{{ "\n\t" }}\ -# -------------------- GEM -------------------- -{%- for tool in gem_enabled -%} - {#- Not disabled -#} - {%- if ('disabled' not in gem_available[tool]) or (php_version not in gem_available[tool]['disabled']) -%} - {%- if 'check' in gem_available[tool] -%} - {{ "\n\t" }}&& {{ gem_available[tool]['check'] }} \ - {%- endif -%} - {%- endif -%} -{% endfor %}{{ "\n\t" }}\ -# -------------------- Cleanup -------------------- - \ - {% for f in directory_to_clean %} - && (rm -rf /home/devilbox/{{ f }} || true) \ - {% endfor %} - \ - {% for f in directory_to_clean %} - && (rm -rf /root/{{ f }} || true) \ - {% endfor %} - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -{% endif %} -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-{{ php_version }}.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-{{ php_version }}.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -602,19 +547,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/.ansible/group_vars/all/all-ansible.yml b/.ansible/group_vars/all/all-ansible.yml index 69a7644..b35b231 100644 --- a/.ansible/group_vars/all/all-ansible.yml +++ b/.ansible/group_vars/all/all-ansible.yml @@ -6,6 +6,7 @@ edit_comment_base: "# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-base.j2 instead." edit_comment_mods: "# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-mods.j2 instead." edit_comment_prod: "# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-prod.j2 instead." +edit_comment_slim: "# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead." edit_comment_work: "# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead." @@ -38,7 +39,7 @@ php_all_versions: # ------------------------------------------------------------------------------------------------- -# Docker file paths for each version for base, mods, prod & work +# Docker file paths for each version for base, mods, prod, slim & work # ------------------------------------------------------------------------------------------------- template_dockerfiles: - src: DOCKERFILES/Dockerfile-base.j2 @@ -47,6 +48,8 @@ template_dockerfiles: dst: "../Dockerfiles/mods/Dockerfile-{{ php_version }}" - src: DOCKERFILES/Dockerfile-prod.j2 dst: "../Dockerfiles/prod/Dockerfile-{{ php_version }}" + - src: DOCKERFILES/Dockerfile-slim.j2 + dst: "../Dockerfiles/slim/Dockerfile-{{ php_version }}" - src: DOCKERFILES/Dockerfile-work.j2 dst: "../Dockerfiles/work/Dockerfile-{{ php_version }}" @@ -55,6 +58,7 @@ template_dockerfiles: # Assign php.ini & php-fpm.conf to PHP versions # ------------------------------------------------------------------------------------------------- template_configurations: + # php.ini - src: CONFIGURATIONS/php.ini.j2 dst: "../Dockerfiles/base/data/php-ini.d/php-{{ php_version }}.ini" @@ -62,10 +66,11 @@ template_configurations: key: base alt: base - src: CONFIGURATIONS/php.ini.j2 - dst: "../Dockerfiles/work/data/php-ini.d/php-{{ php_version }}.ini" + dst: "../Dockerfiles/slim/data/php-ini.d/php-{{ php_version }}.ini" cfg: "{{ php_settings_ini }}" - key: work - alt: base # Alternative key to use when definition is not set in 'work' + key: slim + alt: base # Alternative key to use when definition is not set in 'slim' + # php-fpm.conf - src: CONFIGURATIONS/php-fpm.conf.j2 dst: "../Dockerfiles/base/data/php-fpm.conf/php-fpm-{{ php_version }}.conf" @@ -73,7 +78,7 @@ template_configurations: key: base alt: base - src: CONFIGURATIONS/php-fpm.conf.j2 - dst: "../Dockerfiles/work/data/php-fpm.conf/php-fpm-{{ php_version }}.conf" + dst: "../Dockerfiles/slim/data/php-fpm.conf/php-fpm-{{ php_version }}.conf" cfg: "{{ php_settings_fpm }}" - key: work - alt: base + key: slim + alt: base # Alternative key to use when definition is not set in 'slim' diff --git a/.ansible/group_vars/all/all-php-settings.yml b/.ansible/group_vars/all/all-php-settings.yml index 6ebc10a..63290a6 100644 --- a/.ansible/group_vars/all/all-php-settings.yml +++ b/.ansible/group_vars/all/all-php-settings.yml @@ -54,7 +54,7 @@ php_settings_ini: # ---- Inherits from base ---- prod: # ---- Inherits from base and overwrites certain values ---- - work: + slim: # Error reporting error_reporting: E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED xmlrpc_errors: 'Off' @@ -73,6 +73,8 @@ php_settings_ini: xdebug3_mode: 'Off' xdebug3_start_with_request: 'default' xdebug3_client_port: '9000' + # ---- Inherits from slim ---- + work: # ------------------------------------------------------------------------------------------------- # php-fpm.conf @@ -109,5 +111,7 @@ php_settings_fpm: mods: # ---- Inherits from base ---- prod: - # ---- Inherits from base and overwrites certain values ---- + # ---- Inherits from base ---- + slim: + # ---- Inherits from base ---- work: diff --git a/.ansible/group_vars/all/slim.yml b/.ansible/group_vars/all/slim.yml new file mode 100644 index 0000000..eeb2d7e --- /dev/null +++ b/.ansible/group_vars/all/slim.yml @@ -0,0 +1,522 @@ +--- +################################################################################################### +# Docker: slim +################################################################################################### + +# +# This file holds definition for all devibox/php-fpm:x.y-slim images +# + + +### +### Define operating system versions +### +os_release: + # Bullseye (Ubuntu: focal, groovy, hirsute, impish) + all: + debian: bullseye + ubuntu: focal + 8.2: + debian: bullseye + ubuntu: focal + 8.1: + debian: bullseye + ubuntu: focal + 8.0: + debian: bullseye + ubuntu: focal + 7.4: + debian: bullseye + ubuntu: focal + 7.3: + debian: bullseye + ubuntu: focal + # Buster (Ubuntu: bionic, cosmic, disco, eoan) + 7.2: + debian: buster + ubuntu: bionic + 7.1: + debian: buster + ubuntu: bionic + # Strech (Ubuntu: xenial, yakkety, zesty, artful) + 7.0: + debian: stretch + ubuntu: xenial + 5.6: + debian: stretch + ubuntu: xenial + # Jessie (Ubuntu: trusty, utopic, vivid, wily) + 5.5: + debian: jessie + ubuntu: trusty + 5.4: + debian: jessie + ubuntu: trusty + 5.3: + debian: jessie + ubuntu: trusty + 5.2: + debian: jessie + ubuntu: trusty + + +# ------------------------------------------------------------------------------------------------- +# Apt repositories to enable (in defined order) +# ------------------------------------------------------------------------------------------------- +base_apt_repositories_enabled: + - backports + - blackfire + - mongo + - pgsql + + +# ------------------------------------------------------------------------------------------------- +# Software to install (in defined order) +# ------------------------------------------------------------------------------------------------- +base_software_enabled: + - blackfire + - mhsendmail + - mongo_client + - mysqldumpsecure + - pgsql_client + + +# ------------------------------------------------------------------------------------------------- +# Apt repository definition +# ------------------------------------------------------------------------------------------------- + +# all: is generic version of defines +# 7.2: is specific version of defines +# disabled: [optional] Array of PHP versions for which to disable this module +# +# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: +# deb: Deb line to add to sources list +# key: [optional] Key id to add for repository +# pre: [optional] Run custom command to add gpg key for repository +# +base_apt_repositories_available: + + ### + ### Backports + ### + backports: + # [Bullseye] + all: + type: repo + pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 + deb: deb http://ftp.debian.org/debian {{ os_release['all'].debian }}-backports main + # [Buster] + 7.2: + type: repo + pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 + deb: deb http://ftp.debian.org/debian {{ os_release[7.2].debian }}-backports main + # [Buster] + 7.1: + type: repo + pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 + deb: deb http://ftp.debian.org/debian {{ os_release[7.1].debian }}-backports main + # [Stretch] + 7.0: + type: repo + pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 + deb: deb http://ftp.debian.org/debian {{ os_release[7.0].debian }}-backports main + # [Stretch] + 5.6: + type: repo + pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 + deb: deb http://ftp.debian.org/debian {{ os_release[5.6].debian }}-backports main + # [Jessie] + 5.5: + type: repo + pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until + deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.5].debian }}-backports main + # [Jessie] + 5.4: + type: repo + pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until + deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.4].debian }}-backports main + # [Jessie] + 5.3: + type: repo + pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until + deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.3].debian }}-backports main + # [Jessie] + 5.2: + type: repo + pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until + deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.2].debian }}-backports main + + ### + ### Blackfire + ### + blackfire: + all: + type: repo + deb: deb http://packages.blackfire.io/debian any main + pre: curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - + + ### + ### MongoDB (currently obsolete) + ### + mongo: + # 8.2: mongodb-org-(tools|shell) (amd64, arm64) + # 8.1: mongodb-org-(tools|shell) (amd64, arm64) + # 8.0: mongodb-org-(tools|shell) (amd64, arm64) + # 7.4: mongodb-org-(tools|shell) (amd64, arm64) + # 7.3: mongodb-org-(tools|shell) (amd64, arm64) + # 7.2: mongo-tools OR mongodb-org-(tools|shell) (amd64, arm64) + # 7.1: mongo-tools OR mongodb-org-(tools|shell) (amd64, arm64) + # 7.0: mongodb-clients & mongo-tools (amd64, arm64) + # 5.6: mongodb-clients & mongo-tools (amd64, arm64) + # 5.5: mongodb-clients (amd64) + # 5.4: mongodb-clients (amd64) + # 5.3: mongodb-clients (amd64) + # 5.2: mongodb-clients (amd64) + disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0] # TODO: Why were those disabled? + # [Bullseye] Ubuntu repository required for arm64 support instead + all: + type: repo + # gpg --dry-run --with-fingerprint < <(curl https://www.mongodb.org/static/pgp/server-4.4.asc) | grep fingerprint | sed 's/.*=//g' | sed 's/ //g' + deb: deb http://repo.mongodb.org/apt/ubuntu {{ os_release['all'].ubuntu }}/mongodb-org/4.4 multiverse + key: 20691EEC35216C63CAF66CE1656408E390CFB1F5 + # [Buster] Ubuntu repository required for arm64 support instead + 7.2: + type: repo + # gpg --dry-run --with-fingerprint < <(curl https://www.mongodb.org/static/pgp/server-4.4.asc) | grep fingerprint | sed 's/.*=//g' | sed 's/ //g' + deb: deb http://repo.mongodb.org/apt/ubuntu {{ os_release[7.2].ubuntu }}/mongodb-org/4.4 multiverse + key: 20691EEC35216C63CAF66CE1656408E390CFB1F5 + # [Buster] Ubuntu repository required for arm64 support instead + 7.1: + type: repo + # gpg --dry-run --with-fingerprint < <(curl https://www.mongodb.org/static/pgp/server-4.4.asc) | grep fingerprint | sed 's/.*=//g' | sed 's/ //g' + deb: deb http://repo.mongodb.org/apt/ubuntu {{ os_release[7.1].ubuntu }}/mongodb-org/4.4 multiverse + key: 20691EEC35216C63CAF66CE1656408E390CFB1F5 + + ### + ### PostgrSQL (currently obsolete) + ### + pgsql: + # [Bullseye] + all: + type: repo + deb: deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release['all'].debian }}-pgdg main + pre: curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - + # [Buster] + 7.2: + type: repo + deb: deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release[7.2].debian }}-pgdg main + pre: curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - + # [Buster] + 7.1: + type: repo + deb: deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release[7.1].debian }}-pgdg main + pre: curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - + # [Stretch] + 7.0: + type: repo + deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[7.0].debian }}-pgdg main + # [Stretch] + 5.6: + type: repo + deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.6].debian }}-pgdg main + # [Jessie] + 5.5: + type: repo + deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.5].debian }}-pgdg main + # [Jessie] + 5.4: + type: repo + deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.4].debian }}-pgdg main + # [Jessie] + 5.3: + type: repo + deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.3].debian }}-pgdg main + # [Jessie] + 5.2: + type: repo + deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.2].debian }}-pgdg main + + +# ------------------------------------------------------------------------------------------------- +# Essential Software definition +# ------------------------------------------------------------------------------------------------- + +# all: is generic version of defines +# 7.2: is specific version of defines +# disabled: [optional] Array of PHP versions for which to disable this module +# check: [optional] Include a check command to test if it was installed successfully +# +# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: +# pre: [optional] Run command before 'command:' statement +# command: Command to execute +# post: [optional] Run command after 'command:' statement +# +base_software_available: + + ### + ### Blackfire + ### + blackfire: + check: | + blackfire version \ + && blackfire-agent -v \ + all: + type: custom + pre: | + apt-get update \ + command: | + apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + post: rm -rf /var/lib/apt/lists/* + + ### + ### mhsendmail + ### + mhsendmail: + all: + type: custom + command: | + if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + + ### + ### MongoDB Command line client + ### + # 8.2: mongodb-org-(tools|shell) (amd64, arm64) + # 8.1: mongodb-org-(tools|shell) (amd64, arm64) + # 8.0: mongodb-org-(tools|shell) (amd64, arm64) + # 7.4: mongodb-org-(tools|shell) (amd64, arm64) + # 7.3: mongodb-org-(tools|shell) (amd64, arm64) + # 7.2: mongodb-org-(tools|shell) (amd64, arm64) + # 7.1: mongodb-org-(tools|shell) (amd64, arm64) + # 7.0: mongodb-clients & mongo-tools (amd64, arm64) + # 5.6: mongodb-clients & mongo-tools (amd64, arm64) + # 5.5: mongodb-clients (amd64) + # 5.4: mongodb-clients (amd64) + # 5.3: mongodb-clients (amd64) + # 5.2: mongodb-clients (amd64) + mongo_client: + check: | + if echo '{{ php_version }}' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + all: + type: custom + pre: | + APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu {{ os_release[php_version].ubuntu }}/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + command: | + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + post: rm -rf /var/lib/apt/lists/* + 7.0: + type: custom + pre: apt-get update + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients \ + mongo-tools; \ + else \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + 5.6: + type: custom + pre: apt-get update + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients \ + mongo-tools; \ + else \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + 5.5: + type: custom + pre: apt-get update + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + 5.4: + type: custom + pre: apt-get update + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + 5.3: + type: custom + pre: apt-get update + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + 5.2: + type: custom + pre: apt-get update + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + + ### + ### mysqldump-secure + ### + mysqldumpsecure: + check: mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' + all: + type: custom + command: | + git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + + ### + ### PostgrSQL Command line client + ### + # 8.2: (amd64, arm64) + # 8.1: (amd64, arm64) + # 8.0: (amd64, arm64) + # 7.4: (amd64, arm64) + # 7.3: (amd64, arm64) + # 7.2: (amd64, arm64) + # 7.1: (amd64, arm64) + # 7.0: (amd64) + # 5.6: (amd64) + # 5.5: (amd64) + # 5.4: (amd64) + # 5.3: (amd64) + # 5.2: (amd64) + pgsql_client: + check: | + if echo '{{ php_version }}' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + all: + type: custom + pre: | + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + command: | + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + post: rm -rf /var/lib/apt/lists/* + 7.0: + type: custom + pre: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + 5.6: + type: custom + pre: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + 5.5: + type: custom + pre: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + 5.4: + type: custom + pre: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + 5.3: + type: custom + pre: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + 5.2: + type: custom + pre: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + command: | + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ diff --git a/.ansible/group_vars/all/work-help.yml b/.ansible/group_vars/all/work-help.yml new file mode 100644 index 0000000..ecd0446 --- /dev/null +++ b/.ansible/group_vars/all/work-help.yml @@ -0,0 +1,262 @@ +--- +################################################################################################### +# Docker: work (docker stage: help) +################################################################################################### + +# +# This file holds definition for all devibox/php-fpm:x.y-work images +# + + +# ------------------------------------------------------------------------------------------------- +# Global variables +# ------------------------------------------------------------------------------------------------- +composer_home: /usr/local/src/composer +nvm_home: /opt/nvm +node_version: --lts + +directory_to_clean: + - .*json + - .ansible + - .cache + - .composer + - .config + - .console + - .drush + - .gem + - .local + - .node + - .npm + - .pm2 + - .subversion + - .v8* + - node_modules + - yarn.lock + + +# ------------------------------------------------------------------------------------------------- +# Software to install (in defined order) +# ------------------------------------------------------------------------------------------------- +help_software_enabled: + - composer + - nvm + - pip + + +## ------------------------------------------------------------------------------------------------- +## Software definition +## ------------------------------------------------------------------------------------------------- +# +# all: is generic version of defines +# 7.2: is specific version of defines +# disabled: [optional] Array of PHP versions for which to disable this module +# check: [optional] Include a check command to test if it was installed successfully +# +# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: +# pre: [optional] Run command before 'command:' statement +# command: Command to execute +# post: [optional] Run command after 'command:' statement +# +help_software_available: + + ### + ### Composer + ### + composer: + disabled: [5.2] + check: composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' + all: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + command: | + curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + post: | + ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + 7.1: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + 7.0: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + 5.6: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + 5.5: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + 5.4: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + 5.3: + type: custom + pre: | + COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + post: | + ln -sf /usr/local/bin/composer-1 /usr/local/bin/composer \ + + ### + ### nvm + ### + nvm: + check: | + su -c '. {{ nvm_home }}/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. {{ nvm_home }}/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + all: + type: custom + pre: | + NODE_VERSION="{{ node_version }}" \ + command: | + NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p {{ nvm_home }} \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="{{ nvm_home }}" bash \ + \ + && { \ + echo 'export NVM_DIR="{{ nvm_home }}"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "{{ nvm_home }}" \ + # Install latest and LTS version and yarn + post: | + su -c ". {{ nvm_home }}/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". {{ nvm_home }}/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". {{ nvm_home }}/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "{{ nvm_home }}/versions/node/$(su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "{{ nvm_home }}/versions/node/$(su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "{{ nvm_home }}/versions/node/$(su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "{{ nvm_home }}/versions/node/$(su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "{{ nvm_home }}/versions/node/$(su -c '. {{ nvm_home }}/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 {{ nvm_home }} \ + && find {{ nvm_home }} -type f -print0 | xargs -n1 -0 chmod go+w \ + && find {{ nvm_home }} -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf {{ nvm_home }}/.cache \ + && rm -rf {{ nvm_home }}/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf {{ nvm_home }}/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + 7.0: + type: custom + pre: | + NODE_VERSION="17" \ + 5.6: + type: custom + pre: | + NODE_VERSION="17" \ + 5.5: + type: custom + pre: | + NODE_VERSION="17" \ + 5.4: + type: custom + pre: | + NODE_VERSION="17" \ + 5.3: + type: custom + pre: | + NODE_VERSION="17" \ + 5.2: + type: custom + pre: | + NODE_VERSION="17" \ + + ### + ### Python pip + ### + pip: + check: pip --version + all: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + # Cleanup + post: | + /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + run_dep: [python3-distutils] + build_dep: [libpython3-dev] + 7.2: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] + 7.1: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] + 7.0: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] + 5.6: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] + 5.5: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] + 5.4: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] + 5.3: + type: custom + run_dep: [] + build_dep: [libpython-dev] + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + 5.2: + type: custom + command: | + curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + run_dep: [] + build_dep: [libpython-dev] diff --git a/.ansible/group_vars/all/work.yml b/.ansible/group_vars/all/work.yml index f496555..dba1a84 100644 --- a/.ansible/group_vars/all/work.yml +++ b/.ansible/group_vars/all/work.yml @@ -1,1423 +1,238 @@ --- -################################################################################################### -# Docker: work -################################################################################################### -# -# This file holds definition for all devibox/php-fpm:x.y-work images -# +# DO NOT ALTER THIS FILE - IT IS AUTOGENERATED. - -### -### Define operating system versions -### -os_release: - # Jessie (Ubuntu: trusty, utopic, vivid, wily) - 5.2: - debian: jessie - ubuntu: trusty - 5.3: - debian: jessie - ubuntu: trusty - 5.4: - debian: jessie - ubuntu: trusty - 5.5: - debian: jessie - ubuntu: trusty - # Strech (Ubuntu: xenial, yakkety, zesty, artful) - 5.6: - debian: stretch - ubuntu: xenial - 7.0: - debian: stretch - ubuntu: xenial - # Buster (Ubuntu: bionic, cosmic, disco, eoan) - 7.1: - debian: buster - ubuntu: bionic - 7.2: - debian: buster - ubuntu: bionic - # Bullseye (Ubuntu: focal, groovy, hirsute, impish) - 7.3: - debian: bullseye - ubuntu: focal - 7.4: - debian: bullseye - ubuntu: focal - 8.0: - debian: bullseye - ubuntu: focal - 8.1: - debian: bullseye - ubuntu: focal - 8.2: - debian: bullseye - ubuntu: focal - all: - debian: bullseye - ubuntu: focal - - -# ------------------------------------------------------------------------------------------------- -# Global variables -# ------------------------------------------------------------------------------------------------- -composer_home: /usr/local/src/composer -nvm_home: /opt/nvm -node_version: --lts - -directory_to_clean: - - .*json - - .ansible - - .cache - - .composer - - .config - - .console - - .drush - - .gem - - .local - - .node - - .npm - - .pm2 - - .subversion - - .v8* - - node_modules - - yarn.lock - - -# ------------------------------------------------------------------------------------------------- -# Apt repositories to enable (in defined order) -# ------------------------------------------------------------------------------------------------- -apt_repositories_enabled: - - backports - - blackfire - #- git - #- mongo - #- pgsql - - -# ------------------------------------------------------------------------------------------------- -# PHP Composer packages to install -# ------------------------------------------------------------------------------------------------- -composer_enabled: +# The following specifies the order in which tools are being installed. +tools_enabled: + - angular_cli - asgardcms - codeception - - lumen - #- photon - - prestissimo - - -# ------------------------------------------------------------------------------------------------- -# Ruby gem packages to install -# ------------------------------------------------------------------------------------------------- -gem_enabled: - - mixlib_config - - ffi - - rb_inotify - - mdl - - -# ------------------------------------------------------------------------------------------------- -# Node npm packages to install -# ------------------------------------------------------------------------------------------------- -npm_enabled: - - angular_cli - eslint - - grunt - - grunt_cli - - gulp - - jsonlint - # https://github.com/Unitech/pm2 - - pm2 - - mdlint - - sass - - stylelint - - vue_cli - - vue_cli_service_global - - webpack - - webpack_cli - - -# ------------------------------------------------------------------------------------------------- -# Python pip packages to install -# ------------------------------------------------------------------------------------------------- -pip_enabled: - #- ansible + - jq + - lumen + - mdl + - phpunit + - prestissimo + - pwncat + - wpcli - yamllint - yq -# ------------------------------------------------------------------------------------------------- -# Software to install (in defined order) -# ------------------------------------------------------------------------------------------------- -software_enabled: - # Composer, pip and nvm need to be first, others rely on it - - composer - - pip - - nvm - # Required for internal Devilbox connection - - pgsql_client - - mongo_client - # Normal packages start here - - awesomeci - - deployer - - drush7 - - drush8 - - drush9 - - drupalconsole - - gitflow - #- homebrew - - laravel - - linkcheck - - mhsendmail - - mysqldumpsecure - - phalcon - - phpcs - - phpcbf - - php-cs-fixer - - phpmd - - phpunit - - symfony - - wkhtmltopdf - - wpcli - - -# ------------------------------------------------------------------------------------------------- -# Apt repository definition -# ------------------------------------------------------------------------------------------------- - -# all: is generic version of defines -# 7.2: is specific version of defines -# disabled: [optional] Array of PHP versions for which to disable this module -# -# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: -# deb: Deb line to add to sources list -# key: [optional] Key id to add for repository -# pre: [optional] Run custom command to add gpg key for repository -# -apt_repositories_available: - ### - ### Backports - ### - backports: - # [Jessie] - 5.2: - pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until - deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.2].debian }}-backports main - # [Jessie] - 5.3: - pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until - deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.3].debian }}-backports main - # [Jessie] - 5.4: - pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until - deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.4].debian }}-backports main - # [Jessie] - 5.5: - pre: echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until - deb: deb [trusted=yes] http://archive.debian.org/debian {{ os_release[5.5].debian }}-backports main - # [Stretch] - 5.6: - pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 - deb: deb http://ftp.debian.org/debian {{ os_release[5.6].debian }}-backports main - # [Stretch] - 7.0: - pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 - deb: deb http://ftp.debian.org/debian {{ os_release[7.0].debian }}-backports main - # [Buster] - 7.1: - pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 - deb: deb http://ftp.debian.org/debian {{ os_release[7.1].debian }}-backports main - # [Buster] - 7.2: - pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 - deb: deb http://ftp.debian.org/debian {{ os_release[7.2].debian }}-backports main - # [Bullseye] - all: - pre: apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 - deb: deb http://ftp.debian.org/debian {{ os_release['all'].debian }}-backports main - ### - ### Blackfire - ### - blackfire: - all: - deb: deb http://packages.blackfire.io/debian any main - pre: curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - - ### - ### Git (currently obsolete) - ### - git: - 5.2: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[5.2].ubuntu }} main - 5.3: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[5.3].ubuntu }} main - 5.4: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[5.4].ubuntu }} main - 5.5: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[5.5].ubuntu }} main - 5.6: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[5.6].ubuntu }} main - 7.0: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[7.0].ubuntu }} main - 7.1: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[7.1].ubuntu }} main - 7.2: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[7.2].ubuntu }} main - 7.3: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[7.3].ubuntu }} main - 7.4: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[7.4].ubuntu }} main - 8.0: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[8.0].ubuntu }} main - 8.1: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[8.1].ubuntu }} main - 8.2: - deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu {{ os_release[8.2].ubuntu }} main - all: - key: A1715D88E1DF1F24 - ### - ### MongoDB (currently obsolete) - ### - mongo: - # 5.2: mongodb-clients (amd64) - # 5.3: mongodb-clients (amd64) - # 5.4: mongodb-clients (amd64) - # 5.5: mongodb-clients (amd64) - # 5.6: mongodb-clients & mongo-tools (amd64, arm64) - # 7.0: mongodb-clients & mongo-tools (amd64, arm64) - # 7.1: mongo-tools OR mongodb-org-(tools|shell) (amd64, arm64) - # 7.2: mongo-tools OR mongodb-org-(tools|shell) (amd64, arm64) - # 7.3: mongodb-org-(tools|shell) (amd64, arm64) - # 7.4: mongodb-org-(tools|shell) (amd64, arm64) - # 8.0: mongodb-org-(tools|shell) (amd64, arm64) - # 8.1: mongodb-org-(tools|shell) (amd64, arm64) - # 8.2: mongodb-org-(tools|shell) (amd64, arm64) - disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0] - # [Buster] Ubuntu repository required for arm64 support instead - 7.1: - # gpg --dry-run --with-fingerprint < <(curl https://www.mongodb.org/static/pgp/server-4.4.asc) | grep fingerprint | sed 's/.*=//g' | sed 's/ //g' - deb: deb http://repo.mongodb.org/apt/ubuntu {{ os_release[7.1].ubuntu }}/mongodb-org/4.4 multiverse - key: 20691EEC35216C63CAF66CE1656408E390CFB1F5 - # [Buster] Ubuntu repository required for arm64 support instead - 7.2: - # gpg --dry-run --with-fingerprint < <(curl https://www.mongodb.org/static/pgp/server-4.4.asc) | grep fingerprint | sed 's/.*=//g' | sed 's/ //g' - deb: deb http://repo.mongodb.org/apt/ubuntu {{ os_release[7.2].ubuntu }}/mongodb-org/4.4 multiverse - key: 20691EEC35216C63CAF66CE1656408E390CFB1F5 - # [Bullseye] Ubuntu repository required for arm64 support instead - all: - # gpg --dry-run --with-fingerprint < <(curl https://www.mongodb.org/static/pgp/server-4.4.asc) | grep fingerprint | sed 's/.*=//g' | sed 's/ //g' - deb: deb http://repo.mongodb.org/apt/ubuntu {{ os_release['all'].ubuntu }}/mongodb-org/4.4 multiverse - key: 20691EEC35216C63CAF66CE1656408E390CFB1F5 - ### - ### PostgrSQL (currently obsolete) - ### - pgsql: - # [Jessie] - 5.2: - deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.2].debian }}-pgdg main - # [Jessie] - 5.3: - deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.3].debian }}-pgdg main - # [Jessie] - 5.4: - deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.4].debian }}-pgdg main - # [Jessie] - 5.5: - deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.5].debian }}-pgdg main - # [Stretch] - 5.6: - deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[5.6].debian }}-pgdg main - # [Stretch] - 7.0: - deb: deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[7.0].debian }}-pgdg main - # [Buster] - 7.1: - deb: deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release[7.1].debian }}-pgdg main - pre: curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - - # [Buster] - 7.2: - deb: deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release[7.2].debian }}-pgdg main - pre: curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - - # [Bullseye] - all: - deb: deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release['all'].debian }}-pgdg main - pre: curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - - - -# ------------------------------------------------------------------------------------------------- -# Composer (PHP) definition -# ------------------------------------------------------------------------------------------------- - -# name: Name of the PHP Composer package -# link: [optional] Name of the binary to symlink to /usr/local/bin -# all: is generic version of defines -# 7.2: is specific version of defines -# disabled: [optional] Array of PHP versions for which to disable this module -# check: [optional] Include a check command to test if it was installed successfully -# version: Composer version: Either '1' or '2' for composer version -# -# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: -# version: [optional] Specific version of Ruby gem -# -composer_available: - asgardcms: - disabled: [5.2, 5.3, 5.4, 8.0, 8.1, 8.2] - check: asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' - name: asgardcms/asgardcms-installer - link: asgardcms - version: 2 - codeception: - disabled: [5.2, 5.3, 8.0, 8.1, 8.2] - check: codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' - name: codeception/codeception - link: codecept - version: 2 - lumen: - disabled: [5.2, 5.3, 5.4, 8.0, 8.1, 8.2] - check: lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' - name: laravel/lumen-installer - link: lumen - version: 2 - #photon: - # disabled: [5.2, 5.3, 5.4, 8.0, 8.1, 8.2] - # check: photon --version | grep -E 'Installer [0-9][.0-9]+' - # name: photoncms/installer - # link: photon - # version: 2 - prestissimo: - disabled: [5.2, 8.0, 8.1, 8.2] - name: hirak/prestissimo - version: 1 - - -# ------------------------------------------------------------------------------------------------- -# Gems (Ruby) definition -# ------------------------------------------------------------------------------------------------- - -# name: Name of the Ruby gem package -# all: is generic version of defines -# 7.2: is specific version of defines -# disabled: [optional] Array of PHP versions for which to disable this module -# check: [optional] Include a check command to test if it was installed successfully -# -# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: -# version: [optional] Specific version of Ruby gem -# -gem_available: - mixlib_config: - name: mixlib-config - all: - version: 2.2.4 - # Required by rb-inotify, as otherwise rb-inotify will pull ffi as a dependency in a - # version which is not supported by the ruby version (>= 2.3) - ffi: - name: ffi - disabled: [5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] - all: - version: 1.12.2 - rb_inotify: - name: rb-inotify - all: - version: 0.9.10 - mdl: - name: mdl - check: mdl --version | grep -E '[0-9][.0-9]+' - 8.2: - version: 0.5.0 - 8.1: - version: 0.5.0 - 8.0: - version: 0.5.0 - 7.4: - version: 0.5.0 - 7.3: - version: 0.5.0 - 7.2: - version: 0.5.0 - 7.1: - version: 0.5.0 - 7.0: - version: 0.5.0 - 5.6: - version: 0.5.0 - 5.5: - version: 0.5.0 - 5.4: - version: 0.5.0 - 5.3: - version: 0.5.0 - 5.2: - version: 0.5.0 - - -# ------------------------------------------------------------------------------------------------- -# npm (Node) definition -# ------------------------------------------------------------------------------------------------- - -# name: Name of the Node npm package -# all: is generic version of defines -# 7.2: is specific version of defines -# disabled: [optional] Array of PHP versions for which to disable this module -# check: [optional] Include a check command to test if it was installed successfully -# -# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: -# version: [optional] Specific version of Node npm package -# -npm_available: +# The following specifies how tools are being installed. +tools_available: angular_cli: - name: "@angular/cli" - check: ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' + disabled: [] + check: ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) + all: + type: npm + package: "@angular/cli" + binary: ng + version: + build_dep: [] + run_dep: [] + pre: + post: + asgardcms: + disabled: [5.2, 5.3, 5.4] + check: asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) + all: + type: composer + composer: 2 + package: asgardcms/asgardcms-installer + # https://github.com/AsgardCms/asgardcms-installer/issues/1 + version: dev-master + binary: asgardcms + build_dep: [] + run_dep: [] + pre: + post: + codeception: + disabled: [5.2, 5.3] + check: codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) + all: + type: composer + composer: 2 + package: codeception/codeception + # version: + binary: codecept + build_dep: [] + run_dep: [] + # pre: + # post: eslint: - name: eslint - check: eslint -v | grep -E '[0-9][.0-9]+' - grunt: - name: grunt - grunt_cli: - name: grunt-cli - check: grunt --version | grep -E '[0-9][.0-9]+' - gulp: - name: gulp - check: gulp --version | grep -E '[0-9][.0-9]+' - jsonlint: - name: jsonlint - check: jsonlint --version | grep -E '[0-9][.0-9]+' - pm2: - name: pm2 - check: pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' - mdlint: - name: mdlint - check: mdlint --version | grep -E '[0-9][.0-9]+' - sass: - name: sass - check: sass --version | grep -E '[0-9][.0-9]+' - stylelint: - name: stylelint - check: stylelint --version | grep -E '[0-9][.0-9]+' - vue_cli: - name: "@vue/cli" - check: vue --version | grep -E '[0-9][.0-9]+' - vue_cli_service_global: - name: "@vue/cli-service-global" - webpack: - name: webpack - webpack_cli: - name: webpack-cli - check: webpack --version | grep -E '[0-9][.0-9]+' - - -# ------------------------------------------------------------------------------------------------- -# pip (Python) definition -# ------------------------------------------------------------------------------------------------- - -# name: Name of the Python pip package -# all: is generic version of defines -# 7.2: is specific version of defines -# disabled: [optional] Array of PHP versions for which to disable this module -# check: [optional] Include a check command to test if it was installed successfully -# -# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: -# version: [optional] Specific version of Python pip package -# -pip_available: - ansible: - name: ansible + disabled: [] + check: eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) all: - version: 3.4.0 - check: ansible --version | grep -E '^ansible [0-9][.0-9]+$' - yamllint: - name: yamllint - check: yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' - yq: - name: yq - check: yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' - - -# ------------------------------------------------------------------------------------------------- -# Software definition -# ------------------------------------------------------------------------------------------------- - -# all: is generic version of defines -# 7.2: is specific version of defines -# disabled: [optional] Array of PHP versions for which to disable this module -# check: [optional] Include a check command to test if it was installed successfully -# -# all, 7.2, 7.1, 7.0, 5.6, 5.5, 5.4: -# pre: [optional] Run command before 'command:' statement -# command: Command to execute -# post: [optional] Run command after 'command:' statement -# -software_available: - # Composer is a dependency for others - composer: - disabled: [5.2] - check: composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' - 5.3: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.2.x" \ - post: | - ln -sf /usr/local/bin/composer-1 /usr/local/bin/composer \ - 5.4: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.2.x" \ - 5.5: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.2.x" \ - 5.6: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.2.x" \ - 7.0: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.2.x" \ - 7.1: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.2.x" \ + type: npm + package: "eslint" + binary: eslint + version: + build_dep: [] + run_dep: [] + pre: + post: + jq: + disabled: [] + check: jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) all: - pre: | - COMPOSER_1_VERSION="latest-1.x" \ - && COMPOSER_2_VERSION="latest-2.x" \ - command: | - curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ - && chmod +x /usr/local/bin/composer-1 \ - && chmod +x /usr/local/bin/composer-2 \ - post: | - ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - # pip is a dependency for others - pip: - 5.2: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - 5.3: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - 5.4: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - 5.5: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - 5.6: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - 7.0: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - 7.1: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + type: apt + package: jq + lumen: + disabled: [5.2, 5.3, 5.4] + check: lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) + all: + type: composer + composer: 2 + package: laravel/lumen-installer + # version: + binary: lumen + build_dep: [] + run_dep: [] + # pre: + # post: + mdl: + disabled: [] + check: mdl --version | grep -E '[.0-9]+' || (mdl --version; false) + all: + type: rubygem + package: mdl + # version: + build_dep: [ruby-dev] + run_dep: [ruby] + # pre: + # post: 7.2: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - all: - command: | - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython3-dev \ - python3-distutils \ - && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* \ - \ - && curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ - # nvm is a dependency for others - nvm: - check: | - su -c '. {{ nvm_home }}/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - && su -c '. {{ nvm_home }}/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - 5.2: + type: rubygem + version: 0.11.0 pre: | - NODE_VERSION="17" \ - 5.3: - pre: | - NODE_VERSION="17" \ - 5.4: - pre: | - NODE_VERSION="17" \ - 5.5: - pre: | - NODE_VERSION="17" \ - 5.6: - pre: | - NODE_VERSION="17" \ - 7.0: - pre: | - NODE_VERSION="17" \ - all: - pre: | - NODE_VERSION="{{ node_version }}" \ - command: | - NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ - )" \ - && mkdir -p {{ nvm_home }} \ - && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="{{ nvm_home }}" bash \ - \ - && { \ - echo 'export NVM_DIR="{{ nvm_home }}"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ - } >> /home/devilbox/.bashrc \ - \ - && chown -R devilbox:devilbox "{{ nvm_home }}" \ - # Install latest and LTS version and yarn - post: | - su -c ". {{ nvm_home }}/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ - && su -c ". {{ nvm_home }}/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ - && su -c ". {{ nvm_home }}/nvm.sh; corepack enable" devilbox \ - \ - && chmod 0777 {{ nvm_home }} \ - && find {{ nvm_home }} -type f -print0 | xargs -n1 -0 chmod go+w \ - && find {{ nvm_home }} -type d -print0 | xargs -n1 -0 chmod 0777 \ - ### - ### PostgrSQL Command line client - ### - # 5.2: (amd64) - # 5.3: (amd64) - # 5.4: (amd64) - # 5.5: (amd64) - # 5.6: (amd64) - # 7.0: (amd64) - # 7.1: (amd64, arm64) - # 7.2: (amd64, arm64) - # 7.3: (amd64, arm64) - # 7.4: (amd64, arm64) - # 8.0: (amd64, arm64) - # 8.1: (amd64, arm64) - # 8.2: (amd64, arm64) - pgsql_client: - check: | - if echo '{{ php_version }}' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ - else \ - pg_isready --version; \ - fi \ - 5.2: - pre: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ - fi \ - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ - fi \ - 5.3: - pre: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ - fi \ - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ - fi \ - 5.4: - pre: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ - fi \ - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ - fi \ - 5.5: - pre: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ - fi \ - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ - fi \ - 5.6: - pre: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ - fi \ - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ - fi \ - 7.0: - pre: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ - fi \ - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ - fi \ - all: - pre: | - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://apt.postgresql.org/pub/repos/apt/ {{ os_release[php_version].debian }}-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update \ - command: | - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - post: rm -rf /var/lib/apt/lists/* - ### - ### MongoDB Command line client - ### - # 5.2: mongodb-clients (amd64) - # 5.3: mongodb-clients (amd64) - # 5.4: mongodb-clients (amd64) - # 5.5: mongodb-clients (amd64) - # 5.6: mongodb-clients & mongo-tools (amd64, arm64) - # 7.0: mongodb-clients & mongo-tools (amd64, arm64) - # 7.1: mongodb-org-(tools|shell) (amd64, arm64) - # 7.2: mongodb-org-(tools|shell) (amd64, arm64) - # 7.3: mongodb-org-(tools|shell) (amd64, arm64) - # 7.4: mongodb-org-(tools|shell) (amd64, arm64) - # 8.0: mongodb-org-(tools|shell) (amd64, arm64) - # 8.1: mongodb-org-(tools|shell) (amd64, arm64) - # 8.2: mongodb-org-(tools|shell) (amd64, arm64) - mongo_client: - check: | - if echo '{{ php_version }}' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ - else \ - mongofiles --version; \ - fi \ - 5.2: - pre: apt-get update - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ - fi \ - 5.3: - pre: apt-get update - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ - fi \ - 5.4: - pre: apt-get update - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ - fi \ - 5.5: - pre: apt-get update - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ - fi \ - 5.6: - pre: apt-get update - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients \ - mongo-tools; \ - else \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ - fi \ - 7.0: - pre: apt-get update - command: | - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients \ - mongo-tools; \ - else \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ - fi \ - all: - pre: | - APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ - && echo "deb http://repo.mongodb.org/apt/ubuntu {{ os_release[php_version].ubuntu }}/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ - && apt-get update \ - command: | - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - post: rm -rf /var/lib/apt/lists/* - awesomeci: - check: regex-grep --version | grep -E '[0-9][.0-9]+' - all: - command: | - git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ - && cd /usr/local/src/awesome-ci \ - && git checkout $(git describe --abbrev=0 --tags) \ - && ./configure --prefix=/usr/local \ - && make install \ - && cd / \ - && rm -rf /usr/local/src/awesome-ci \ - deployer: - disabled: [5.2, 5.3] - check: dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' - 5.4: - command: curl -sS -k -L --fail https://deployer.org/releases/v3.3.0/deployer.phar -L -o /usr/local/bin/dep - post: chmod +x /usr/local/bin/dep - 5.5: - command: curl -sS -k -L --fail https://deployer.org/releases/v4.3.4/deployer.phar -L -o /usr/local/bin/dep - post: chmod +x /usr/local/bin/dep - 5.6: - command: curl -sS -k -L --fail https://deployer.org/releases/v4.3.4/deployer.phar -L -o /usr/local/bin/dep - post: chmod +x /usr/local/bin/dep - 7.0: - command: curl -sS -k -L --fail https://deployer.org/releases/v6.7.0/deployer.phar -L -o /usr/local/bin/dep - post: chmod +x /usr/local/bin/dep + gem install chef-utils -v 16.6.14 \ 7.1: - command: curl -sS -k -L --fail https://deployer.org/releases/v6.7.0/deployer.phar -L -o /usr/local/bin/dep - post: chmod +x /usr/local/bin/dep - all: - command: curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep - post: chmod +x /usr/local/bin/dep - drush7: - disabled: [5.2, 8.0, 8.1, 8.2] - check: drush7 --version | grep -E '7[.0-9]+\s*$' - all: + type: rubygem + version: 0.11.0 pre: | - git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ - && cd /usr/local/src/drush7 \ - && git checkout 7.4.0 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ - && su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ - && ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ - && rm -rf /usr/local/src/drush7/.git \ - && rm -rf /usr/local/src/drush7/docs \ - && rm -rf /usr/local/src/drush7/examples \ - && rm -rf /usr/local/src/drush7/misc \ - drush8: - disabled: [5.2, 5.3, 8.0, 8.1, 8.2] - check: drush8 --version | grep -E '8[.0-9]+\s*$' - all: - pre: | - git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ - && cd /usr/local/src/drush8 \ - && git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ - && su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ - && ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ - && rm -rf /usr/local/src/drush8/.git \ - && rm -rf /usr/local/src/drush8/docs \ - && rm -rf /usr/local/src/drush8/examples \ - && rm -rf /usr/local/src/drush8/misc \ - drush9: - disabled: [5.2, 5.3, 5.4, 5.5, 7.0, 7.1, 8.0, 8.1, 8.2] - check: drush9 --version | grep -E '9[.0-9]+\s*$' - all: - pre: | - git clone https://github.com/drush-ops/drush.git /usr/local/src/drush9 \ - && cd /usr/local/src/drush9 \ - && git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/9[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush9 \ - && su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush9 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress' \ - && ln -s /usr/local/src/drush9/drush /usr/local/bin/drush9 \ - && rm -rf /usr/local/src/drush9/.git \ - && rm -rf /usr/local/src/drush9/docs \ - && rm -rf /usr/local/src/drush9/examples \ - && rm -rf /usr/local/src/drush9/misc \ - drupalconsole: - disabled: [5.2, 5.3, 5.4, 7.0, 7.1, 8.0, 8.1, 8.2] # TODO: re-enable for 8.0 (currently errors) - check: drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' - 5.5: - pre: DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" - 5.6: - pre: DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" + gem install chef-utils -v 16.6.14 \ 7.0: - pre: DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" - 7.1: - pre: DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" - all: - pre: DURL="$(curl -s https://api.github.com/repos/hechoendrupal/drupal-console-launcher/releases/latest | awk -F\" '/download.*.phar/{print $(NF-1)}' | head -1)" - command: curl -sS -L --fail "${DURL}" -L -o /usr/local/bin/drupal - post: chmod +x /usr/local/bin/drupal - gitflow: - check: git-flow version | grep -E '[0-9][.0-9]+' - all: - command: | - git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ - && cd /tmp/gitflow \ - && make install \ - && cd / && rm -rf /tmp/gitflow \ - homebrew: - all: - command: | - git clone https://github.com/Homebrew/brew.git /usr/local/src/brew \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/brew \ - && v="${BASH_PROFILE}" su ${MY_USER} -c -p \ - 'echo "PATH=/usr/local/src/brew/bin:/usr/local/src/brew/sbin:/usr/bin:/usr/sbin:/bin:/sbin" >> /home/devilbox/${v}' \ - && v="${BASH_PROFILE}" su ${MY_USER} -c -p \ - 'echo "export MANPATH=/usr/local/src/brew/manpages:${MANPATH}" >> /home/devilbox/${v}' \ - && v="${BASH_PROFILE}" su ${MY_USER} -c -p \ - 'echo "export INFOPATH=/usr/local/src/brew/manpages:${INFOPATH}" >> /home/devilbox/${v}' \ - && su - ${MY_USER} -c '/usr/local/src/brew/bin/brew config' \ - laravel: - check: laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' - disabled: [5.2, 5.3, 8.2] + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + 5.6: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + 5.5: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ 5.4: + type: rubygem + version: 0.5.0 pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout v1.3.7 \ - post: - ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel - 5.5: - pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout v2.0.0 \ - post: - ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel - 5.6: - pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout v2.0.0 \ - post: - ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel - 7.0: - pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout v2.0.0 \ - post: - ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel - 7.1: - pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout $(git tag | grep '^v2\.3\.' | sort -u | tail -1) \ - post: - ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel - 7.2: - pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout v4.0.0 \ - post: - ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel - all: - pre: | - git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ - && cd /usr/local/src/laravel-installer \ - && git checkout $(git describe --abbrev=0 --tags) \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ - && su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ - && rm -rf /usr/local/src/laravel-installer/laravel/.git \ - post: - ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel - linkcheck: - check: linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' - all: - command: | - curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ - && chmod +x /usr/local/bin/linkcheck \ - mhsendmail: - all: - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ - fi \ - mysqldumpsecure: - check: mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' - all: - command: | - git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ - && cd /usr/local/src/mysqldump-secure \ - && git checkout $(git describe --abbrev=0 --tags) \ - && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ - && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ - && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ - && touch /var/log/mysqldump-secure.log \ - && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ - && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ - && chmod 0400 /etc/mysqldump-secure.conf \ - && chmod 0400 /etc/mysqldump-secure.cnf \ - && chmod 0644 /var/log/mysqldump-secure.log \ - && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ - && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ - && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ - && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ - && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ - && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ - && cd / \ - && rm -rf /usr/local/src/mysqldump-secure \ - phalcon: - disabled: [5.2, 7.4, 8.0, 8.1, 8.2] - check: phalcon commands | grep -E '[0-9][.0-9]+' + gem install mixlib-config -v 2.2.4 \ 5.3: + type: rubygem + version: 0.5.0 pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout v2.0.7 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -s /usr/local/src/phalcon-devtools/phalcon.php /usr/local/bin/phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - 5.4: - pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout v2.0.9 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -sf /usr/local/src/phalcon-devtools/phalcon.php /usr/local/bin/phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - 5.5: - pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout v3.4.11 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ - && chmod +x /usr/local/bin/phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - 5.6: - pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout v3.4.11 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ - && chmod +x /usr/local/bin/phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - 7.0: - pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout v3.4.11 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ - && chmod +x /usr/local/bin/phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - 7.1: - pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout v3.4.11 \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ - && chmod +x /usr/local/bin/phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - all: - pre: | - git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ - && cd /usr/local/src/phalcon-devtools \ - && git checkout $(git describe --abbrev=0 --tags) \ - && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install \ - command: | - chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ - && su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ - && ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ - && chmod +x phalcon \ - && cd / \ - && rm -rf /usr/local/src/phalcon-devtools/.git \ - phpcs: - check: phpcs --version | grep -E 'version [0-9][.0-9]+' + gem install mixlib-config -v 2.2.4 \ 5.2: - command: | - curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcs.phar > /usr/local/bin/phpcs \ - && chmod +x /usr/local/bin/phpcs \ - 5.3: - command: | - curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcs.phar > /usr/local/bin/phpcs \ - && chmod +x /usr/local/bin/phpcs \ - all: - command: | - curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ - && chmod +x /usr/local/bin/phpcs \ - phpcbf: - check: phpcbf --version | grep -E 'version [0-9][.0-9]+' - 5.2: - command: | - curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcbf.phar > /usr/local/bin/phpcbf \ - && chmod +x /usr/local/bin/phpcbf \ - 5.3: - command: | - curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcbf.phar > /usr/local/bin/phpcbf \ - && chmod +x /usr/local/bin/phpcbf \ - all: - command: | - curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ - && chmod +x /usr/local/bin/phpcbf \ - php-cs-fixer: - disabled: [5.2, 8.2] - check: php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' - 5.3: - command: | - curl -sS -k -L --fail https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.2.19/php-cs-fixer.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 5.4: - command: | - curl -sS -k -L --fail https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.2.19/php-cs-fixer.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 5.5: - command: | - curl -sS -k -L --fail https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.2.19/php-cs-fixer.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 5.6: - command: | - curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 7.0: - command: | - curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 7.1: - command: | - curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 7.2: - command: | - curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - 7.3: - command: | - curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - all: - command: | - curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v3.phar > /usr/local/bin/php-cs-fixer \ - && chmod +x /usr/local/bin/php-cs-fixer \ - phpmd: - disabled: [5.2] - check: phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' - all: - command: | - curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ - && mv phpmd.phar /usr/local/bin/phpmd \ - && chmod +x /usr/local/bin/phpmd \ + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ phpunit: - disabled: [5.2, 8.0, 8.1, 8.2] - check: phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' - 5.3: - command: | - curl -sS -k -L --fail https://phar.phpunit.de/phpunit-4.phar > /usr/local/bin/phpunit \ - && chmod +x /usr/local/bin/phpunit \ - 5.4: - command: | - curl -sS -k -L --fail https://phar.phpunit.de/phpunit-4.phar > /usr/local/bin/phpunit \ - && chmod +x /usr/local/bin/phpunit \ - 5.5: - command: | - curl -sS -k -L --fail https://phar.phpunit.de/phpunit-4.phar > /usr/local/bin/phpunit \ - && chmod +x /usr/local/bin/phpunit \ - 5.6: - command: | - curl -sS -k -L --fail https://phar.phpunit.de/phpunit-5.phar > /usr/local/bin/phpunit \ - && chmod +x /usr/local/bin/phpunit \ + disabled: [5.2] + check: phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) + all: + type: custom + command: curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit + build_dep: [] + run_dep: [] + pre: PHP_UNIT_VERSION="9" + post: chmod +x /usr/local/bin/phpunit + 7.2: + type: custom + pre: PHP_UNIT_VERSION="8" + 7.1: + type: custom + pre: PHP_UNIT_VERSION="7" 7.0: - command: | - curl -sS -k -L --fail https://phar.phpunit.de/phpunit-6.phar > /usr/local/bin/phpunit \ - && chmod +x /usr/local/bin/phpunit \ - all: - command: | - curl -sS -k -L --fail https://phar.phpunit.de/phpunit-7.phar > /usr/local/bin/phpunit \ - && chmod +x /usr/local/bin/phpunit \ - symfony: - disabled: [5.2, 5.3] - check: symfony -V | grep -Ei 'version\s[0-9][.0-9]+' - all: - pre: VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" - command: | - curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ - && dpkg -i /tmp/symfonycli.deb \ - && rm -f /tmp/symfonycli.deb \ - wkhtmltopdf: - check: if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi - 5.2: - pre: VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ - 5.3: - pre: VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ - 5.4: - pre: VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ - 5.5: - pre: VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ + type: custom + pre: PHP_UNIT_VERSION="6" 5.6: - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ - 7.0: - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ + type: custom + pre: PHP_UNIT_VERSION="5" + 5.5: + type: custom + pre: PHP_UNIT_VERSION="4" + 5.4: + type: custom + pre: PHP_UNIT_VERSION="4" + 5.3: + type: custom + pre: PHP_UNIT_VERSION="4" + prestissimo: + disabled: [5.2] all: - pre: VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" - command: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ - fi \ + type: composer + composer: 1 + package: hirak/prestissimo + # version: + # binary: + build_dep: [] + run_dep: [] + # pre: + # post: + pwncat: + disabled: [] + check: pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) + all: + type: pip + version: + build_dep: [] + run_dep: [] + pre: post: | - if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ - fi \ + ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ wpcli: disabled: [5.2] - check: wp --allow-root --version | grep -E '[0-9][.0-9]+' - 5.3: - command: curl -sS -L --fail https://github.com/wp-cli/wp-cli/releases/download/v1.5.1/wp-cli-1.5.1.phar -L -o /usr/local/bin/wp - post: chmod +x /usr/local/bin/wp - 5.4: - command: curl -sS -L --fail https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar -L -o /usr/local/bin/wp + check: wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) + all: + type: custom + command: curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp + build_dep: [] + run_dep: [] + pre: WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" post: chmod +x /usr/local/bin/wp 5.5: - command: curl -sS -L --fail https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar -L -o /usr/local/bin/wp - post: chmod +x /usr/local/bin/wp + type: custom + pre: WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar" + 5.4: + type: custom + pre: WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar" + 5.3: + type: custom + pre: WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v1.5.1/wp-cli-1.5.1.phar" + yamllint: + disabled: [] + check: yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) all: - command: curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp - post: chmod +x /usr/local/bin/wp + type: pip + version: + build_dep: [] + run_dep: [] + # pre: + # post: + yq: + disabled: [] + check: yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) + all: + type: pip + version: + build_dep: [] + run_dep: [] + pre: + post: diff --git a/.ansible/jinja2/macros-work.j2 b/.ansible/jinja2/macros-work.j2 new file mode 100644 index 0000000..5e15dff --- /dev/null +++ b/.ansible/jinja2/macros-work.j2 @@ -0,0 +1,273 @@ +{################################################################################################## +# IMPORTS +##################################################################################################} +{% import './jinja2/macros.j2' as fn %} + + + +{################################################################################################## +# GENERIC MACROS +##################################################################################################} + +{#- +### +### Check if not disabled +### +### Returns 'true' string if not disabled, otherwise returns nothing +### +-#} +{%- macro is_not_disabled(php, name, items) -%} + {%- if ('disabled' not in items[name]) or (php not in items[name]['disabled']) -%} + {{- 'true' -}} + {%- endif -%} +{%- endmacro -%} + +{#- +### +### Get 'type' +### +### Returns type string +### +-#} +{%- macro get_type(php, name, items) -%} + {{- fn.get_val(php, name, items, 'type', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'pre' +### +### Returns pre string +### +-#} +{%- macro get_pre(php, name, items) -%} + {{- fn.get_val(php, name, items, 'pre', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'post' +### +### Returns post string +### +-#} +{%- macro get_post(php, name, items) -%} + {{- fn.get_val(php, name, items, 'post', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'build_dep' +### +### Returns json string (jsonified list) of build_dep (use '| to_json' to eval) +### +-#} +{%- macro get_build_dep(php, name, items) -%} + {{- fn.get_list_if_enabled(php, name, items, 'build_dep') -}} +{%- endmacro -%} + +{#- +### +### Get 'run_dep' +### +### Returns json string (jsonified list) of run_dep (use '| to_json' to eval) +### +-#} +{%- macro get_run_dep(php, name, items) -%} + {{- fn.get_list_if_enabled(php, name, items, 'run_dep') -}} +{%- endmacro -%} + + + +{################################################################################################## +# TOOLS SPECIFIC MACROS +##################################################################################################} + +{# --------------------------------------------- REPO ----------------------------------------- -#} +{#- +### +### Get 'deb' +### type: repo +### +-#} +{%- macro tool_repo_get_deb(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'deb', 'repo', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'key' +### type: repo +### +-#} +{%- macro tool_repo_get_key(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'key', 'repo', '') -}} +{%- endmacro -%} + + +{# --------------------------------------------- CUSTOM --------------------------------------- -#} +{#- +### +### Get 'command' +### type: custom +### +-#} +{%- macro tool_custom_get_command(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'command', 'custom', '') -}} +{%- endmacro -%} + + +{# --------------------------------------------- NPM ------------------------------------------ -#} +{#- +### +### Get 'package' +### type: npm +### +-#} +{%- macro tool_npm_get_package(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'package', 'npm', name) -}} +{%- endmacro -%} + +{#- +### +### Get 'version' +### type: npm +### +-#} +{%- macro tool_npm_get_version(php, name, items) -%} + {%- set version = fn.get_val_by_type(php, name, items, 'version', 'npm', '') -%} + {%- if version | length -%} + {{- '@' ~ version -}} + {%- else -%} + {{- '' -}} + {%- endif -%} +{%- endmacro -%} + +{#- +### +### Get 'binary' +### type: npm +### +-#} +{%- macro tool_npm_get_binary(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'binary', 'npm', '') -}} +{%- endmacro -%} + + +{# --------------------------------------------- COMPOSER ------------------------------------- -#} + +{#- +### +### Get 'composer' +### type: composer +### +-#} +{%- macro tool_composer_get_composer(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'composer', 'composer', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'package' +### type: composer +### +-#} +{%- macro tool_composer_get_package(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'package', 'composer', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'version' +### type: composer +### +-#} +{%- macro tool_composer_get_version(php, name, items) -%} + {%- set version = fn.get_val_by_type(php, name, items, 'version', 'composer', '') -%} + {%- if version | length -%} + {{- ':' ~ version -}} + {%- else -%} + {{- '' -}} + {%- endif -%} +{%- endmacro -%} + +{#- +### +### Get 'binary' +### type: composer +### +-#} +{%- macro tool_composer_get_binary(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'binary', 'composer', '') -}} +{%- endmacro -%} + + +{# --------------------------------------------- RUBYGEM -------------------------------------- -#} + +{#- +### +### Get 'package' +### type: rubygem +### +-#} +{%- macro tool_rubygem_get_package(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'package', 'rubygem', '') -}} +{%- endmacro -%} + +{#- +### +### Get 'version' +### type: rubygem +### +-#} +{%- macro tool_rubygem_get_version(php, name, items) -%} + {%- set version = fn.get_val_by_type(php, name, items, 'version', 'rubygem', '') -%} + {%- if version | length -%} + {{- ' -v ' ~ version -}} + {%- else -%} + {{- '' -}} + {%- endif -%} +{%- endmacro -%} + + +{# --------------------------------------------- PIP ------------------------------------------ -#} + +{#- +### +### Get 'package' +### type: pip +### +-#} +{%- macro tool_pip_get_package(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'package', 'pip', name) -}} +{%- endmacro -%} + +{#- +### +### Get 'version' +### type: pip +### +-#} +{%- macro tool_pip_get_version(php, name, items) -%} + {%- set version = fn.get_val_by_type(php, name, items, 'version', 'pip', '') -%} + {%- if version | length -%} + {{- '==' ~ version -}} + {%- else -%} + {{- '' -}} + {%- endif -%} +{%- endmacro -%} + + +{# --------------------------------------------- APT ------------------------------------------ -#} + +{#- +### +### Get 'package' +### type: apt +### +-#} +{%- macro tool_apt_get_package(php, name, items) -%} + {%- if is_not_disabled(php, name, items) -%} + {{- fn.get_val_by_type(php, name, items, 'package', 'apt', '') -}} + {%- endif -%} +{%- endmacro -%} diff --git a/.ansible/jinja2/macros.j2 b/.ansible/jinja2/macros.j2 new file mode 100644 index 0000000..b61043d --- /dev/null +++ b/.ansible/jinja2/macros.j2 @@ -0,0 +1,90 @@ +{################################################################################################## +# HELPER MACROS +##################################################################################################} + +{# +### Get generic string value of key if type value matches. +### +### php: The PHP Version +### name: The item name +### items: The items_available list +### key: The key to retrieve the value for +### type: The type key must match this type string +### default: Default value to return if none was found +#} +{%- macro get_val_by_type(php, name, items, key, type, default='' ) -%} + {#- Default return value -#} + {%- set result = default -%} + + {#- PHP Version specific -#} + {%- if php in items[name] and items[name][php]['type'] == type -%} + {%- if key in items[name][php] and items[name][php][key] -%} + {%- set result = items[name][php][key] -%} + {%- elif key in items[name]['all'] and items[name]['all'][key] -%} + {%- set result = items[name]['all'][key] -%} + {%- endif -%} + {#- Defined in 'all' -#} + {%- elif 'all' in items[name] and items[name]['all']['type'] == type -%} + {%- if key in items[name]['all'] and items[name]['all'][key] -%} + {%- set result = items[name]['all'][key] -%} + {%- endif -%} + {%- endif -%} + + {{- result -}} +{%- endmacro -%} + +{#- +### Get generic string value of key. +### +### php: The PHP Version +### name: The item name +### items: The items_available list +### key: The key to retrieve the value for +### default: Default value to return if none was found +-#} +{%- macro get_val(php, name, items, key, default='') -%} + {%- if php in items[name] and key in items[name][php] and items[name][php][key] -%} + {{- items[name][php][key] -}} + {%- elif 'all' in items[name] and key in items[name]['all'] and items[name]['all'][key] -%} + {{- items[name]['all'][key] -}} + {%- else -%} + {{- default -}} + {%- endif -%} +{%- endmacro -%} + +{#- +### Get generic list value (space separated) of not disabled PHP versions. +### +### Returns jsonified string of a list. +### +### Usage: +### {%- set list = [] -%} +### {%- for val in get_enabled_list(php_version, item, items_available) | from_json -%} +### {%- if val -%} +### {{- list.append(val) -}} +### {%- endif -%} +### {%- endfor -%} +### +### php: The PHP Version +### name: The item name +### items: The items_available list +### key: The key to retrieve the value for +-#} +{%- macro get_list_if_enabled(php, name, items, key) -%} + {%- set list = [] %} + {# Not disabled #} + {%- if ('disabled' not in items[name]) or (php not in items[name]['disabled']) -%} + {#- Version specific build dependency available? -#} + {%- if php in items[name] and key in items[name][php] -%} + {%- for val in items[name][php][key] -%} + {{- list.append(val) -}} + {%- endfor -%} + {#- Generic build dependency available? -#} + {%- elif 'all' in items[name] and key in items[name]['all'] -%} + {%- for val in items[name]['all'][key] -%} + {{- list.append(val) -}} + {%- endfor -%} + {%- endif -%} + {%- endif -%} + {{- list | to_json -}} +{%- endmacro -%} diff --git a/.github/workflows/action-schedule_master.yml b/.github/workflows/action-schedule_master.yml index ca76c76..4086e1c 100644 --- a/.github/workflows/action-schedule_master.yml +++ b/.github/workflows/action-schedule_master.yml @@ -20,14 +20,14 @@ on: jobs: # ----------------------------------------------------------------------------------------------- - # (1/8) Determine parameter settings + # (1/9) Determine parameter settings # ----------------------------------------------------------------------------------------------- params: uses: ./.github/workflows/params-nightly_master.yml # ----------------------------------------------------------------------------------------------- - # (2/8) Configure Build and Deploy Matrices + # (2/9) Configure Build and Deploy Matrices # ----------------------------------------------------------------------------------------------- configure: needs: [params] @@ -43,7 +43,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (3/8) Build & Test base + # (3/9) Build & Test base # ----------------------------------------------------------------------------------------------- build-base: needs: @@ -72,7 +72,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (4/8) Build & Test mods + # (4/9) Build & Test mods # ----------------------------------------------------------------------------------------------- build-mods: needs: @@ -101,7 +101,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (5/8) Build & Test prod + # (5/9) Build & Test prod # ----------------------------------------------------------------------------------------------- build-prod: needs: @@ -130,9 +130,9 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (6/8) Build & Test work + # (6/9) Build & Test slim # ----------------------------------------------------------------------------------------------- - build-work: + build-slim: needs: - configure - build-prod @@ -143,9 +143,38 @@ jobs: upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} - stage: work + stage: slim stage_prev: prod + test-slim: + needs: + - configure + - build-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master + with: + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: slim + + + # ----------------------------------------------------------------------------------------------- + # (7/9) Build & Test work + # ----------------------------------------------------------------------------------------------- + build-work: + needs: + - configure + - build-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master + with: + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + run_tests: false + upload_artifact: true + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: work + stage_prev: slim + test-work: needs: - configure @@ -159,14 +188,15 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (7/8) Push images + # (8/9) Push images # ----------------------------------------------------------------------------------------------- push-base: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -183,8 +213,9 @@ jobs: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -201,8 +232,9 @@ jobs: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -215,12 +247,32 @@ jobs: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + push-slim: + needs: + - configure + - test-base + - test-mods + - test-prod + - test-slim + - test-work + uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master + with: + can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: slim + secrets: + dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} + dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + push-work: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -235,7 +287,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (8/8) Push Manifests + # (9/9) Push Manifests # ----------------------------------------------------------------------------------------------- manifest-base: needs: @@ -282,6 +334,21 @@ jobs: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + manifest-slim: + needs: + - configure + - push-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master + with: + can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_deploy }} + versions: ${{ needs.configure.outputs.versions }} + stage: slim + secrets: + dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} + dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + manifest-work: needs: - configure diff --git a/.github/workflows/action-schedule_tags.yml b/.github/workflows/action-schedule_tags.yml index 835d0f6..9fa449c 100644 --- a/.github/workflows/action-schedule_tags.yml +++ b/.github/workflows/action-schedule_tags.yml @@ -20,14 +20,14 @@ on: jobs: # ----------------------------------------------------------------------------------------------- - # (1/8) Determine parameter settings + # (1/9) Determine parameter settings # ----------------------------------------------------------------------------------------------- params: uses: ./.github/workflows/params-nightly_tags.yml # ----------------------------------------------------------------------------------------------- - # (2/8) Configure Build and Deploy Matrices + # (2/9) Configure Build and Deploy Matrices # ----------------------------------------------------------------------------------------------- configure: needs: [params] @@ -43,7 +43,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (3/8) Build & Test base + # (3/9) Build & Test base # ----------------------------------------------------------------------------------------------- build-base: needs: @@ -72,7 +72,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (4/8) Build & Test mods + # (4/9) Build & Test mods # ----------------------------------------------------------------------------------------------- build-mods: needs: @@ -101,7 +101,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (5/8) Build & Test prod + # (5/9) Build & Test prod # ----------------------------------------------------------------------------------------------- build-prod: needs: @@ -130,9 +130,9 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (6/8) Build & Test work + # (6/9) Build & Test slim # ----------------------------------------------------------------------------------------------- - build-work: + build-slim: needs: - configure - build-prod @@ -143,9 +143,38 @@ jobs: upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} - stage: work + stage: slim stage_prev: prod + test-slim: + needs: + - configure + - build-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master + with: + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: slim + + + # ----------------------------------------------------------------------------------------------- + # (7/9) Build & Test work + # ----------------------------------------------------------------------------------------------- + build-work: + needs: + - configure + - build-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master + with: + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + run_tests: false + upload_artifact: true + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: work + stage_prev: slim + test-work: needs: - configure @@ -159,14 +188,15 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (7/8) Push images + # (8/9) Push images # ----------------------------------------------------------------------------------------------- push-base: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -183,8 +213,9 @@ jobs: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -201,8 +232,9 @@ jobs: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -215,12 +247,32 @@ jobs: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + push-slim: + needs: + - configure + - test-base + - test-mods + - test-prod + - test-slim + - test-work + uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master + with: + can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: slim + secrets: + dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} + dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + push-work: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -235,7 +287,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (8/8) Push Manifests + # (9/9) Push Manifests # ----------------------------------------------------------------------------------------------- manifest-base: needs: @@ -282,6 +334,21 @@ jobs: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + manifest-slim: + needs: + - configure + - push-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master + with: + can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_deploy }} + versions: ${{ needs.configure.outputs.versions }} + stage: slim + secrets: + dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} + dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + manifest-work: needs: - configure diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index 11ddf9d..7756b71 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -20,14 +20,14 @@ on: jobs: # ----------------------------------------------------------------------------------------------- - # (1/8) Determine parameter settings + # (1/9) Determine parameter settings # ----------------------------------------------------------------------------------------------- params: uses: ./.github/workflows/params.yml # ----------------------------------------------------------------------------------------------- - # (2/8) Configure Build and Deploy Matrices + # (2/9) Configure Build and Deploy Matrices # ----------------------------------------------------------------------------------------------- configure: needs: [params] @@ -43,7 +43,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (3/8) Build & Test base + # (3/9) Build & Test base # ----------------------------------------------------------------------------------------------- build-base: needs: @@ -72,7 +72,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (4/8) Build & Test mods + # (4/9) Build & Test mods # ----------------------------------------------------------------------------------------------- build-mods: needs: @@ -101,7 +101,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (5/8) Build & Test prod + # (5/9) Build & Test prod # ----------------------------------------------------------------------------------------------- build-prod: needs: @@ -130,9 +130,9 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (6/8) Build & Test work + # (6/9) Build & Test slim # ----------------------------------------------------------------------------------------------- - build-work: + build-slim: needs: - configure - build-prod @@ -143,9 +143,38 @@ jobs: upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} - stage: work + stage: slim stage_prev: prod + test-slim: + needs: + - configure + - build-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master + with: + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: slim + + + # ----------------------------------------------------------------------------------------------- + # (7/9) Build & Test work + # ----------------------------------------------------------------------------------------------- + build-work: + needs: + - configure + - build-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master + with: + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + run_tests: false + upload_artifact: true + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: work + stage_prev: slim + test-work: needs: - configure @@ -159,14 +188,15 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (7/8) Push images + # (8/9) Push images # ----------------------------------------------------------------------------------------------- push-base: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -183,8 +213,9 @@ jobs: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -201,8 +232,9 @@ jobs: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -215,12 +247,32 @@ jobs: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + push-slim: + needs: + - configure + - test-base + - test-mods + - test-prod + - test-slim + - test-work + uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master + with: + can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_build }} + artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} + stage: slim + secrets: + dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} + dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + push-work: needs: - configure - test-base - - test-prod - test-mods + - test-prod + - test-slim - test-work uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master with: @@ -235,7 +287,7 @@ jobs: # ----------------------------------------------------------------------------------------------- - # (8/8) Push Manifests + # (9/9) Push Manifests # ----------------------------------------------------------------------------------------------- manifest-base: needs: @@ -282,6 +334,21 @@ jobs: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + manifest-slim: + needs: + - configure + - push-slim + uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master + with: + can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} + has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} + matrix: ${{ needs.configure.outputs.matrix_deploy }} + versions: ${{ needs.configure.outputs.versions }} + stage: slim + secrets: + dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} + dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} + manifest-work: needs: - configure diff --git a/Dockerfiles/slim/Dockerfile-5.2 b/Dockerfiles/slim/Dockerfile-5.2 new file mode 100644 index 0000000..17d46ca --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-5.2 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:5.2-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ + && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mysql-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && apt-get update \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.2-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-5.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-5.2.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '5.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '5.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="5.2-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 5.2-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 5.2-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-5.3 b/Dockerfiles/slim/Dockerfile-5.3 new file mode 100644 index 0000000..e005def --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-5.3 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:5.3-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ + && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mysql-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && apt-get update \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.3-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-5.3.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-5.3.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '5.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '5.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.3' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="5.3-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 5.3-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 5.3-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-5.4 b/Dockerfiles/slim/Dockerfile-5.4 new file mode 100644 index 0000000..7623c61 --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-5.4 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:5.4-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ + && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mysql-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && apt-get update \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.4-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-5.4.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-5.4.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '5.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '5.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.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 \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="5.4-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 5.4-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 5.4-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-5.5 b/Dockerfiles/slim/Dockerfile-5.5 new file mode 100644 index 0000000..6396bae --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-5.5 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:5.5-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ + && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mysql-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && apt-get update \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.5' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.5' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.5-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-5.5.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-5.5.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '5.5' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '5.5' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.5' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="5.5-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 5.5-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 5.5-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-5.6 b/Dockerfiles/slim/Dockerfile-5.6 new file mode 100644 index 0000000..358daa5 --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-5.6 @@ -0,0 +1,477 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:5.6-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mysql-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && apt-get update \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients \ + mongo-tools; \ + else \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.6' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '5.6' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.6-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-5.6.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-5.6.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '5.6' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '5.6' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.6' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="5.6-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 5.6-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 5.6-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-7.0 b/Dockerfiles/slim/Dockerfile-7.0 new file mode 100644 index 0000000..a38c630 --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-7.0 @@ -0,0 +1,477 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:7.0-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mysql-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && apt-get update \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients \ + mongo-tools; \ + else \ + apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-clients; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update; \ + fi \ + \ + && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client; \ + fi \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.0-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-7.0.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-7.0.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '7.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '7.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.0' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="7.0-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 7.0-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 7.0-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-7.1 b/Dockerfiles/slim/Dockerfile-7.1 new file mode 100644 index 0000000..28c137a --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-7.1 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:7.1-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.1-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-7.1.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-7.1.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '7.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '7.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.1' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="7.1-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 7.1-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 7.1-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-7.2 b/Dockerfiles/slim/Dockerfile-7.2 new file mode 100644 index 0000000..254be0a --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-7.2 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:7.2-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.2-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-7.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-7.2.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '7.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '7.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="7.2-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 7.2-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 7.2-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-7.3 b/Dockerfiles/slim/Dockerfile-7.3 new file mode 100644 index 0000000..f47156c --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-7.3 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:7.3-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.3-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-7.3.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-7.3.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '7.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '7.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.3' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="7.3-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 7.3-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 7.3-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-7.4 b/Dockerfiles/slim/Dockerfile-7.4 new file mode 100644 index 0000000..9555b8a --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-7.4 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:7.4-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '7.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.4-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-7.4.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-7.4.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '7.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '7.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && 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 \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="7.4-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 7.4-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 7.4-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-8.0 b/Dockerfiles/slim/Dockerfile-8.0 new file mode 100644 index 0000000..6e670a6 --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-8.0 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:8.0-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '8.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '8.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:8.0-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-8.0.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-8.0.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '8.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '8.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.0' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.0-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.0-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.0-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-8.1 b/Dockerfiles/slim/Dockerfile-8.1 new file mode 100644 index 0000000..4c78721 --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-8.1 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:8.1-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '8.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '8.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:8.1-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-8.1.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-8.1.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '8.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '8.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.1' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.1-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.1-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.1-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/slim/Dockerfile-8.2 b/Dockerfiles/slim/Dockerfile-8.2 new file mode 100644 index 0000000..215a801 --- /dev/null +++ b/Dockerfiles/slim/Dockerfile-8.2 @@ -0,0 +1,473 @@ +# vi: ft=dockerfile +# Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-slim.j2 instead. + +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/4: Devilbox slim image (BASE BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to run Devilbox and its intranet +### +FROM devilbox/php-fpm:8.2-prod as devilbox-slim-base-builder + +### +### Install apt Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg + +### +### Add apt repositories +### +RUN set -eux \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && true + +### +### Add common build tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + file \ + git \ + mariadb-client \ + redis-tools \ + sqlite3 + +### +### Devilbox required cli tools from group_vars (slim.yml) +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + blackfire-agent \ + \ + && rm -rf /var/lib/apt/lists/* \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ + curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ + && chmod +x mhsendmail_linux_amd64 \ + && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ + else \ + printf '%s\n%s\n%s\n' '#!/bin/sh' 'echo "Not available for arm64."' 'exit 1' > /usr/local/bin/mhsendmail \ + && chmod +x /usr/local/bin/mhsendmail; \ + fi \ + \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ + && echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + mongodb-org-tools \ + mongodb-org-shell \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '8.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ + && cd /usr/local/src/mysqldump-secure \ + && git checkout $(git describe --abbrev=0 --tags) \ + && cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ + && cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ + && touch /var/log/mysqldump-secure.log \ + && chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ + && chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ + && chmod 0400 /etc/mysqldump-secure.conf \ + && chmod 0400 /etc/mysqldump-secure.cnf \ + && chmod 0644 /var/log/mysqldump-secure.log \ + && sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ + && sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ + && cd / \ + && rm -rf /usr/local/src/mysqldump-secure \ + \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && apt-get update \ + \ + && apt-get install -y --no-install-recommends --no-install-suggests \ + postgresql-client \ + \ + && rm -rf /var/lib/apt/lists/* \ + && if echo '8.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + + +### +### Prepare libraries for copying (keep symlinks) +### +RUN set -eux \ + && LIB_GNU_DIR="/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && USR_LIB_DIR="/usr/lib" \ + && USR_LIB_GNU_DIR="/usr/lib/$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + \ + && mkdir /tmp/lib-gnu \ + && mkdir /tmp/usr-lib \ + && mkdir /tmp/usr-lib-gnu \ + \ + && LIB_GNU="libreadline" \ + && USR_LIB="libsnappy libtcmalloc libv8" \ + && USR_LIB_GNU="liblua libpq libpcrecpp libboost libjemalloc libunwind libhiredis libedit" \ + \ + && for lib in ${LIB_GNU}; do \ + if ls -1 "${LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${LIB_GNU_DIR}"; \ + cp -r ${LIB_GNU_DIR}/${lib}* /tmp/lib-gnu/; \ + fi \ + done \ + && for lib in ${USR_LIB}; do \ + if ls -1 "${USR_LIB_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_DIR}"; \ + cp -r ${USR_LIB_DIR}/${lib}* /tmp/usr-lib/; \ + fi \ + done \ + && for lib in ${USR_LIB_GNU}; do \ + if ls -1 "${USR_LIB_GNU_DIR}/" | grep "^${lib}" >/dev/null; then \ + echo "Coping '${lib}' from: ${USR_LIB_GNU_DIR}"; \ + cp -r ${USR_LIB_GNU_DIR}/${lib}* /tmp/usr-lib-gnu/; \ + fi \ + done + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/4: Devilbox slim image (BASE) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:8.2-prod as devilbox-slim-base +ARG ARCH + +### +### Copy libraries +### +COPY --from=devilbox-slim-base-builder /tmp/lib-gnu/ /lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib-gnu/ /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /tmp/usr-lib/ /usr/lib/ + +### +### System files +### +COPY --from=devilbox-slim-base-builder /etc/group /etc/group +COPY --from=devilbox-slim-base-builder /etc/passwd /etc/passwd +COPY --from=devilbox-slim-base-builder /etc/shadow /etc/shadow + +### +### Blackfire +### +COPY --from=devilbox-slim-base-builder /etc/blackfire /etc/blackfire +COPY --from=devilbox-slim-base-builder /etc/default/blackfire-agent /etc/default/blackfire-agent +COPY --from=devilbox-slim-base-builder /usr/bin/blackfire* /usr/bin/ +COPY --from=devilbox-slim-base-builder /var/log/blackfire /var/log/blackfire + + +### +### Copy mhsendmail +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mhsendmail /usr/local/bin/ + +### +### Copy Mongo client +### +COPY --from=devilbox-slim-base-builder /usr/bin/mongo* /usr/bin/ + +### +### Copy mysql* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/mysql* /usr/bin/ + +### +### Copy mysqldump-secure +### +COPY --from=devilbox-slim-base-builder /usr/local/bin/mysqldump-secure /usr/local/bin/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.conf /etc/ +COPY --from=devilbox-slim-base-builder /etc/mysqldump-secure.cnf /etc/ +COPY --from=devilbox-slim-base-builder /var/log/mysqldump-secure.log /var/log/ + +### +### Copy PostgreSQL client +### +RUN set -eux \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/clusterdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createlang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/createuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/droplang \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/dropuser \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_basebackup \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dump \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_dumpall \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_isready \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivewal \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_receivexlog \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_recvlogical \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pg_restore \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/pgbench \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/psql \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/reindexdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumdb \ + && ln -s ../share/postgresql-common/pg_wrapper /usr/bin/vacuumlo + +COPY --from=devilbox-slim-base-builder /usr/lib/postgresql /usr/lib/postgresql +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/libpq.so* /usr/lib/${ARCH}-linux-gnu/ +COPY --from=devilbox-slim-base-builder /usr/share/perl5 /usr/share/perl5 +COPY --from=devilbox-slim-base-builder /usr/share/postgresql-common /usr/share/postgresql-common +#COPY --from=devilbox-slim-base-builder /etc/perl /etc/perl +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl-base /usr/lib/${ARCH}-linux-gnu/perl-base +#COPY --from=devilbox-slim-base-builder /usr/lib/${ARCH}-linux-gnu/perl5 /usr/lib/${ARCH}-linux-gnu/perl5 +#COPY --from=devilbox-slim-base-builder /usr/share/postgresql /usr/share/postgresql + +### +### Copy redis* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/redis* /usr/bin/ + + +### +### Copy sqlite* binaries +### +COPY --from=devilbox-slim-base-builder /usr/bin/sqlite* /usr/bin/ + +### +### Copy configuration files +### +COPY ./data/php-ini.d/php-8.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-8.2.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + +### +### Configure Bash +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/4: Devilbox slim image (BASE TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-slim-base as devilbox-slim-base-test +RUN set -eux \ + && mysql --version \ + && redis-cli --version \ + && sqlite3 --version + +### +### Check if available tools slim +### + +# -------------------- blackfire -------------------- +RUN set -eux \ + && blackfire version \ + && blackfire-agent -v \ + \ + && true + +# -------------------- mhsendmail -------------------- +RUN set -eux \ + && true + +# -------------------- mongo_client -------------------- +RUN set -eux \ + && if echo '8.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + mongofiles --version; \ + fi \ + else \ + mongofiles --version; \ + fi \ + \ + && true + +# -------------------- mysqldumpsecure -------------------- +RUN set -eux \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && true + +# -------------------- pgsql_client -------------------- +RUN set -eux \ + && if echo '8.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ + if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ + pg_isready --version; \ + fi \ + else \ + pg_isready --version; \ + fi \ + \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/4: Devilbox slim image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: slim) +### +FROM devilbox-slim-base as slim +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.2-slim" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.2-slim" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.2-slim" + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + +### +### Ports +### +EXPOSE 9000 + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/work/data/bash-devilbox b/Dockerfiles/slim/data/bash-devilbox similarity index 100% rename from Dockerfiles/work/data/bash-devilbox rename to Dockerfiles/slim/data/bash-devilbox diff --git a/Dockerfiles/work/data/docker-entrypoint.d/400-mysqldump-secure.sh b/Dockerfiles/slim/data/docker-entrypoint.d/400-mysqldump-secure.sh similarity index 100% rename from Dockerfiles/work/data/docker-entrypoint.d/400-mysqldump-secure.sh rename to Dockerfiles/slim/data/docker-entrypoint.d/400-mysqldump-secure.sh diff --git a/Dockerfiles/work/data/docker-entrypoint.d/401-update-ca-certificates.sh b/Dockerfiles/slim/data/docker-entrypoint.d/401-update-ca-certificates.sh similarity index 100% rename from Dockerfiles/work/data/docker-entrypoint.d/401-update-ca-certificates.sh rename to Dockerfiles/slim/data/docker-entrypoint.d/401-update-ca-certificates.sh diff --git a/Dockerfiles/work/data/docker-entrypoint.sh b/Dockerfiles/slim/data/docker-entrypoint.sh similarity index 100% rename from Dockerfiles/work/data/docker-entrypoint.sh rename to Dockerfiles/slim/data/docker-entrypoint.sh diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-5.2.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.2.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-5.2.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.2.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-5.3.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.3.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-5.3.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.3.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-5.4.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.4.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-5.4.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.4.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-5.5.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.5.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-5.5.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.5.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-5.6.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.6.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-5.6.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-5.6.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-7.0.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.0.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-7.0.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.0.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-7.1.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.1.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-7.1.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.1.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-7.2.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.2.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-7.2.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.2.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-7.3.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.3.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-7.3.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.3.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-7.4.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.4.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-7.4.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-7.4.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-8.0.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-8.0.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-8.0.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-8.0.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-8.1.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-8.1.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-8.1.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-8.1.conf diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-8.2.conf b/Dockerfiles/slim/data/php-fpm.conf/php-fpm-8.2.conf similarity index 100% rename from Dockerfiles/work/data/php-fpm.conf/php-fpm-8.2.conf rename to Dockerfiles/slim/data/php-fpm.conf/php-fpm-8.2.conf diff --git a/Dockerfiles/work/data/php-ini.d/php-5.2.ini b/Dockerfiles/slim/data/php-ini.d/php-5.2.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-5.2.ini rename to Dockerfiles/slim/data/php-ini.d/php-5.2.ini index 2ffce84..616ff51 100644 --- a/Dockerfiles/work/data/php-ini.d/php-5.2.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-5.2.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 5.2-work +; # Devilbox PHP defaults for 5.2-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-5.3.ini b/Dockerfiles/slim/data/php-ini.d/php-5.3.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-5.3.ini rename to Dockerfiles/slim/data/php-ini.d/php-5.3.ini index 64b46a5..9496d36 100644 --- a/Dockerfiles/work/data/php-ini.d/php-5.3.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-5.3.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 5.3-work +; # Devilbox PHP defaults for 5.3-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-5.4.ini b/Dockerfiles/slim/data/php-ini.d/php-5.4.ini similarity index 97% rename from Dockerfiles/work/data/php-ini.d/php-5.4.ini rename to Dockerfiles/slim/data/php-ini.d/php-5.4.ini index e9b8f64..91e4ef3 100644 --- a/Dockerfiles/work/data/php-ini.d/php-5.4.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-5.4.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 5.4-work +; # Devilbox PHP defaults for 5.4-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-5.5.ini b/Dockerfiles/slim/data/php-ini.d/php-5.5.ini similarity index 97% rename from Dockerfiles/work/data/php-ini.d/php-5.5.ini rename to Dockerfiles/slim/data/php-ini.d/php-5.5.ini index 8ca7004..067fb91 100644 --- a/Dockerfiles/work/data/php-ini.d/php-5.5.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-5.5.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 5.5-work +; # Devilbox PHP defaults for 5.5-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-5.6.ini b/Dockerfiles/slim/data/php-ini.d/php-5.6.ini similarity index 97% rename from Dockerfiles/work/data/php-ini.d/php-5.6.ini rename to Dockerfiles/slim/data/php-ini.d/php-5.6.ini index 5c84e34..9079c8e 100644 --- a/Dockerfiles/work/data/php-ini.d/php-5.6.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-5.6.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 5.6-work +; # Devilbox PHP defaults for 5.6-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-7.0.ini b/Dockerfiles/slim/data/php-ini.d/php-7.0.ini similarity index 97% rename from Dockerfiles/work/data/php-ini.d/php-7.0.ini rename to Dockerfiles/slim/data/php-ini.d/php-7.0.ini index 4bd2872..591c0cf 100644 --- a/Dockerfiles/work/data/php-ini.d/php-7.0.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-7.0.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 7.0-work +; # Devilbox PHP defaults for 7.0-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-7.1.ini b/Dockerfiles/slim/data/php-ini.d/php-7.1.ini similarity index 97% rename from Dockerfiles/work/data/php-ini.d/php-7.1.ini rename to Dockerfiles/slim/data/php-ini.d/php-7.1.ini index 0fc952c..bc516ec 100644 --- a/Dockerfiles/work/data/php-ini.d/php-7.1.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-7.1.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 7.1-work +; # Devilbox PHP defaults for 7.1-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-7.2.ini b/Dockerfiles/slim/data/php-ini.d/php-7.2.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-7.2.ini rename to Dockerfiles/slim/data/php-ini.d/php-7.2.ini index 14a8e3f..3219ea4 100644 --- a/Dockerfiles/work/data/php-ini.d/php-7.2.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-7.2.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 7.2-work +; # Devilbox PHP defaults for 7.2-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-7.3.ini b/Dockerfiles/slim/data/php-ini.d/php-7.3.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-7.3.ini rename to Dockerfiles/slim/data/php-ini.d/php-7.3.ini index edda098..f0c11e6 100644 --- a/Dockerfiles/work/data/php-ini.d/php-7.3.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-7.3.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 7.3-work +; # Devilbox PHP defaults for 7.3-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-7.4.ini b/Dockerfiles/slim/data/php-ini.d/php-7.4.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-7.4.ini rename to Dockerfiles/slim/data/php-ini.d/php-7.4.ini index 7f3f75d..499814b 100644 --- a/Dockerfiles/work/data/php-ini.d/php-7.4.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-7.4.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 7.4-work +; # Devilbox PHP defaults for 7.4-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-8.0.ini b/Dockerfiles/slim/data/php-ini.d/php-8.0.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-8.0.ini rename to Dockerfiles/slim/data/php-ini.d/php-8.0.ini index 2aeea6e..b1fbb8a 100644 --- a/Dockerfiles/work/data/php-ini.d/php-8.0.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-8.0.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 8.0-work +; # Devilbox PHP defaults for 8.0-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-8.1.ini b/Dockerfiles/slim/data/php-ini.d/php-8.1.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-8.1.ini rename to Dockerfiles/slim/data/php-ini.d/php-8.1.ini index 08952f7..a0a6f02 100644 --- a/Dockerfiles/work/data/php-ini.d/php-8.1.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-8.1.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 8.1-work +; # Devilbox PHP defaults for 8.1-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/php-ini.d/php-8.2.ini b/Dockerfiles/slim/data/php-ini.d/php-8.2.ini similarity index 96% rename from Dockerfiles/work/data/php-ini.d/php-8.2.ini rename to Dockerfiles/slim/data/php-ini.d/php-8.2.ini index b9dc962..8ed9020 100644 --- a/Dockerfiles/work/data/php-ini.d/php-8.2.ini +++ b/Dockerfiles/slim/data/php-ini.d/php-8.2.ini @@ -1,5 +1,5 @@ ; ############################################################ -; # Devilbox PHP defaults for 8.2-work +; # Devilbox PHP defaults for 8.2-slim ; ############################################################ ; Each PHP flavour (base, mods, prod, work) might have its own php.ini. diff --git a/Dockerfiles/work/data/sudo-devilbox b/Dockerfiles/slim/data/sudo-devilbox similarity index 100% rename from Dockerfiles/work/data/sudo-devilbox rename to Dockerfiles/slim/data/sudo-devilbox diff --git a/Dockerfiles/work/Dockerfile-5.2 b/Dockerfiles/work/Dockerfile-5.2 index b33fb58..4eca991 100644 --- a/Dockerfiles/work/Dockerfile-5.2 +++ b/Dockerfiles/work/Dockerfile-5.2 @@ -1,9 +1,451 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:5.2-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:5.2-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="17" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.2-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mixlib-config -v 2.2.4 \ + \ + && gem install mdl -v 0.5.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,715 +465,6 @@ LABEL "org.opencontainers.image.ref.name"="5.2-work" LABEL "org.opencontainers.image.title"="PHP-FPM 5.2-work" LABEL "org.opencontainers.image.description"="PHP-FPM 5.2-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ - && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mysql-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="17" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && apt-get update \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- ffi -------------------- - && gem install ffi -v 1.12.2 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.2' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '5.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '5.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - \ -# -------------------- Composer -------------------- - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-5.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-5.2.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -739,19 +472,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-5.3 b/Dockerfiles/work/Dockerfile-5.3 index 7e41736..e0e1f0e 100644 --- a/Dockerfiles/work/Dockerfile-5.3 +++ b/Dockerfiles/work/Dockerfile-5.3 @@ -1,9 +1,505 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:5.3-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:5.3-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-1 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="17" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.3-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.3' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mixlib-config -v 2.2.4 \ + \ + && gem install mdl -v 0.5.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="4" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v1.5.1/wp-cli-1.5.1.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.3' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,783 +519,6 @@ LABEL "org.opencontainers.image.ref.name"="5.3-work" LABEL "org.opencontainers.image.title"="PHP-FPM 5.3-work" LABEL "org.opencontainers.image.description"="PHP-FPM 5.3-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ - && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mysql-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-1 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="17" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && apt-get update \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout v2.0.7 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -s /usr/local/src/phalcon-devtools/phalcon.php /usr/local/bin/phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.2.19/php-cs-fixer.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-4.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://github.com/wp-cli/wp-cli/releases/download/v1.5.1/wp-cli-1.5.1.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- ffi -------------------- - && gem install ffi -v 1.12.2 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.3' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '5.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '5.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-5.3.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-5.3.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -807,19 +526,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-5.4 b/Dockerfiles/work/Dockerfile-5.4 index 4d22d71..34822a5 100644 --- a/Dockerfiles/work/Dockerfile-5.4 +++ b/Dockerfiles/work/Dockerfile-5.4 @@ -1,9 +1,517 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:5.4-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:5.4-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="17" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.4-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.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 \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mixlib-config -v 2.2.4 \ + \ + && gem install mdl -v 0.5.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="4" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.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 \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,828 +531,6 @@ LABEL "org.opencontainers.image.ref.name"="5.4-work" LABEL "org.opencontainers.image.title"="PHP-FPM 5.4-work" LABEL "org.opencontainers.image.description"="PHP-FPM 5.4-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ - && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mysql-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="17" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && apt-get update \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/releases/v3.3.0/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout v1.3.7 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout v2.0.9 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon.php /usr/local/bin/phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.2.19/php-cs-fixer.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-4.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- ffi -------------------- - && gem install ffi -v 1.12.2 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.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 \ - && 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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '5.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '5.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-5.4.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-5.4.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -852,19 +538,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-5.5 b/Dockerfiles/work/Dockerfile-5.5 index 77c25f2..0ab75f9 100644 --- a/Dockerfiles/work/Dockerfile-5.5 +++ b/Dockerfiles/work/Dockerfile-5.5 @@ -1,9 +1,541 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:5.5-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:5.5-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="17" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.5-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.5' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mixlib-config -v 2.2.4 \ + \ + && gem install mdl -v 0.5.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="4" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.5' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,845 +555,6 @@ LABEL "org.opencontainers.image.ref.name"="5.5-work" LABEL "org.opencontainers.image.title"="PHP-FPM 5.5-work" LABEL "org.opencontainers.image.description"="PHP-FPM 5.5-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until \ - && echo "deb [trusted=yes] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mysql-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="17" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && apt-get update \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/releases/v4.3.4/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- drupalconsole -------------------- - && DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" \ - && curl -sS -L --fail "${DURL}" -L -o /usr/local/bin/drupal \ - && chmod +x /usr/local/bin/drupal \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout v2.0.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout v3.4.11 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ -&& chmod +x /usr/local/bin/phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.2.19/php-cs-fixer.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-4.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/wkhtmltopdf/releases | awk -F\" '/wkhtmltopdf.*.jessie_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- ffi -------------------- - && gem install ffi -v 1.12.2 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.5' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '5.5' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '5.5' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-5.5.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-5.5.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -869,19 +562,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-5.6 b/Dockerfiles/work/Dockerfile-5.6 index d92b631..3658771 100644 --- a/Dockerfiles/work/Dockerfile-5.6 +++ b/Dockerfiles/work/Dockerfile-5.6 @@ -1,9 +1,541 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:5.6-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:5.6-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="17" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:5.6-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.6' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mixlib-config -v 2.2.4 \ + \ + && gem install mdl -v 0.5.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="5" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.6' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,863 +555,6 @@ LABEL "org.opencontainers.image.ref.name"="5.6-work" LABEL "org.opencontainers.image.title"="PHP-FPM 5.6-work" LABEL "org.opencontainers.image.description"="PHP-FPM 5.6-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mysql-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - zsh-common \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="17" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && apt-get update \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients \ - mongo-tools; \ -else \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/releases/v4.3.4/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- drush9 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush9 \ -&& cd /usr/local/src/drush9 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/9[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush9 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush9 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress' \ -&& ln -s /usr/local/src/drush9/drush /usr/local/bin/drush9 \ -&& rm -rf /usr/local/src/drush9/.git \ -&& rm -rf /usr/local/src/drush9/docs \ -&& rm -rf /usr/local/src/drush9/examples \ -&& rm -rf /usr/local/src/drush9/misc \ - \ - \ -# -------------------- drupalconsole -------------------- - && DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" \ - && curl -sS -L --fail "${DURL}" -L -o /usr/local/bin/drupal \ - && chmod +x /usr/local/bin/drupal \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout v2.0.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout v3.4.11 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ -&& chmod +x /usr/local/bin/phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-5.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.6' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '5.6' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '5.6' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && drush9 --version | grep -E '9[.0-9]+\s*$' \ - && drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-5.6.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-5.6.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -887,19 +562,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-7.0 b/Dockerfiles/work/Dockerfile-7.0 index a9ee9da..9970d76 100644 --- a/Dockerfiles/work/Dockerfile-7.0 +++ b/Dockerfiles/work/Dockerfile-7.0 @@ -1,9 +1,541 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:7.0-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:7.0-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="17" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.0-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.0' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mixlib-config -v 2.2.4 \ + \ + && gem install mdl -v 0.5.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="6" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.0' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,842 +555,6 @@ LABEL "org.opencontainers.image.ref.name"="7.0-work" LABEL "org.opencontainers.image.title"="PHP-FPM 7.0-work" LABEL "org.opencontainers.image.description"="PHP-FPM 7.0-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mysql-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - zsh-common \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="17" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb https://apt-archive.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ - && apt-get update; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && apt-get update \ - && if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients \ - mongo-tools; \ -else \ - apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-clients; \ -fi \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/releases/v6.7.0/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout v2.0.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout v3.4.11 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ -&& chmod +x /usr/local/bin/phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-6.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont1 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.0' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '7.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '7.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-7.0.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-7.0.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -866,19 +562,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-7.1 b/Dockerfiles/work/Dockerfile-7.1 index 92e38c1..b8362c5 100644 --- a/Dockerfiles/work/Dockerfile-7.1 +++ b/Dockerfiles/work/Dockerfile-7.1 @@ -1,9 +1,541 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:7.1-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:7.1-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.1-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.1' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install chef-utils -v 16.6.14 \ + \ + && gem install mdl -v 0.11.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="7" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.1' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,835 +555,6 @@ LABEL "org.opencontainers.image.ref.name"="7.1-work" LABEL "org.opencontainers.image.title"="PHP-FPM 7.1-work" LABEL "org.opencontainers.image.description"="PHP-FPM 7.1-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/releases/v6.7.0/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout $(git tag | grep '^v2\.3\.' | sort -u | tail -1) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout v3.4.11 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ -&& chmod +x /usr/local/bin/phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-7.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.1' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '7.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '7.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-7.1.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-7.1.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -859,19 +562,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-7.2 b/Dockerfiles/work/Dockerfile-7.2 index 0cba99d..c0d332e 100644 --- a/Dockerfiles/work/Dockerfile-7.2 +++ b/Dockerfiles/work/Dockerfile-7.2 @@ -1,9 +1,541 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:7.2-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:7.2-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython-dev \ + && rm -rf /var/lib/apt/lists/* + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.2-slim as devilbox-work-help + + +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install chef-utils -v 16.6.14 \ + \ + && gem install mdl -v 0.11.0 \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="8" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,857 +555,6 @@ LABEL "org.opencontainers.image.ref.name"="7.2-work" LABEL "org.opencontainers.image.title"="PHP-FPM 7.2-work" LABEL "org.opencontainers.image.description"="PHP-FPM 7.2-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython-dev \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/pip/2.7/get-pip.py | python \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- drush9 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush9 \ -&& cd /usr/local/src/drush9 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/9[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush9 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush9 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress' \ -&& ln -s /usr/local/src/drush9/drush /usr/local/bin/drush9 \ -&& rm -rf /usr/local/src/drush9/.git \ -&& rm -rf /usr/local/src/drush9/docs \ -&& rm -rf /usr/local/src/drush9/examples \ -&& rm -rf /usr/local/src/drush9/misc \ - \ - \ -# -------------------- drupalconsole -------------------- - && DURL="$(curl -s https://api.github.com/repos/hechoendrupal/drupal-console-launcher/releases/latest | awk -F\" '/download.*.phar/{print $(NF-1)}' | head -1)" \ - && curl -sS -L --fail "${DURL}" -L -o /usr/local/bin/drupal \ - && chmod +x /usr/local/bin/drupal \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout v4.0.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ -&& chmod +x phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-7.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.2' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '7.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '7.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && drush9 --version | grep -E '9[.0-9]+\s*$' \ - && drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-7.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-7.2.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -881,19 +562,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-7.3 b/Dockerfiles/work/Dockerfile-7.3 index 6adbf33..7c9f88e 100644 --- a/Dockerfiles/work/Dockerfile-7.3 +++ b/Dockerfiles/work/Dockerfile-7.3 @@ -1,9 +1,553 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:7.3-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:7.3-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython3-dev \ + && rm -rf /var/lib/apt/lists/* +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.3-slim as devilbox-work-help + +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.3' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mdl \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="9" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.3' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,858 +567,6 @@ LABEL "org.opencontainers.image.ref.name"="7.3-work" LABEL "org.opencontainers.image.title"="PHP-FPM 7.3-work" LABEL "org.opencontainers.image.description"="PHP-FPM 7.3-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython3-dev \ - python3-distutils \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- drush9 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush9 \ -&& cd /usr/local/src/drush9 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/9[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush9 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush9 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress' \ -&& ln -s /usr/local/src/drush9/drush /usr/local/bin/drush9 \ -&& rm -rf /usr/local/src/drush9/.git \ -&& rm -rf /usr/local/src/drush9/docs \ -&& rm -rf /usr/local/src/drush9/examples \ -&& rm -rf /usr/local/src/drush9/misc \ - \ - \ -# -------------------- drupalconsole -------------------- - && DURL="$(curl -s https://api.github.com/repos/hechoendrupal/drupal-console-launcher/releases/latest | awk -F\" '/download.*.phar/{print $(NF-1)}' | head -1)" \ - && curl -sS -L --fail "${DURL}" -L -o /usr/local/bin/drupal \ - && chmod +x /usr/local/bin/drupal \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout $(git describe --abbrev=0 --tags) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phalcon -------------------- - && git clone https://github.com/phalcon/phalcon-devtools /usr/local/src/phalcon-devtools \ -&& cd /usr/local/src/phalcon-devtools \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/phalcon-devtools \ -&& su - ${MY_USER} -c 'cd /usr/local/src/phalcon-devtools && ./phalcon.sh' \ -&& ln -sf /usr/local/src/phalcon-devtools/phalcon /usr/local/bin/phalcon \ -&& chmod +x phalcon \ -&& cd / \ -&& rm -rf /usr/local/src/phalcon-devtools/.git \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v2.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-7.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.3' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '7.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '7.3' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && drush9 --version | grep -E '9[.0-9]+\s*$' \ - && drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phalcon commands | grep -E '[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-7.3.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-7.3.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -882,19 +574,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-7.4 b/Dockerfiles/work/Dockerfile-7.4 index d4dc048..2857f7e 100644 --- a/Dockerfiles/work/Dockerfile-7.4 +++ b/Dockerfiles/work/Dockerfile-7.4 @@ -1,9 +1,553 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:7.4-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:7.4-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython3-dev \ + && rm -rf /var/lib/apt/lists/* +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:7.4-slim as devilbox-work-help + +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && 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 \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mdl \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="9" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && 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 \ + && 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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,843 +567,6 @@ LABEL "org.opencontainers.image.ref.name"="7.4-work" LABEL "org.opencontainers.image.title"="PHP-FPM 7.4-work" LABEL "org.opencontainers.image.description"="PHP-FPM 7.4-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython3-dev \ - python3-distutils \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- drush7 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush7 \ -&& cd /usr/local/src/drush7 \ -&& git checkout 7.4.0 \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush7 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush7 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush7/drush /usr/local/bin/drush7 \ -&& rm -rf /usr/local/src/drush7/.git \ -&& rm -rf /usr/local/src/drush7/docs \ -&& rm -rf /usr/local/src/drush7/examples \ -&& rm -rf /usr/local/src/drush7/misc \ - \ - \ -# -------------------- drush8 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush8 \ -&& cd /usr/local/src/drush8 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/8[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush8 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush8 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress --no-dev' \ -&& ln -s /usr/local/src/drush8/drush /usr/local/bin/drush8 \ -&& rm -rf /usr/local/src/drush8/.git \ -&& rm -rf /usr/local/src/drush8/docs \ -&& rm -rf /usr/local/src/drush8/examples \ -&& rm -rf /usr/local/src/drush8/misc \ - \ - \ -# -------------------- drush9 -------------------- - && git clone https://github.com/drush-ops/drush.git /usr/local/src/drush9 \ -&& cd /usr/local/src/drush9 \ -&& git checkout $( git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | grep -E 'tags/9[.0-9]+$' | tail -1 | sed 's|.*/||g' ) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/drush9 \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/drush9 && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 install --no-interaction --no-progress' \ -&& ln -s /usr/local/src/drush9/drush /usr/local/bin/drush9 \ -&& rm -rf /usr/local/src/drush9/.git \ -&& rm -rf /usr/local/src/drush9/docs \ -&& rm -rf /usr/local/src/drush9/examples \ -&& rm -rf /usr/local/src/drush9/misc \ - \ - \ -# -------------------- drupalconsole -------------------- - && DURL="$(curl -s https://api.github.com/repos/hechoendrupal/drupal-console-launcher/releases/latest | awk -F\" '/download.*.phar/{print $(NF-1)}' | head -1)" \ - && curl -sS -L --fail "${DURL}" -L -o /usr/local/bin/drupal \ - && chmod +x /usr/local/bin/drupal \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout $(git describe --abbrev=0 --tags) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v3.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- phpunit -------------------- - && curl -sS -k -L --fail https://phar.phpunit.de/phpunit-7.phar > /usr/local/bin/phpunit \ -&& chmod +x /usr/local/bin/phpunit \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ -# -------------------- asgardcms -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer \ - && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ - \ -# -------------------- codeception -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ - && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ - \ -# -------------------- lumen -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ - && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ - \ -# -------------------- prestissimo -------------------- - && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && 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 \ - && 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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '7.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '7.4' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && drush7 --version | grep -E '7[.0-9]+\s*$' \ - && drush8 --version | grep -E '8[.0-9]+\s*$' \ - && drush9 --version | grep -E '9[.0-9]+\s*$' \ - && drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' \ - && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' \ - && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' \ - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-7.4.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-7.4.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -867,19 +574,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-8.0 b/Dockerfiles/work/Dockerfile-8.0 index 9432bc0..7fad2b4 100644 --- a/Dockerfiles/work/Dockerfile-8.0 +++ b/Dockerfiles/work/Dockerfile-8.0 @@ -1,9 +1,553 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:8.0-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:8.0-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython3-dev \ + && rm -rf /var/lib/apt/lists/* +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:8.0-slim as devilbox-work-help + +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.0' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mdl \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="9" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.0' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,768 +567,6 @@ LABEL "org.opencontainers.image.ref.name"="8.0-work" LABEL "org.opencontainers.image.title"="PHP-FPM 8.0-work" LABEL "org.opencontainers.image.description"="PHP-FPM 8.0-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython3-dev \ - python3-distutils \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout $(git describe --abbrev=0 --tags) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v3.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.0' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '8.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '8.0' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-8.0.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-8.0.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -792,19 +574,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-8.1 b/Dockerfiles/work/Dockerfile-8.1 index f763c7b..0577201 100644 --- a/Dockerfiles/work/Dockerfile-8.1 +++ b/Dockerfiles/work/Dockerfile-8.1 @@ -1,9 +1,553 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:8.1-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:8.1-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython3-dev \ + && rm -rf /var/lib/apt/lists/* +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:8.1-slim as devilbox-work-help + +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.1' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mdl \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="9" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.1' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,768 +567,6 @@ LABEL "org.opencontainers.image.ref.name"="8.1-work" LABEL "org.opencontainers.image.title"="PHP-FPM 8.1-work" LABEL "org.opencontainers.image.description"="PHP-FPM 8.1-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython3-dev \ - python3-distutils \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- laravel -------------------- - && git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ -&& cd /usr/local/src/laravel-installer \ -&& git checkout $(git describe --abbrev=0 --tags) \ - \ - && chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/laravel-installer \ -&& su - ${MY_USER} -c 'PATH=/usr/local/bin:$PATH; cd /usr/local/src/laravel-installer && COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer install --no-interaction --no-progress --no-dev' \ -&& rm -rf /usr/local/src/laravel-installer/laravel/.git \ - \ - && ln -s /usr/local/src/laravel-installer/bin/laravel /usr/local/bin/laravel \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- php-cs-fixer -------------------- - && curl -sS -k -L --fail https://cs.symfony.com/download/php-cs-fixer-v3.phar > /usr/local/bin/php-cs-fixer \ -&& chmod +x /usr/local/bin/php-cs-fixer \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.1' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '8.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '8.1' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-8.1.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-8.1.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -792,19 +574,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Dockerfiles/work/Dockerfile-8.2 b/Dockerfiles/work/Dockerfile-8.2 index be3f18d..8b0726e 100644 --- a/Dockerfiles/work/Dockerfile-8.2 +++ b/Dockerfiles/work/Dockerfile-8.2 @@ -1,9 +1,553 @@ # vi: ft=dockerfile # Auto-generated via Ansible: edit ./ansible/DOCKERFILES/Dockerfile-work.j2 instead. -FROM devilbox/php-fpm:8.2-prod -MAINTAINER "cytopia" -ARG ARCH +######################################################################################################################## +######################################################################################################################## +### +### Stage 1/7: Devilbox work image (HELP BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### Installs all cli tools required to install custom tools +### +FROM devilbox/php-fpm:8.2-slim as devilbox-work-help-builder + +### +### Install build_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + libpython3-dev \ + && rm -rf /var/lib/apt/lists/* +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && COMPOSER_1_VERSION="latest-1.x" \ + && COMPOSER_2_VERSION="latest-2.x" \ + \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ + && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ + && chmod +x /usr/local/bin/composer-1 \ + && chmod +x /usr/local/bin/composer-2 \ + \ + && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && NODE_VERSION="--lts" \ + \ + && NVM_VERSION="$( \ + curl -sS 'https://github.com/nvm-sh/nvm/releases' \ + | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ + | grep -Eo 'v?[.0-9]+' \ + | sort -V \ + | tail -1 \ + )" \ + && mkdir -p /opt/nvm \ + && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ + | NVM_DIR="/opt/nvm" bash \ + \ + && { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ + } >> /home/devilbox/.bashrc \ + \ + && chown -R devilbox:devilbox "/opt/nvm" \ + \ + && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ + && su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ + \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/corepack" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/node" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npm" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/npx" /usr/local/bin/ \ + && ln -s "/opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/yarn" /usr/local/bin/ \ + \ + && chmod 0777 /opt/nvm \ + && find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ + && find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ + \ + && rm -rf /opt/nvm/.cache \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/share \ + && rm -rf /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/include \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + \ + && /bin/ls -1 /usr/local/lib/ | grep ^python | while read -r version; do \ + cd "/usr/local/lib/${version}/" \ + && find . -name '*.pyc' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '*.exe' -print0 | xargs -0 -n1 rm -rf \ + && find . -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ + \ + && if [ -d "dist-packages" ]; then \ + cd "dist-packages" \ + && pwd \ + && if /bin/ls -1 | grep -v '^pip'; then \ + /bin/ls -1 | grep -v '^pip' | xargs -n1 rm -rf; \ + fi \ + fi \ + done \ + \ + && true + +### +### Configure Bash (composer, node yarn) +### +RUN set -eux \ + && { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/.bashrc /root/.bashrc \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/.bashrc + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 2/7: Devilbox work image (HELP) +### +######################################################################################################################## +######################################################################################################################## + +### +### Copies all cli tools required to run Devilbox and its intranet into a clean image +### +FROM devilbox/php-fpm:8.2-slim as devilbox-work-help + +### +### Install run_dep +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + python3-distutils \ + && rm -rf /var/lib/apt/lists/* +### +### Copy nvm +### +COPY --from=devilbox-work-help-builder /opt/nvm /opt/nvm + +### +### Copy binaries (Composer & Pip binaries) +### +COPY --from=devilbox-work-help-builder /usr/local/bin /usr/local/bin + +### +### Python packages +### +COPY --from=devilbox-work-help-builder /usr/local/lib /usr/local/lib + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 3/7: Devilbox work image (HELP TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-help as devilbox-work-help-test + +### +### Devilbox required helper tools from group_vars (work-help.yml) +### + +# -------------------- composer -------------------- +RUN set -eux \ + && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ + && true + +# -------------------- nvm -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; node --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ + \ + && true + +# -------------------- pip -------------------- +RUN set -eux \ + && pip --version \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 4/7: Devilbox work image (TOOLS BUILDER) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools-builder + +### +### Install build_dep, run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- build_deps ---------- + ruby-dev \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Install defined php_tools +### + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/ng /usr/local/bin/ \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require asgardcms/asgardcms-installer:dev-master \ + && ln -s /usr/local/src/composer/vendor/asgardcms/asgardcms-installer/asgardcms /usr/local/bin/ \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require codeception/codeception \ + && ln -s /usr/local/src/composer/vendor/codeception/codeception/codecept /usr/local/bin/ \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + && ln -s /opt/nvm/versions/node/$(su -c '. /opt/nvm/nvm.sh; node --version' devilbox)/bin/eslint /usr/local/bin/ \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-2 global require laravel/lumen-installer \ + && ln -s /usr/local/src/composer/vendor/laravel/lumen-installer/lumen /usr/local/bin/ \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && gem install mdl \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && PHP_UNIT_VERSION="9" \ + && curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit \ + && chmod +x /usr/local/bin/phpunit \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && COMPOSER_HOME="/usr/local/src/composer" COMPOSER_MEMORY_LIMIT=-1 /usr/local/bin/composer-1 global require hirak/prestissimo \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall pwncat \ + && ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ + \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" \ + && curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yamllint \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && pip install --no-cache-dir --no-compile --force-reinstall yq \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Post fixes +### +RUN set -eux \ + && if [ ! -d "/var/lib/gems" ]; then \ + mkdir "/var/lib/gems"; \ + fi + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 5/7: Devilbox work image (TOOLS) +### +######################################################################################################################## +######################################################################################################################## + +### +### This stage can be easily modified by adding tools into the ./php_tools/ directory. +### +FROM devilbox-work-help as devilbox-work-tools + +### +### Install run_dep or tools type: apt +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ + # ---------- run_deps ---------- + ruby \ + # ---------- type: apt ---------- + jq \ + && rm -rf /var/lib/apt/lists/* + +### +### Copy Custom (binaries in /usr/local/bin) +### +COPY --from=devilbox-work-tools-builder /usr/local/bin /usr/local/bin + +### +### Copy NPM +### +COPY --from=devilbox-work-tools-builder /opt/nvm /opt/nvm + +### +### Copy Composer +### +COPY --from=devilbox-work-tools-builder /usr/local/src /usr/local/src + +### +### Copy Pip +### +COPY --from=devilbox-work-tools-builder /usr/local/lib /usr/local/lib + +### +### Copy RubyGems +### +COPY --from=devilbox-work-tools-builder /var/lib/gems /var/lib/gems + + +# FIXME: / TODO: Add post: stage into here as well + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 6/7: Devilbox work image (TOOLS TEST) +### +######################################################################################################################## +######################################################################################################################## + +### +### Test all Devilbox cli utils if copying was successful +### +FROM devilbox-work-tools as devilbox-work-tools-test + + +# -------------------- (npm) angular_cli -------------------- +RUN set -eux \ + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) \ + && true + +# -------------------- (composer) asgardcms -------------------- +RUN set -eux \ + && asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) \ + && true + +# -------------------- (composer) codeception -------------------- +RUN set -eux \ + && codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) \ + && true + +# -------------------- (npm) eslint -------------------- +RUN set -eux \ + && eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) \ + && true + +# -------------------- (apt) jq -------------------- +RUN set -eux \ + && jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) \ + && true + +# -------------------- (composer) lumen -------------------- +RUN set -eux \ + && lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) \ + && true + +# -------------------- (rubygem) mdl -------------------- +RUN set -eux \ + && mdl --version | grep -E '[.0-9]+' || (mdl --version; false) \ + && true + +# -------------------- (custom) phpunit -------------------- +RUN set -eux \ + && phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) \ + && true + +# -------------------- (composer) prestissimo -------------------- +RUN set -eux \ + && true + +# -------------------- (pip) pwncat -------------------- +RUN set -eux \ + && pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) \ + && true + +# -------------------- (custom) wpcli -------------------- +RUN set -eux \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) \ + && true + +# -------------------- (pip) yamllint -------------------- +RUN set -eux \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) \ + && true + +# -------------------- (pip) yq -------------------- +RUN set -eux \ + && yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) \ + && true + +### +### Re-activate modules which have been deactivated in mods (for testing). +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + +### +### Check if PHP still works +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /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 + + + +######################################################################################################################## +######################################################################################################################## +### +### Stage 7/7: Devilbox sliwork image (FINAL) +### +######################################################################################################################## +######################################################################################################################## + +### +### Prepare final base image (STAGE: work) +### +FROM devilbox-work-tools as work +MAINTAINER "cytopia" ### ### Labels @@ -23,750 +567,6 @@ LABEL "org.opencontainers.image.ref.name"="8.2-work" LABEL "org.opencontainers.image.title"="PHP-FPM 8.2-work" LABEL "org.opencontainers.image.description"="PHP-FPM 8.2-work" - -### -### Re-activate modules which have been deactivated in mods. -### NOTE: They will be removed at the very bottom -### -RUN set -eux \ - && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ - echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ - fi \ - && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ - echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ - fi - - -### -### Envs -### -ENV BASH_PROFILE=".bashrc" - - -### -### Install Tools -### -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - apt-transport-https \ - ca-certificates \ - curl \ - dirmngr \ - gnupg \ - \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ - && echo "deb http://ftp.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/backports.list \ - && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ - && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ - \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends --no-install-suggests \ - ack-grep \ - aspell \ - autoconf \ - automake \ - bash-completion \ - binutils \ - blackfire-agent \ - build-essential \ - bzip2 \ - certbot \ - coreutils \ - dnsutils \ - dos2unix \ - file \ - gawk \ - gcc \ - git \ - git-flow \ - git-svn \ - ghostscript \ - graphviz \ - gsfonts \ - hostname \ - htop \ - imagemagick \ - iputils-ping \ - jq \ - less \ - libc-dev \ - libffi-dev \ - libssl-dev \ - libyaml-dev \ - locales \ - make \ - moreutils \ - \ - mariadb-client \ - \ - mupdf \ - mupdf-tools \ - nano \ - net-tools \ - netcat \ - openssh-client \ - patch \ - patchelf \ - redis-tools \ - rsync \ - rubygems \ - ruby-dev \ - shellcheck \ - silversearcher-ag \ - sqlite3 \ - subversion \ - sudo \ - tig \ - tree \ - unzip \ - vim \ - w3m \ - wget \ - whois \ - xz-utils \ - zip \ - zlib1g-dev \ - zsh \ - && rm -rf /var/lib/apt/lists/* \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install custom software -### -RUN set -eux \ -# -------------------- composer -------------------- - && COMPOSER_1_VERSION="latest-1.x" \ -&& COMPOSER_2_VERSION="latest-2.x" \ - \ - && curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_1_VERSION}/composer.phar" > /usr/local/bin/composer-1 \ -&& curl -sS -L --fail "https://getcomposer.org/download/${COMPOSER_2_VERSION}/composer.phar" > /usr/local/bin/composer-2 \ -&& chmod +x /usr/local/bin/composer-1 \ -&& chmod +x /usr/local/bin/composer-2 \ - \ - && ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ - \ - \ -# -------------------- pip -------------------- - && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ -&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libpython3-dev \ - python3-distutils \ -&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ -&& rm -rf /var/lib/apt/lists/* \ -\ -&& curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ - \ - \ -# -------------------- nvm -------------------- - && NODE_VERSION="--lts" \ - \ - && NVM_VERSION="$( \ - curl -sS 'https://github.com/nvm-sh/nvm/releases' \ - | grep -Eo '/nvm-sh/nvm/releases/tag/v?[.0-9]+"' \ - | grep -Eo 'v?[.0-9]+' \ - | sort -V \ - | tail -1 \ -)" \ -&& mkdir -p /opt/nvm \ -&& curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" \ - | NVM_DIR="/opt/nvm" bash \ -\ -&& { \ - echo 'export NVM_DIR="/opt/nvm"'; \ - echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ - echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ -} >> /home/devilbox/.bashrc \ -\ -&& chown -R devilbox:devilbox "/opt/nvm" \ - \ - && su -c ". /opt/nvm/nvm.sh; nvm install ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; nvm use ${NODE_VERSION}" devilbox \ -&& su -c ". /opt/nvm/nvm.sh; corepack enable" devilbox \ -\ -&& chmod 0777 /opt/nvm \ -&& find /opt/nvm -type f -print0 | xargs -n1 -0 chmod go+w \ -&& find /opt/nvm -type d -print0 | xargs -n1 -0 chmod 0777 \ - \ - \ -# -------------------- pgsql_client -------------------- - && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ -&& echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - postgresql-client \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- mongo_client -------------------- - && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691EEC35216C63CAF66CE1656408E390CFB1F5 \ -&& echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" > /etc/apt/sources.list.d/mongo.list \ -&& apt-get update \ - \ - && apt-get install -y --no-install-recommends --no-install-suggests \ - mongodb-org-tools \ - mongodb-org-shell \ - \ - && rm -rf /var/lib/apt/lists/* \ - \ -# -------------------- awesomeci -------------------- - && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ -&& cd /usr/local/src/awesome-ci \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& ./configure --prefix=/usr/local \ -&& make install \ -&& cd / \ -&& rm -rf /usr/local/src/awesome-ci \ - \ - \ -# -------------------- deployer -------------------- - && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ - && chmod +x /usr/local/bin/dep \ - \ -# -------------------- gitflow -------------------- - && git clone https://github.com/petervanderdoes/gitflow-avh /tmp/gitflow \ -&& cd /tmp/gitflow \ -&& make install \ -&& cd / && rm -rf /tmp/gitflow \ - \ - \ -# -------------------- linkcheck -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ -&& chmod +x /usr/local/bin/linkcheck \ - \ - \ -# -------------------- mhsendmail -------------------- - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ - && chmod +x mhsendmail_linux_amd64 \ - && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail; \ -fi \ - \ - \ -# -------------------- mysqldumpsecure -------------------- - && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ -&& cd /usr/local/src/mysqldump-secure \ -&& git checkout $(git describe --abbrev=0 --tags) \ -&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ -&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ -&& touch /var/log/mysqldump-secure.log \ -&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ -&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ -&& chmod 0400 /etc/mysqldump-secure.conf \ -&& chmod 0400 /etc/mysqldump-secure.cnf \ -&& chmod 0644 /var/log/mysqldump-secure.log \ -&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ -&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ -&& cd / \ -&& rm -rf /usr/local/src/mysqldump-secure \ - \ - \ -# -------------------- phpcs -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ -&& chmod +x /usr/local/bin/phpcs \ - \ - \ -# -------------------- phpcbf -------------------- - && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ -&& chmod +x /usr/local/bin/phpcbf \ - \ - \ -# -------------------- phpmd -------------------- - && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ -&& mv phpmd.phar /usr/local/bin/phpmd \ -&& chmod +x /usr/local/bin/phpmd \ - \ - \ -# -------------------- symfony -------------------- - && VERSION="$(curl -s https://api.github.com/repos/symfony-cli/symfony-cli/releases/latest | awk -F\" '/symfony-cli_.*._amd64\.deb/{print $(NF-1)}' | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')" \ - && curl -sS -L --fail -o /tmp/symfonycli.deb https://github.com/symfony-cli/symfony-cli/releases/download/v${VERSION}/symfony-cli_${VERSION}_$(dpkg-architecture --query DEB_HOST_ARCH).deb \ -&& dpkg -i /tmp/symfonycli.deb \ -&& rm -f /tmp/symfonycli.deb \ - \ - \ -# -------------------- wkhtmltopdf -------------------- - && VERSION="$(curl -sSL -L --fail https://api.github.com/repos/wkhtmltopdf/packaging/releases | awk -F\" '/wkhtmltopdf.*.stretch_amd64\.deb/{print $(NF-1)}' | head -1 )" \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get update -qq \ - && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ - libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ - && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb ${VERSION} \ - && dpkg -i /tmp/wkhtmltopdf.deb \ - && rm -f /tmp/wkhtmltopdf.deb; \ -fi \ - \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then \ - DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/*; \ -fi \ - \ - \ -# -------------------- wpcli -------------------- - && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ - && chmod +x /usr/local/bin/wp \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /usr/local/src/composer/cache/* || true) \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -### -### Install Composer (PHP) -### -RUN set -eux \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install npm (Node) -### -RUN set -eux \ -# -------------------- angular_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ - \ -# -------------------- eslint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ - \ -# -------------------- grunt -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ - \ -# -------------------- grunt_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ - \ -# -------------------- gulp -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ - \ -# -------------------- jsonlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ - \ -# -------------------- pm2 -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ - \ -# -------------------- mdlint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ - \ -# -------------------- sass -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ - \ -# -------------------- stylelint -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ - \ -# -------------------- vue_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ - \ -# -------------------- vue_cli_service_global -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ - \ -# -------------------- webpack -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ - \ -# -------------------- webpack_cli -------------------- - && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ - \ - \ - \ - && if [ -f "/opt/nvm/nvm.sh" ]; then \ - ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ - \ - && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ - && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox; \ - fi \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /opt/nvm -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install gem (Ruby) -### -RUN set -eux \ -# -------------------- mixlib_config -------------------- - && gem install mixlib-config -v 2.2.4 \ - \ -# -------------------- rb_inotify -------------------- - && gem install rb-inotify -v 0.9.10 \ - \ -# -------------------- mdl -------------------- - && gem install mdl -v 0.5.0 \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Install pip (Python) packages -### -RUN set -eux \ -# -------------------- yamllint -------------------- - && pip install --no-cache-dir --force-reinstall yamllint || true \ - \ -# -------------------- yq -------------------- - && pip install --no-cache-dir --force-reinstall yq || true \ - \ - \ - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) \ - \ - && (find /usr/local/bin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/lib -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) \ - && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 -P$(getconf _NPROCESSORS_ONLN) strip --strip-all -p 2>/dev/null || true) - - -### -### Configure Bash -### -RUN \ - { \ - echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ - echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ - echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ - echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ - echo "export PATH"; \ - echo ". /etc/bash-devilbox"; \ - echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ - echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ - echo " if [ -r \"\${f}\" ]; then"; \ - echo " . \"\${f}\""; \ - echo " fi"; \ - echo " done"; \ - echo " unset f"; \ - echo "fi"; \ - } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ - && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} - - -### -### Verify -### -RUN set -eux \ - && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ - && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ - && /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 - -RUN set -eux \ -# -------------------- Software -------------------- - && composer --version 2>/dev/null | grep -Ei '(composer|version)\s*[0-9][.0-9]+' \ - && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ -&& su -c '. /opt/nvm/nvm.sh; yarn --version' devilbox | grep -E '^v?[0-9][.0-9]+' \ - \ - && if echo '8.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - pg_isready --version; \ - fi \ -else \ - pg_isready --version; \ -fi \ - \ - && if echo '8.2' | grep -E '^(5.2|5.3|5.4|5.5|5.6|7.0)$' >/dev/null; then \ - if [ "$(dpkg-architecture --query DEB_BUILD_ARCH)" = "amd64" ]; then \ - mongofiles --version; \ - fi \ -else \ - mongofiles --version; \ -fi \ - \ - && regex-grep --version | grep -E '[0-9][.0-9]+' \ - && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ - && git-flow version | grep -E '[0-9][.0-9]+' \ - && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ - && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ - && phpcs --version | grep -E 'version [0-9][.0-9]+' \ - && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ - && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ - && symfony -V | grep -Ei 'version\s[0-9][.0-9]+' \ - && if [ "$(dpkg-architecture --query DEB_HOST_ARCH)" = "amd64" ]; then wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)"; fi \ - && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Composer -------------------- - \ -# -------------------- PIP -------------------- - && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ - && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ - \ -# -------------------- NPM -------------------- - && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ - && eslint -v | grep -E '[0-9][.0-9]+' \ - && grunt --version | grep -E '[0-9][.0-9]+' \ - && gulp --version | grep -E '[0-9][.0-9]+' \ - && jsonlint --version | grep -E '[0-9][.0-9]+' \ - && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ - && mdlint --version | grep -E '[0-9][.0-9]+' \ - && sass --version | grep -E '[0-9][.0-9]+' \ - && stylelint --version | grep -E '[0-9][.0-9]+' \ - && vue --version | grep -E '[0-9][.0-9]+' \ - && webpack --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- GEM -------------------- - && mdl --version | grep -E '[0-9][.0-9]+' \ - \ -# -------------------- Cleanup -------------------- - \ - && (rm -rf /home/devilbox/.*json || true) \ - && (rm -rf /home/devilbox/.ansible || true) \ - && (rm -rf /home/devilbox/.cache || true) \ - && (rm -rf /home/devilbox/.composer || true) \ - && (rm -rf /home/devilbox/.config || true) \ - && (rm -rf /home/devilbox/.console || true) \ - && (rm -rf /home/devilbox/.drush || true) \ - && (rm -rf /home/devilbox/.gem || true) \ - && (rm -rf /home/devilbox/.local || true) \ - && (rm -rf /home/devilbox/.node || true) \ - && (rm -rf /home/devilbox/.npm || true) \ - && (rm -rf /home/devilbox/.pm2 || true) \ - && (rm -rf /home/devilbox/.subversion || true) \ - && (rm -rf /home/devilbox/.v8* || true) \ - && (rm -rf /home/devilbox/node_modules || true) \ - && (rm -rf /home/devilbox/yarn.lock || true) \ - \ - && (rm -rf /root/.*json || true) \ - && (rm -rf /root/.ansible || true) \ - && (rm -rf /root/.cache || true) \ - && (rm -rf /root/.composer || true) \ - && (rm -rf /root/.config || true) \ - && (rm -rf /root/.console || true) \ - && (rm -rf /root/.drush || true) \ - && (rm -rf /root/.gem || true) \ - && (rm -rf /root/.local || true) \ - && (rm -rf /root/.node || true) \ - && (rm -rf /root/.npm || true) \ - && (rm -rf /root/.pm2 || true) \ - && (rm -rf /root/.subversion || true) \ - && (rm -rf /root/.v8* || true) \ - && (rm -rf /root/node_modules || true) \ - && (rm -rf /root/yarn.lock || true) \ - \ - && (rm -rf /tmp/* || true) \ - && (rm -rf /tmp/.* || true) - - -# Deactive PSR and Phalcon: -# https://github.com/devilbox/docker-php-fpm/issues/201 -RUN set -eux \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ - && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ - - -### -### Copy files -### -COPY ./data/php-ini.d/php-8.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini -COPY ./data/php-fpm.conf/php-fpm-8.2.conf /usr/local/etc/php-fpm.conf - -COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ -COPY ./data/bash-devilbox /etc/bash-devilbox -COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox - - ### ### Volumes ### @@ -774,19 +574,16 @@ VOLUME /shared/backups VOLUME /var/log/php VOLUME /var/mail - ### ### Ports ### EXPOSE 9000 - ### ### Where to start inside the container ### WORKDIR /shared/httpd - ### ### Entrypoint ### diff --git a/Makefile b/Makefile index dd59de1..8b5c7fc 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ include $(MAKEFILES) # ------------------------------------------------------------------------------------------------- # Default configuration # ------------------------------------------------------------------------------------------------- +DOCKER_PULL_BASE_IMAGES_IGNORE = devilbox-slim-base devilbox-work-help devilbox-work-tools # Own vars TAG = latest @@ -37,12 +38,14 @@ DOCKER_TAG = $(VERSION)-$(STAGE) BASE_TAG = $(VERSION)-base MODS_TAG = $(VERSION)-mods PROD_TAG = $(VERSION)-prod +SLIM_TAG = $(VERSION)-slim WORK_TAG = $(VERSION)-work else DOCKER_TAG = $(VERSION)-$(STAGE)-$(TAG) BASE_TAG = $(VERSION)-base-$(TAG) MODS_TAG = $(VERSION)-mods-$(TAG) PROD_TAG = $(VERSION)-prod-$(TAG) +SLIM_TAG = $(VERSION)-slim-$(TAG) WORK_TAG = $(VERSION)-work-$(TAG) endif ARCH = linux/amd64 @@ -130,13 +133,13 @@ endif .PHONY: build build: check-stage-is-set build: check-parent-image-exists -build: ARGS+=--build-arg EXT_DIR=$(EXT_DIR) +build: ARGS+=--build-arg EXT_DIR=$(EXT_DIR) --build-arg ARCH=$(shell if [ "$(ARCH)" = "linux/amd64" ]; then echo "x86_64"; else echo "aarch64"; fi) build: docker-arch-build .PHONY: rebuild rebuild: check-stage-is-set rebuild: check-parent-image-exists -rebuild: ARGS+=--build-arg EXT_DIR=$(EXT_DIR) +rebuild: ARGS+=--build-arg EXT_DIR=$(EXT_DIR) --build-arg ARCH=$(shell if [ "$(ARCH)" = "linux/amd64" ]; then echo "x86_64"; else echo "aarch64"; fi) rebuild: docker-arch-rebuild .PHONY: push @@ -184,8 +187,8 @@ manifest-push: docker-manifest-push .PHONY: test test: check-stage-is-set test: check-current-image-exists -test: gen-readme test: test-integration +test: gen-readme .PHONY: test-integration test-integration: @@ -291,8 +294,8 @@ check-stage-is-set: echo "Exiting."; \ exit 1; \ fi - @if [ "$(STAGE)" != "base" ] && [ "$(STAGE)" != "mods" ] && [ "$(STAGE)" != "prod" ] && [ "$(STAGE)" != "work" ]; then \ - echo "Error, Flavour can only be one of 'base', 'mods', 'prod', or 'work'."; \ + @if [ "$(STAGE)" != "base" ] && [ "$(STAGE)" != "mods" ] && [ "$(STAGE)" != "prod" ] && [ "$(STAGE)" != "slim" ] && [ "$(STAGE)" != "work" ]; then \ + echo "Error, Flavour can only be one of 'base', 'mods', 'prod', 'slim' or 'work'."; \ echo "Exiting."; \ exit 1; \ fi @@ -330,6 +333,22 @@ check-current-image-exists: check-parent-image-exists: check-stage-is-set check-parent-image-exists: @if [ "$(STAGE)" = "work" ]; then \ + if [ "$$( docker images -q $(IMAGE):$(SLIM_TAG) )" = "" ]; then \ + >&2 echo "Docker image '$(IMAGE):$(SLIM_TAG)' was not found locally."; \ + >&2 echo "Either build it first or explicitly pull it from Dockerhub."; \ + >&2 echo "This is a safeguard to not automatically pull the Docker image."; \ + >&2 echo; \ + exit 1; \ + fi; \ + OS="$$( docker image inspect $(IMAGE):$(SLIM_TAG) --format '{{.Os}}' )"; \ + ARCH="$$( docker image inspect $(IMAGE):$(SLIM_TAG) --format '{{.Architecture}}' )"; \ + if [ "$${OS}/$${ARCH}" != "$(ARCH)" ]; then \ + >&2 echo "Docker image '$(IMAGE):$(SLIM_TAG)' has invalid architecture: $${OS}/$${ARCH}"; \ + >&2 echo "Expected: $(ARCH)"; \ + >&2 echo; \ + exit 1; \ + fi; \ + elif [ "$(STAGE)" = "slim" ]; then \ if [ "$$( docker images -q $(IMAGE):$(PROD_TAG) )" = "" ]; then \ >&2 echo "Docker image '$(IMAGE):$(PROD_TAG)' was not found locally."; \ >&2 echo "Either build it first or explicitly pull it from Dockerhub."; \ diff --git a/bin/Makefile b/bin/Makefile index 68cb445..46afe76 100644 --- a/bin/Makefile +++ b/bin/Makefile @@ -23,7 +23,7 @@ MYPY_ARGS = --strict --disable-error-code no-any-return PYLINT_DIR = *.py PYLINT_PIP_PKGS = yamllint -PYLINT_ARGS = --disable=invalid-name +PYLINT_ARGS = --disable=invalid-name,duplicate-code PYCODE_ARGS = --max-line-length=100 diff --git a/bin/modules-generate.py b/bin/modules-generate.py index c4c0207..4428c6d 100755 --- a/bin/modules-generate.py +++ b/bin/modules-generate.py @@ -87,7 +87,12 @@ def get_modules(selected_modules: List[str], ignore_dependencies: bool) -> List[ if not item.name.startswith(".") and item.is_dir(): data = get_module_options(item.name) modules.append( - {"dir": item.name, "name": data["name"], "deps": data["depends_build"]} + { + "dir": item.name, + "name": data["name"], + "deps": data["depends_build"], + "exclude": data["exclude"] + } ) # Convert list of deps into dict(dir, name, deps) items = [] @@ -153,6 +158,7 @@ def print_modules(modules: List[Dict[str, Any]]) -> None: for dep in module["deps"]: print(dep["name"], end=", ") print() + print(" excl:", module["exclude"]) def print_dependency_tree(tree: Dict[str, Any], lvl: int = 0) -> None: diff --git a/bin/modules-validate.py b/bin/modules-validate.py deleted file mode 100755 index 9fbcc43..0000000 --- a/bin/modules-validate.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -"""Validate defined modules.""" -print("Not yet implemented *///*") -print() -print("Run modules-generate.py instead, as it also kind of validates.") diff --git a/bin/tools-generate.py b/bin/tools-generate.py new file mode 100755 index 0000000..691e581 --- /dev/null +++ b/bin/tools-generate.py @@ -0,0 +1,282 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Generate Ansible group_vars from tools (installed software) definition.""" +import os +import sys +from collections import OrderedDict +from typing import Dict, List, Any +import yaml + + +# -------------------------------------------------------------------------------------------------- +# GLOBALS +# -------------------------------------------------------------------------------------------------- + +SCRIPT_PATH = str(os.path.dirname(os.path.realpath(__file__))) +REPOSITORY_PATH = str(os.path.dirname(SCRIPT_PATH)) +PHP_TOOL_PATH = str(os.path.join(REPOSITORY_PATH, "php_tools")) +GROUP_VARS_PATH = str(os.path.join(REPOSITORY_PATH, ".ansible", "group_vars", "all")) + + +# -------------------------------------------------------------------------------------------------- +# HELPER FUNCTIONS +# -------------------------------------------------------------------------------------------------- + + +def get_el_by_name(items: List[Dict[str, Any]], name: str) -> Dict[str, Any]: + """Returns an element from a dict list by its 'name' key with given value.""" + for item in items: + if item["name"] == name: + return item + print("error, key name not found by value", name, "in list: ", items) + sys.exit(1) + + +def load_yaml(path: str) -> Dict[str, Any]: + """Load yaml file and return its dict().""" + with open(path, "r", encoding="utf8") as fp: + data = yaml.safe_load(fp) + return data + + +def load_yaml_raw(path: str, indent: int = 0) -> str: + """Load and returns yaml file as str.""" + lines = [] + with open(path, "r", encoding="utf8") as fp: + for line in fp: + # Remove: empty lines and --- + if line in ("---\n", "---\r\n", "\n", "\r\n"): + continue + # Remove: comments + if line.startswith("#"): + continue + lines.append(" " * indent + line) + return "".join(lines) + + +# -------------------------------------------------------------------------------------------------- +# TOOL FUNCTIONS +# -------------------------------------------------------------------------------------------------- + + +def get_tool_options(tool_dirname: str) -> Dict[str, Any]: + """Returns yaml dict options of a PHP tool given by its absolute file path.""" + return load_yaml(os.path.join(PHP_TOOL_PATH, tool_dirname, "options.yml")) + + +def get_tool_build(tool_dirname: str) -> Dict[str, Any]: + """Returns yaml dict build configuration of a PHP tool given by its absolute file path.""" + return load_yaml(os.path.join(PHP_TOOL_PATH, tool_dirname, "install.yml")) + + +def get_tools(selected_tools: List[str], ignore_dependencies: bool) -> List[Dict[str, Any]]: + """Returns a list of PHP tool directory names. + + Args: + selected_tools: If not empty, only gather specified tools (and its dependencies). + ignore_dependencies: If true, all dependent tools will be ignored. + """ + tools = [] + with os.scandir(PHP_TOOL_PATH) as it: + for item in it: + if not item.name.startswith(".") and item.is_dir(): + data = get_tool_options(item.name) + tools.append( + { + "dir": item.name, + "name": data["name"], + "deps": data["depends"], + "exclude": data["exclude"] + } + ) + # Convert list of deps into dict(dir, name, deps) + items = [] + for tool in tools: + if tool["deps"] and not ignore_dependencies: + deps = [] + for dep in tool["deps"]: + deps.append(get_el_by_name(tools, dep)) + tool["deps"] = deps + items.append(tool) + else: + tool["deps"] = [] + items.append(tool) + # Check if we only want to read a single tool + if selected_tools: + return [get_el_by_name(items, tool_name) for tool_name in selected_tools] + return sorted(items, key=lambda item: item["dir"]) + + +def get_tool_dependency_tree(tools: List[Dict[str, Any]]) -> OrderedDict[str, Any]: + """Returns dictionary of tool dependency tree.""" + tool_tree = OrderedDict() # type: OrderedDict[str, Any] + + for tool in tools: + tool_name = tool["name"] + tool_deps = tool["deps"] + + tool_tree[tool_name] = {} + + # Do we have tool requirements? + if len(tool_deps) > 0: + tool_tree[tool_name] = get_tool_dependency_tree(tool_deps) + return tool_tree + + +def resolve_tool_dependency_tree(tree: OrderedDict[str, Any]) -> List[str]: + """Returns sorted list of resolved dependencies.""" + resolved = [] + for key, _ in tree.items(): + # Has dependenies + if tree[key]: + childs = resolve_tool_dependency_tree(tree[key]) + for child in childs: + if child not in resolved: + resolved.append(child) + # Add current node, if not already available + if key not in resolved: + resolved.append(key) + return resolved + + +# -------------------------------------------------------------------------------------------------- +# PRINT FUNCTIONS +# -------------------------------------------------------------------------------------------------- + + +def print_tools(tools: List[Dict[str, Any]]) -> None: + """Print directory tools.""" + for tool in tools: + print(tool["dir"] + "/") + print(" name:", tool["name"]) + print(" deps:", end=" ") + for dep in tool["deps"]: + print(dep["name"], end=", ") + print() + print(" excl:", tool["exclude"]) + + +def print_dependency_tree(tree: Dict[str, Any], lvl: int = 0) -> None: + """Print dependency tree of tools.""" + for key, value in tree.items(): + print(" " * lvl, "-", key) + if value: + print_dependency_tree(tree[key], lvl + 2) + + +# -------------------------------------------------------------------------------------------------- +# WRITE ANSIBLE GROUP_VARS FUNCTIONS +# -------------------------------------------------------------------------------------------------- + + +def write_group_vars(tools: List[str]) -> None: + """Write work.yml group_vars for ansible.""" + group_vars = os.path.join(GROUP_VARS_PATH, "work.yml") + + with open(group_vars, "w", encoding="utf8") as fp: + fp.write("---\n\n") + fp.write("# DO NOT ALTER THIS FILE - IT IS AUTOGENERATED.\n\n") + + # Enabled tools + fp.write("# The following specifies the order in which tools are being installed.\n") + fp.write("tools_enabled:\n") + for tool in tools: + fp.write(" - " + tool + "\n") + fp.write("\n\n") + + # Build defines tools + fp.write("# The following specifies how tools are being installed.\n") + fp.write("tools_available:\n") + for tool in tools: + opts = get_tool_options(tool) + fp.write(" " + tool + ":\n") + fp.write(" disabled: [" + ", ".join(str(x) for x in opts["exclude"]) + "]\n") + fp.write(load_yaml_raw(os.path.join(PHP_TOOL_PATH, tool, "install.yml"), 4)) + + +# -------------------------------------------------------------------------------------------------- +# MAIN FUNCTION +# -------------------------------------------------------------------------------------------------- +def print_help() -> None: + """Show help screen.""" + print("Usage:", os.path.basename(__file__), "[options] [PHP-EXT]...") + print(" ", os.path.basename(__file__), "-h, --help") + print() + print("This script will generate the Ansible group_vars file: .ansible/group_vars/all/work.yml") + print("based on all the tools found in php_tools/ directory.") + print() + print("Positional arguments:") + print(" [PHP-EXT] Specify None, one or more PHP tools to generate group_vars for.") + print(" When no PHP tool is specified (argument is omitted), group_vars") + print(" for all tools will be genrated.") + print(" When one or more PHP tool are specified, only group_vars for") + print(" these tools will be created.") + print(" only be generated for this single tool (and its dependencies).") + print(" This is useful if you want to test new tools and not build all") + print(" previous tools in the Dockerfile.") + print() + print(" Note: You still need to generate the Dockerfiles via Ansible for") + print(" the changes to take effect, before building the image.") + print("Optional arguments:") + print(" -i Ignore dependent tools.") + print(" By default each exentions is checked for build dependencies of other") + print(" tools. For example many tools build against libxml ext.") + print(" By specifying -i, those dependencies are not beeing added to") + print(" ansible group_vars. Use at your own risk.") + + +def main(argv: List[str]) -> None: + """Main entrypoint.""" + ignore_dependencies = False + selected_tools = [] + if len(argv): + for arg in argv: + if arg in ("-h", "--help"): + print_help() + sys.exit(0) + for arg in argv: + if arg.startswith("-") and arg != "-i": + print("Invalid argument:", arg) + print("Use -h or --help for help") + sys.exit(1) + if arg == "-i": + ignore_dependencies = True + else: + selected_tools.append(arg) + + # Get tools in order of dependencies + tools = get_tools(selected_tools, ignore_dependencies) + tool_tree = get_tool_dependency_tree(tools) + names = resolve_tool_dependency_tree(tool_tree) + + print("#", "-" * 78) + print("# Paths") + print("#", "-" * 78) + print("Repository: ", REPOSITORY_PATH) + print("PHP Tools: ", PHP_TOOL_PATH) + print("Group Vars: ", GROUP_VARS_PATH) + print() + + print("#", "-" * 78) + print("# Tool directories") + print("#", "-" * 78) + print_tools(tools) + print() + + print("#", "-" * 78) + print("# Build Dependency Tree") + print("#", "-" * 78) + print_dependency_tree(tool_tree) + print() + + print("#", "-" * 78) + print("# Build order") + print("#", "-" * 78) + print("\n".join(names)) + + # Create group_vars file work.yml + write_group_vars(names) + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/php_tools/angular_cli/README.md b/php_tools/angular_cli/README.md new file mode 100644 index 0000000..cdef121 --- /dev/null +++ b/php_tools/angular_cli/README.md @@ -0,0 +1,8 @@ +# Angular CLI + +The CLI tool for Angular. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| NPM | https://www.npmjs.com/package/@angular/cli | +| GitHub | https://github.com/angular/angular-cli | diff --git a/php_tools/angular_cli/install.yml b/php_tools/angular_cli/install.yml new file mode 100644 index 0000000..6bcedcc --- /dev/null +++ b/php_tools/angular_cli/install.yml @@ -0,0 +1,13 @@ +--- + +check: ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' || (ng version; false) + +all: + type: npm + package: "@angular/cli" + binary: ng + version: + build_dep: [] + run_dep: [] + pre: + post: diff --git a/php_tools/angular_cli/options.yml b/php_tools/angular_cli/options.yml new file mode 100644 index 0000000..7dd0add --- /dev/null +++ b/php_tools/angular_cli/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: angular_cli + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/asgardcms/README.md b/php_tools/asgardcms/README.md new file mode 100644 index 0000000..c9e98f5 --- /dev/null +++ b/php_tools/asgardcms/README.md @@ -0,0 +1,8 @@ +# AsgardCms + +AsgardCms application installer. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| Composer | https://packagist.org/packages/asgardcms/asgardcms-installer | +| GitHub | https://github.com/AsgardCms/asgardcms-installer | diff --git a/php_tools/asgardcms/install.yml b/php_tools/asgardcms/install.yml new file mode 100644 index 0000000..2540cfb --- /dev/null +++ b/php_tools/asgardcms/install.yml @@ -0,0 +1,15 @@ +--- + +check: asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' || (asgardcms --version; false) + +all: + type: composer + composer: 2 + package: asgardcms/asgardcms-installer + # https://github.com/AsgardCms/asgardcms-installer/issues/1 + version: dev-master + binary: asgardcms + build_dep: [] + run_dep: [] + pre: + post: diff --git a/php_tools/asgardcms/options.yml b/php_tools/asgardcms/options.yml new file mode 100644 index 0000000..153882f --- /dev/null +++ b/php_tools/asgardcms/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: asgardcms + +# Exclude module build/installation for the following PHP versions +exclude: [5.2, 5.3, 5.4] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/codeception/README.md b/php_tools/codeception/README.md new file mode 100644 index 0000000..b8faa70 --- /dev/null +++ b/php_tools/codeception/README.md @@ -0,0 +1,8 @@ +# Codeception + +BDD-style testing framework. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| Composer | https://packagist.org/packages/codeception/codeception | +| GitHub | https://github.com/Codeception/Codeception | diff --git a/php_tools/codeception/install.yml b/php_tools/codeception/install.yml new file mode 100644 index 0000000..511e412 --- /dev/null +++ b/php_tools/codeception/install.yml @@ -0,0 +1,14 @@ +--- + +check: codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' || (codecept --version; false) + +all: + type: composer + composer: 2 + package: codeception/codeception + # version: + binary: codecept + build_dep: [] + run_dep: [] + # pre: + # post: diff --git a/php_tools/codeception/options.yml b/php_tools/codeception/options.yml new file mode 100644 index 0000000..f90af76 --- /dev/null +++ b/php_tools/codeception/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: codeception + +# Exclude module build/installation for the following PHP versions +exclude: [5.2, 5.3] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/eslint/README.md b/php_tools/eslint/README.md new file mode 100644 index 0000000..852e6d6 --- /dev/null +++ b/php_tools/eslint/README.md @@ -0,0 +1,8 @@ +# ESlint + +ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. In many ways, it is similar to JSLint and JSHint with a few exceptions. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| NPM | https://www.npmjs.com/package/eslint | +| GitHub | https://github.com/eslint/eslint | diff --git a/php_tools/eslint/install.yml b/php_tools/eslint/install.yml new file mode 100644 index 0000000..ecbdfe9 --- /dev/null +++ b/php_tools/eslint/install.yml @@ -0,0 +1,13 @@ +--- + +check: eslint -v | grep -E '[0-9][.0-9]+' || (eslint -v; false) + +all: + type: npm + package: "eslint" + binary: eslint + version: + build_dep: [] + run_dep: [] + pre: + post: diff --git a/php_tools/eslint/options.yml b/php_tools/eslint/options.yml new file mode 100644 index 0000000..947a6c2 --- /dev/null +++ b/php_tools/eslint/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: eslint + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/jq/README.md b/php_tools/jq/README.md new file mode 100644 index 0000000..3fe58c5 --- /dev/null +++ b/php_tools/jq/README.md @@ -0,0 +1,7 @@ +# yq + +jq is a lightweight and flexible command-line JSON processor. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| GitHub | https://github.com/stedolan/jq | diff --git a/php_tools/jq/install.yml b/php_tools/jq/install.yml new file mode 100644 index 0000000..afc4a04 --- /dev/null +++ b/php_tools/jq/install.yml @@ -0,0 +1,7 @@ +--- + +check: jq --version 2>&1 | grep -E '[0-9][.0-9]+' || (jq --version; false) + +all: + type: apt + package: jq diff --git a/php_tools/jq/options.yml b/php_tools/jq/options.yml new file mode 100644 index 0000000..586fc32 --- /dev/null +++ b/php_tools/jq/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: jq + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/lumen/README.md b/php_tools/lumen/README.md new file mode 100644 index 0000000..25ca25a --- /dev/null +++ b/php_tools/lumen/README.md @@ -0,0 +1,10 @@ +# Laravel Lumen installer + +Lumen application installer. + +**Note:** This package is abandoned and no longer maintained. No replacement package was suggested. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| Composer | https://packagist.org/packages/laravel/lumen-installer | +| GitHub | https://github.com/laravel/lumen-installer | diff --git a/php_tools/lumen/install.yml b/php_tools/lumen/install.yml new file mode 100644 index 0000000..dce74fb --- /dev/null +++ b/php_tools/lumen/install.yml @@ -0,0 +1,14 @@ +--- + +check: lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' || (lumen --version; false) + +all: + type: composer + composer: 2 + package: laravel/lumen-installer + # version: + binary: lumen + build_dep: [] + run_dep: [] + # pre: + # post: diff --git a/php_tools/lumen/options.yml b/php_tools/lumen/options.yml new file mode 100644 index 0000000..3e0f499 --- /dev/null +++ b/php_tools/lumen/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: lumen + +# Exclude module build/installation for the following PHP versions +exclude: [5.2, 5.3, 5.4] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/mdl/README.md b/php_tools/mdl/README.md new file mode 100644 index 0000000..dae01d8 --- /dev/null +++ b/php_tools/mdl/README.md @@ -0,0 +1,9 @@ +# mdl + +A tool to check markdown files and flag style issues. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| Gems | https://rubygems.org/gems/mdl | +| Ruby | https://www.ruby-toolbox.com/projects/mdl | +| GitHub | https://github.com/markdownlint/markdownlint | diff --git a/php_tools/mdl/install.yml b/php_tools/mdl/install.yml new file mode 100644 index 0000000..c9411c4 --- /dev/null +++ b/php_tools/mdl/install.yml @@ -0,0 +1,60 @@ +--- + +check: mdl --version | grep -E '[.0-9]+' || (mdl --version; false) + +all: + type: rubygem + package: mdl + # version: + build_dep: [ruby-dev] + run_dep: [ruby] + # pre: + # post: + +7.2: + type: rubygem + version: 0.11.0 + pre: | + gem install chef-utils -v 16.6.14 \ + +7.1: + type: rubygem + version: 0.11.0 + pre: | + gem install chef-utils -v 16.6.14 \ + +7.0: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + +5.6: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + +5.5: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + +5.4: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + +5.3: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ + +5.2: + type: rubygem + version: 0.5.0 + pre: | + gem install mixlib-config -v 2.2.4 \ diff --git a/php_tools/mdl/options.yml b/php_tools/mdl/options.yml new file mode 100644 index 0000000..8186673 --- /dev/null +++ b/php_tools/mdl/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: mdl + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/phpunit/README.md b/php_tools/phpunit/README.md new file mode 100644 index 0000000..acf34a8 --- /dev/null +++ b/php_tools/phpunit/README.md @@ -0,0 +1,10 @@ +# PHPUnit + +PHPUnit is a programmer-oriented testing framework for PHP. +It is an instance of the xUnit architecture for unit testing frameworks. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| Website | https://phpunit.de/ | +| GitHub | https://github.com/sebastianbergmann/phpunit | +| Versions | https://phpunit.de/supported-versions.html | diff --git a/php_tools/phpunit/install.yml b/php_tools/phpunit/install.yml new file mode 100644 index 0000000..54b3aa7 --- /dev/null +++ b/php_tools/phpunit/install.yml @@ -0,0 +1,39 @@ +--- + +check: phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' || (phpunit --version; false) + +all: + type: custom + command: curl -sS -L --fail "https://phar.phpunit.de/phpunit-${PHP_UNIT_VERSION}.phar" -L -o /usr/local/bin/phpunit + build_dep: [] + run_dep: [] + pre: PHP_UNIT_VERSION="9" + post: chmod +x /usr/local/bin/phpunit + +7.2: + type: custom + pre: PHP_UNIT_VERSION="8" + +7.1: + type: custom + pre: PHP_UNIT_VERSION="7" + +7.0: + type: custom + pre: PHP_UNIT_VERSION="6" + +5.6: + type: custom + pre: PHP_UNIT_VERSION="5" + +5.5: + type: custom + pre: PHP_UNIT_VERSION="4" + +5.4: + type: custom + pre: PHP_UNIT_VERSION="4" + +5.3: + type: custom + pre: PHP_UNIT_VERSION="4" diff --git a/php_tools/phpunit/options.yml b/php_tools/phpunit/options.yml new file mode 100644 index 0000000..b990fb6 --- /dev/null +++ b/php_tools/phpunit/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: phpunit + +# Exclude module build/installation for the following PHP versions +exclude: [5.2] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/prestissimo/README.md b/php_tools/prestissimo/README.md new file mode 100644 index 0000000..ebf00d1 --- /dev/null +++ b/php_tools/prestissimo/README.md @@ -0,0 +1,10 @@ +# Prestissimo + +Composer parallel install plugin for Composer 1.x. + +**Note:** This package is abandoned and no longer maintained. No replacement package was suggested. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| Composer | https://packagist.org/packages/hirak/prestissimo | +| GitHub | https://github.com/hirak/prestissimo | diff --git a/php_tools/prestissimo/install.yml b/php_tools/prestissimo/install.yml new file mode 100644 index 0000000..9d49627 --- /dev/null +++ b/php_tools/prestissimo/install.yml @@ -0,0 +1,14 @@ +--- + +# check: + +all: + type: composer + composer: 1 + package: hirak/prestissimo + # version: + # binary: + build_dep: [] + run_dep: [] + # pre: + # post: diff --git a/php_tools/prestissimo/options.yml b/php_tools/prestissimo/options.yml new file mode 100644 index 0000000..8a07ff1 --- /dev/null +++ b/php_tools/prestissimo/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: prestissimo + +# Exclude module build/installation for the following PHP versions +exclude: [5.2] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/pwncat/README.md b/php_tools/pwncat/README.md new file mode 100644 index 0000000..ce9dd8e --- /dev/null +++ b/php_tools/pwncat/README.md @@ -0,0 +1,9 @@ +# pwncat + +Netcat on steroids with Firewall, IDS/IPS evasion, bind and reverse shell, self-injecting shell and port forwarding magic - and its fully scriptable with Python (PSE). + +| Platform | Url | +|----------|------------------------------------------------------------------| +| PyPI | https://pypi.org/project/pwncat/ | +| GitHub | https://github.com/cytopia/pwncat | +| Website | https://pwncat.org/ | diff --git a/php_tools/pwncat/install.yml b/php_tools/pwncat/install.yml new file mode 100644 index 0000000..309e9d7 --- /dev/null +++ b/php_tools/pwncat/install.yml @@ -0,0 +1,13 @@ +--- + +check: pwncat --version 2>&1 | grep -E 'Version [0-9][.0-9]+' || (pwncat --version; false) + +all: + type: pip + version: + build_dep: [] + run_dep: [] + pre: + post: | + ln -s pwncat /usr/local/bin/netcat \ + && ln -s pwncat /usr/local/bin/nc \ diff --git a/php_tools/pwncat/options.yml b/php_tools/pwncat/options.yml new file mode 100644 index 0000000..8c96520 --- /dev/null +++ b/php_tools/pwncat/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: pwncat + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/wpcli/README.md b/php_tools/wpcli/README.md new file mode 100644 index 0000000..ea2d5e3 --- /dev/null +++ b/php_tools/wpcli/README.md @@ -0,0 +1,7 @@ +# WP-CLI + +WP-CLI is the command-line interface for WordPress. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| GitHub | https://github.com/wp-cli/wp-cli | diff --git a/php_tools/wpcli/install.yml b/php_tools/wpcli/install.yml new file mode 100644 index 0000000..4039379 --- /dev/null +++ b/php_tools/wpcli/install.yml @@ -0,0 +1,23 @@ +--- + +check: wp --allow-root --version | grep -E '[0-9][.0-9]+' || (wp --allow-root --version; false) + +all: + type: custom + command: curl -sS -L --fail "${WPCLI_URL}" -L -o /usr/local/bin/wp + build_dep: [] + run_dep: [] + pre: WPCLI_URL="https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" + post: chmod +x /usr/local/bin/wp + +5.5: + type: custom + pre: WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar" + +5.4: + type: custom + pre: WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar" + +5.3: + type: custom + pre: WPCLI_URL="https://github.com/wp-cli/wp-cli/releases/download/v1.5.1/wp-cli-1.5.1.phar" diff --git a/php_tools/wpcli/options.yml b/php_tools/wpcli/options.yml new file mode 100644 index 0000000..9523716 --- /dev/null +++ b/php_tools/wpcli/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: wpcli + +# Exclude module build/installation for the following PHP versions +exclude: [5.2] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/yamllint/README.md b/php_tools/yamllint/README.md new file mode 100644 index 0000000..87956ac --- /dev/null +++ b/php_tools/yamllint/README.md @@ -0,0 +1,8 @@ +# yamllint + +A linter for YAML files. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| PyPI | https://pypi.org/project/yamllint/ | +| GitHub | https://github.com/adrienverge/yamllint | diff --git a/php_tools/yamllint/install.yml b/php_tools/yamllint/install.yml new file mode 100644 index 0000000..1067f94 --- /dev/null +++ b/php_tools/yamllint/install.yml @@ -0,0 +1,11 @@ +--- + +check: yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' || (yamllint --version; false) + +all: + type: pip + version: + build_dep: [] + run_dep: [] + # pre: + # post: diff --git a/php_tools/yamllint/options.yml b/php_tools/yamllint/options.yml new file mode 100644 index 0000000..48622f8 --- /dev/null +++ b/php_tools/yamllint/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: yamllint + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [] diff --git a/php_tools/yq/README.md b/php_tools/yq/README.md new file mode 100644 index 0000000..963429b --- /dev/null +++ b/php_tools/yq/README.md @@ -0,0 +1,8 @@ +# yq + +Command-line YAML/XML/TOML processor. + +| Platform | Url | +|----------|------------------------------------------------------------------| +| PyPI | https://pypi.org/project/yq/ | +| GitHub | https://github.com/kislyuk/yq | diff --git a/php_tools/yq/install.yml b/php_tools/yq/install.yml new file mode 100644 index 0000000..de3d0e0 --- /dev/null +++ b/php_tools/yq/install.yml @@ -0,0 +1,11 @@ +--- + +check: yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false) + +all: + type: pip + version: + build_dep: [] + run_dep: [] + pre: + post: diff --git a/php_tools/yq/options.yml b/php_tools/yq/options.yml new file mode 100644 index 0000000..23472b8 --- /dev/null +++ b/php_tools/yq/options.yml @@ -0,0 +1,11 @@ +--- + +# The name of the module +name: yq + +# Exclude module build/installation for the following PHP versions +exclude: [] + +# In order for this tool to build/install correctly, +# the following tools must have been installed first. +depends: [jq] diff --git a/tests/work/01-test-env-mysqldump-secure.sh b/tests/slim/01-test-env-mysqldump-secure.sh similarity index 100% rename from tests/work/01-test-env-mysqldump-secure.sh rename to tests/slim/01-test-env-mysqldump-secure.sh diff --git a/tests/test.sh b/tests/test.sh index 032d630..98fdee3 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -45,7 +45,7 @@ TAG="${5}" ### ### Run tests ### -if [ "${FLAVOUR}" = "base" ] || [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "work" ]; then +if [ "${FLAVOUR}" = "base" ] || [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "slim" ] || [ "${FLAVOUR}" = "work" ]; then TESTS="$( find "${CWD}" -regex "${CWD}/base/[0-9].+.*\.sh" | sort -u )" for t in ${TESTS}; do printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################" @@ -56,7 +56,7 @@ if [ "${FLAVOUR}" = "base" ] || [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "p done fi -if [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "work" ]; then +if [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "slim" ] || [ "${FLAVOUR}" = "work" ]; then TESTS="$( find "${CWD}" -regex "${CWD}/mods/[0-9].+.*\.sh" | sort -u )" for t in ${TESTS}; do printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################" @@ -67,7 +67,7 @@ if [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "w done fi -if [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "work" ]; then +if [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "slim" ] || [ "${FLAVOUR}" = "work" ]; then TESTS="$( find "${CWD}" -regex "${CWD}/prod/[0-9].+.*\.sh" | sort -u )" for t in ${TESTS}; do printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################" @@ -78,8 +78,8 @@ if [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "work" ]; then done fi -if [ "${FLAVOUR}" = "work" ]; then - TESTS="$( find "${CWD}" -regex "${CWD}/work/[0-9].+.*\.sh" | sort -u )" +if [ "${FLAVOUR}" = "slim" ] || [ "${FLAVOUR}" = "work" ]; then + TESTS="$( find "${CWD}" -regex "${CWD}/slim/[0-9].+.*\.sh" | sort -u )" for t in ${TESTS}; do printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################" printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH})"