From 64d95b10ef26d768d9566849e94277b2d7cc2f80 Mon Sep 17 00:00:00 2001 From: Muhamad Aditya Prima Date: Tue, 17 Dec 2024 19:34:39 +0700 Subject: [PATCH 1/3] Added support for php 7.4 on alpine linux --- .gitea/workflows/php7-alpine.yaml | 167 ++++++++++++++++++++++++++++++ 7/Dockerfile.alpine | 65 ++++++++++++ 7/scripts/alpine-setup.sh | 66 ++++++++++++ 3 files changed, 298 insertions(+) create mode 100644 .gitea/workflows/php7-alpine.yaml create mode 100644 7/Dockerfile.alpine create mode 100644 7/scripts/alpine-setup.sh diff --git a/.gitea/workflows/php7-alpine.yaml b/.gitea/workflows/php7-alpine.yaml new file mode 100644 index 0000000..2f0562d --- /dev/null +++ b/.gitea/workflows/php7-alpine.yaml @@ -0,0 +1,167 @@ +name: Build and push PHP 7 container images + +on: + push: + branches: + - php7-alpine + +jobs: + build: + name: Build PHP 7 container images + runs-on: ubuntu-latest + container: + image: ghcr.io/catthehacker/ubuntu:act-latest + strategy: + matrix: + flavors: + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: cli + with_server: "false" + with_database: "false" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: full + with_server: "false" + with_database: "false" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: debug + with_server: "false" + with_database: "false" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: full + with_server: "apache" + with_database: "false" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: full + with_server: "apache" + with_database: "mysql" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: full + with_server: "apache" + with_database: "postgresql" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: debug + with_server: "apache" + with_database: "false" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: debug + with_server: "apache" + with_database: "mysql" + - os: "alpine" + os_version: "3.15" + php_version: "7.4" + php_ver_short: "7" + mode: debug + with_server: "apache" + with_database: "postgresql" + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Login to quay.io + uses: docker/login-action@v3 + with: + registry: quay.io + username: ${{ vars.QUAY_USERNAME }} + password: ${{ secrets.QUAY_SECRET }} + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v3 + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v3 + - if: ${{ matrix.flavors.with_server == 'false' && matrix.flavors.with_database == 'false' }} + name: Build and push php7 + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 7/Dockerfile.${{ matrix.flavors.os }} + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + FLAVOR=${{ matrix.flavors.mode }} + PHP_VERSION=${{ matrix.flavors.php_version }} + PHP_VER_SHORT=${{ matrix.flavors.php_ver_short }} + tags: | + quay.io/sindigilive/php:${{ matrix.flavors.php_version }}-${{ matrix.flavors.mode }}-${{ matrix.flavors.os }} + - if: ${{ matrix.flavors.with_server != 'false' && matrix.flavors.with_database == 'false' }} + name: Build and push php7 with webserver + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 7/Dockerfile.${{ matrix.flavors.with_server }}-${{ matrix.flavors.os }} + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + FLAVOR=${{ matrix.flavors.mode }} + PHP_VERSION=${{ matrix.flavors.php_version }} + PHP_VER_SHORT=${{ matrix.flavors.php_ver_short }} + WITH_APACHE=true + tags: | + quay.io/sindigilive/php:${{ matrix.flavors.php_version }}-${{ matrix.flavors.mode }}-${{ matrix.flavors.with_server }}-${{ matrix.flavors.os }} + - if: ${{ matrix.flavors.with_server != 'false' && matrix.flavors.with_database != 'false' }} + name: Build and push php7 with apache2 and database connector library + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 7/Dockerfile.${{ matrix.flavors.with_server }}-${{ matrix.flavors.os }} + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + FLAVOR=${{ matrix.flavors.mode }} + PHP_VERSION=${{ matrix.flavors.php_version }} + PHP_VER_SHORT=${{ matrix.flavors.php_ver_short }} + WITH_APACHE=true + WITH_DATABASE=${{ matrix.flavors.with_database }} + tags: | + quay.io/sindigilive/php:${{ matrix.flavors.php_version }}-${{ matrix.flavors.mode }}-${{ matrix.flavors.with_server }}-${{ matrix.flavors.with_database }}-${{ matrix.flavors.os }} + # build-latest: + # name: Build latest nginx alpine based container images + # runs-on: ubuntu-latest + # needs: + # - build + # container: + # image: ghcr.io/catthehacker/ubuntu:act-latest + # steps: + # - name: Check out repository code + # uses: actions/checkout@v4 + # - name: Login to quay.io + # uses: docker/login-action@v3 + # with: + # registry: quay.io + # username: ${{ vars.QUAY_USERNAME }} + # password: ${{ secrets.QUAY_SECRET }} + # # - name: Set up QEMU + # # uses: docker/setup-qemu-action@v3 + # - name: Setup Docker buildx + # uses: docker/setup-buildx-action@v3 + # - name: Build and push latest nginx + # uses: docker/build-push-action@v5 + # with: + # # platforms: linux/amd64,linux/arm64 + # push: true + # context: . + # file: Dockerfile.alpine + # tags: | + # quay.io/sindigilive/nginx:alpine + # quay.io/sindigilive/nginx:latest diff --git a/7/Dockerfile.alpine b/7/Dockerfile.alpine new file mode 100644 index 0000000..aa4eb79 --- /dev/null +++ b/7/Dockerfile.alpine @@ -0,0 +1,65 @@ +# PHP 7.2 == 3.9 +# PHP 7.3 == 3.10 +# PHP 7.4 == 3.15 +ARG OS_VERSION=3.15 + +FROM quay.io/sindigilive/alpine:${OS_VERSION} AS builder +LABEL maintainer=" map@sindigilive.com" + +ARG FLAVOR=cli +ARG WITH_APACHE=false +ARG WITH_DATABASE=false +ARG PHP_VERSION=7.4 +ARG PHP_VER_SHORT=7 + +ENV FLAVOR=${FLAVOR} +ENV WITH_APACHE=${WITH_APACHE} +ENV WITH_DATABASE=${WITH_DATABASE} +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} + +WORKDIR /root + +ADD 7/scripts/alpine-setup.sh /tmp/setup.sh + +# Create directory, and install required php app +RUN /bin/mkdir -p /app ; \ + /sbin/apk add --update --no-cache \ + php${PHP_VER_SHORT} php${PHP_VER_SHORT}-common \ + php${PHP_VER_SHORT}-cli ; \ + /bin/chmod +x /tmp/setup.sh; \ + /bin/sh /tmp/setup.sh; \ + /bin/rm -f /tmp/*.sh; + +# Create symlinks to /usr/bin/php in case it doesn't exists +RUN ln -ns /usr/bin/php${PHP_VER_SHORT} /usr/bin/php ; exit 0 + +# CLEAN APK CACHES +RUN rm -vrf /var/cache/apk/* + +FROM scratch + +ARG PHP_VERSION=5.6 +ARG PHP_VER_SHORT=5 + +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} + +LABEL maintainer="Muhamad Aditya Prima " +LABEL name="php" +LABEL version="${PHP_VERSION}" +LABEL distribution-scope="public" + +#labels for container catalog +LABEL summary="PHP ${PHP_VERSION} on alpine based container image" +LABEL description="Provide php on alpine based container base image" +LABEL io.k8s.description="Very small alpine linux container image" +LABEL io.k8s.display-name="PHP ${PHP_VERSION}" + +COPY --from=builder / / + +WORKDIR /app + +STOPSIGNAL SIGQUIT + +CMD ["/usr/bin/php", "-v"] diff --git a/7/scripts/alpine-setup.sh b/7/scripts/alpine-setup.sh new file mode 100644 index 0000000..7844136 --- /dev/null +++ b/7/scripts/alpine-setup.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +PHP_LIST="bcmath,brotli,bz2,calendar,cgi, +ctype,curl,dba,dom,embed, +enchant,exif,fileinfo,ftp,gd, +gettext,gmp,iconv,imap,intl, +json,ldap,mbstring,opcache,openssl, +pcntl,pdo,pear,phar,posix, +pspell,shmop,snmp,soap,sockets, +sysvmsg,sysvsem,sysvshm,tidy,tokenizer, +xml,xmlreader,xmlrpc,xsl,zip" +PHP_DEPS="" +# apache2 configurations +SERVER_ROOT="/app" +APP_ROOT="$SERVER_ROOT/htdocs" +LOG_LEVEL="info" + +# Setup php flavor + +if [[ "$FLAVOR" == "debug" ]]; then + LOG_LEVEL="debug" + /sbin/apk add --update --no-cache php$PHP_VER_SHORT-dbg \ + php$PHP_VER_SHORT-phpdbg php$PHP_VER_SHORT-dev; +fi + +if [ "$FLAVOR" == "full" ] || [ "$FLAVOR" == "debug" ]; then + for i in $(echo $PHP_LIST | tr "," "\n"); do + PHP_DEPS="${PHP_DEPS} php$PHP_VER_SHORT-$i "; + done + +/sbin/apk add --update --no-cache $PHP_DEPS; +fi + +# Only setup apache with full flavor parameters +if [ "$WITH_APACHE" == "true" ]; then + if [ "$FLAVOR" == "full" ] || [ "$FLAVOR" == "debug" ]; then + /usr/sbin/addgroup -g 10001 apache ; + /usr/sbin/adduser -D -u 10001 -G apache -s /bin/sh -h $APP_ROOT apache ; + /sbin/apk add --update --no-cache apache2 php$PHP_VER_SHORT-apache2 ; + + sed -i "s|ServerRoot /var/www|ServerRoot ${SERVER_ROOT}|" /etc/apache2/httpd.conf ; + sed -i "s|ServerAdmin you@example.com| ServerAdmin map@sindigilive.com|" /etc/apache2/httpd.conf ; + sed -i "s|DocumentRoot \"/var/www/localhost/htdocs\"|DocumentRoot \"${APP_ROOT}\"|" /etc/apache2/httpd.conf ; + sed -i "s|Directory \"/var/www/localhost/htdocs\"|Directory \"${APP_ROOT}\"|" /etc/apache2/httpd.conf ; + sed -i "s|AllowOverride None|AllowOverride All|" /etc/apache2/httpd.conf ; + sed -i "s|ErrorLog .*|ErrorLog /dev/stderr \nTransferLog /dev/stdout|" /etc/apache2/httpd.conf ; + sed -i "s|CustomLog .* combined|CustomLog /dev/stdout combined|" /etc/apache2/httpd.conf ; + sed -i "s|LogLevel .*|LogLevel ${LOG_LEVEL}|" /etc/apache2/httpd.conf ; + sed -i "s|#LoadModule rewrite_module|LoadModule rewrite_module|" /etc/apache2/httpd.conf ; + sed -i "s|#LoadModule deflate_module|LoadModule deflate_module|" /etc/apache2/httpd.conf ; + sed -i "s|#LoadModule expires_module|LoadModule expires_module|" /etc/apache2/httpd.conf ; + sed -i "s|/var/www/localhost/cgi-bin/|/app/cgi-bin/|" /etc/apache2/httpd.conf ; + sed -i "s|Require host .example.com|#Require host .example.com|" /etc/apache2/conf.d/info.conf ; + sed -i "s|Require ip 127|Require all granted|" /etc/apache2/conf.d/info.conf ; + sed -i "s|/run/apache2/httpd.pid|${SERVER_ROOT}/run/httpd.pid|" /etc/apache2/conf.d/mpm.conf ; + fi +fi + +if [ "$WITH_DATABASE" == "postgresql" ]; then + /sbin/apk add --update --no-cache php$PHP_VER_SHORT-pdo php$PHP_VER_SHORT-pdo_pgsql php$PHP_VER_SHORT-pgsql ; +fi + +if [ "$WITH_DATABASE" == "mysql" ]; then + /sbin/apk add --update --no-cache php$PHP_VER_SHORT-pdo php$PHP_VER_SHORT-pdo_mysql php$PHP_VER_SHORT-mysql \ + php$PHP_VER_SHORT-mysqli php$PHP_VER_SHORT-mysqlnd ; +fi \ No newline at end of file From 58895d367e11de8769be5b70a3544490ec587a9f Mon Sep 17 00:00:00 2001 From: Muhamad Aditya Prima Date: Tue, 17 Dec 2024 20:45:43 +0700 Subject: [PATCH 2/3] Updated php7-alpine --- 7/Dockerfile.alpine | 2 +- 7/Dockerfile.apache-alpine | 78 ++++++++++++++++++++++++++++++++++++ 7/Dockerfile.composer-alpine | 65 ++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 7/Dockerfile.apache-alpine create mode 100644 7/Dockerfile.composer-alpine diff --git a/7/Dockerfile.alpine b/7/Dockerfile.alpine index aa4eb79..72e03fc 100644 --- a/7/Dockerfile.alpine +++ b/7/Dockerfile.alpine @@ -1,5 +1,5 @@ # PHP 7.2 == 3.9 -# PHP 7.3 == 3.10 +# PHP 7.3 == 3.12 # PHP 7.4 == 3.15 ARG OS_VERSION=3.15 diff --git a/7/Dockerfile.apache-alpine b/7/Dockerfile.apache-alpine new file mode 100644 index 0000000..5c64c41 --- /dev/null +++ b/7/Dockerfile.apache-alpine @@ -0,0 +1,78 @@ +# PHP 7.2 == 3.9 +# PHP 7.3 == 3.12 +# PHP 7.4 == 3.15 +ARG OS_VERSION=3.15 + +FROM quay.io/sindigilive/alpine:${OS_VERSION} AS builder +LABEL maintainer=" map@sindigilive.com" + +ARG FLAVOR=cli +ARG WITH_APACHE=false +ARG WITH_DATABASE=false +ARG PHP_VERSION=7.4 +ARG PHP_VER_SHORT=7 + +ENV FLAVOR=${FLAVOR} +ENV WITH_APACHE=${WITH_APACHE} +ENV WITH_DATABASE=${WITH_DATABASE} +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} +ENV SERVER_ROOT=/app + +WORKDIR /root + +ADD 7/scripts/alpine-setup.sh /tmp/setup.sh +ADD scripts/entrypoint.sh /usr/local/bin/ + +# Create directory, and install required php app +RUN /bin/mkdir -p /app ; \ + /sbin/apk add --update --no-cache \ + php${PHP_VER_SHORT} php${PHP_VER_SHORT}-common \ + php${PHP_VER_SHORT}-cli ; \ + /bin/chmod +x /tmp/setup.sh /usr/local/bin/entrypoint.sh ; \ + /bin/sh /tmp/setup.sh; \ + /bin/rm -f /tmp/*.sh; + +ADD htdocs ${SERVER_ROOT}/htdocs + +# Create symlinks to /usr/bin/php in case it doesn't exists +RUN ln -ns /usr/bin/php${PHP_VER_SHORT} /usr/bin/php ; exit 0 + +# CLEAN APK CACHES +RUN sed -i "s|#version#|${PHP_VERSION}|" /app/htdocs/index.html ; \ + sed -i "s|#os#|alpine|" /app/htdocs/index.html ; \ + sed -i "s|#flavor#|${FLAVOR}|" /app/htdocs/index.html ; \ + mkdir -p ${SERVER_ROOT}/logs ${SERVER_ROOT}/run /run/apache2 ; \ + ln -s /usr/lib/apache2 ${SERVER_ROOT}/modules ; \ + chmod -R 755 ${SERVER_ROOT}/logs ${SERVER_ROOT/run} ; \ + chown -R apache:apache ${SERVER_ROOT}/htdocs ${SERVER_ROOT}/logs ${SERVER_ROOT}/run /run/apache2 ; \ + rm -vrf /var/cache/apk/* + +FROM scratch + +ARG PHP_VERSION=5.6 +ARG PHP_VER_SHORT=5 + +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} + +LABEL maintainer="Muhamad Aditya Prima " +LABEL name="php" +LABEL version="${PHP_VERSION}" +LABEL distribution-scope="public" + +#labels for container catalog +LABEL summary="PHP ${PHP_VERSION} on alpine based container image" +LABEL description="Provide php on alpine based container base image" +LABEL io.k8s.description="Very small alpine linux container image" +LABEL io.k8s.display-name="PHP ${PHP_VERSION}" + +COPY --from=builder / / + +USER apache + +WORKDIR /app/htdocs + +STOPSIGNAL SIGQUIT + +CMD ["/usr/bin/php", "-v"] diff --git a/7/Dockerfile.composer-alpine b/7/Dockerfile.composer-alpine new file mode 100644 index 0000000..72e03fc --- /dev/null +++ b/7/Dockerfile.composer-alpine @@ -0,0 +1,65 @@ +# PHP 7.2 == 3.9 +# PHP 7.3 == 3.12 +# PHP 7.4 == 3.15 +ARG OS_VERSION=3.15 + +FROM quay.io/sindigilive/alpine:${OS_VERSION} AS builder +LABEL maintainer=" map@sindigilive.com" + +ARG FLAVOR=cli +ARG WITH_APACHE=false +ARG WITH_DATABASE=false +ARG PHP_VERSION=7.4 +ARG PHP_VER_SHORT=7 + +ENV FLAVOR=${FLAVOR} +ENV WITH_APACHE=${WITH_APACHE} +ENV WITH_DATABASE=${WITH_DATABASE} +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} + +WORKDIR /root + +ADD 7/scripts/alpine-setup.sh /tmp/setup.sh + +# Create directory, and install required php app +RUN /bin/mkdir -p /app ; \ + /sbin/apk add --update --no-cache \ + php${PHP_VER_SHORT} php${PHP_VER_SHORT}-common \ + php${PHP_VER_SHORT}-cli ; \ + /bin/chmod +x /tmp/setup.sh; \ + /bin/sh /tmp/setup.sh; \ + /bin/rm -f /tmp/*.sh; + +# Create symlinks to /usr/bin/php in case it doesn't exists +RUN ln -ns /usr/bin/php${PHP_VER_SHORT} /usr/bin/php ; exit 0 + +# CLEAN APK CACHES +RUN rm -vrf /var/cache/apk/* + +FROM scratch + +ARG PHP_VERSION=5.6 +ARG PHP_VER_SHORT=5 + +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} + +LABEL maintainer="Muhamad Aditya Prima " +LABEL name="php" +LABEL version="${PHP_VERSION}" +LABEL distribution-scope="public" + +#labels for container catalog +LABEL summary="PHP ${PHP_VERSION} on alpine based container image" +LABEL description="Provide php on alpine based container base image" +LABEL io.k8s.description="Very small alpine linux container image" +LABEL io.k8s.display-name="PHP ${PHP_VERSION}" + +COPY --from=builder / / + +WORKDIR /app + +STOPSIGNAL SIGQUIT + +CMD ["/usr/bin/php", "-v"] From 797635d60ef16e28a6942a87426c1d60a7e92d3d Mon Sep 17 00:00:00 2001 From: Muhamad Aditya Prima Date: Wed, 18 Dec 2024 00:49:37 +0700 Subject: [PATCH 3/3] Removed separate composer, will integrate in all flavor build --- 7/Dockerfile.composer-alpine | 65 ------------------------------------ 1 file changed, 65 deletions(-) delete mode 100644 7/Dockerfile.composer-alpine diff --git a/7/Dockerfile.composer-alpine b/7/Dockerfile.composer-alpine deleted file mode 100644 index 72e03fc..0000000 --- a/7/Dockerfile.composer-alpine +++ /dev/null @@ -1,65 +0,0 @@ -# PHP 7.2 == 3.9 -# PHP 7.3 == 3.12 -# PHP 7.4 == 3.15 -ARG OS_VERSION=3.15 - -FROM quay.io/sindigilive/alpine:${OS_VERSION} AS builder -LABEL maintainer=" map@sindigilive.com" - -ARG FLAVOR=cli -ARG WITH_APACHE=false -ARG WITH_DATABASE=false -ARG PHP_VERSION=7.4 -ARG PHP_VER_SHORT=7 - -ENV FLAVOR=${FLAVOR} -ENV WITH_APACHE=${WITH_APACHE} -ENV WITH_DATABASE=${WITH_DATABASE} -ENV PHP_VERSION=${PHP_VERSION} -ENV PHP_VER_SHORT=${PHP_VER_SHORT} - -WORKDIR /root - -ADD 7/scripts/alpine-setup.sh /tmp/setup.sh - -# Create directory, and install required php app -RUN /bin/mkdir -p /app ; \ - /sbin/apk add --update --no-cache \ - php${PHP_VER_SHORT} php${PHP_VER_SHORT}-common \ - php${PHP_VER_SHORT}-cli ; \ - /bin/chmod +x /tmp/setup.sh; \ - /bin/sh /tmp/setup.sh; \ - /bin/rm -f /tmp/*.sh; - -# Create symlinks to /usr/bin/php in case it doesn't exists -RUN ln -ns /usr/bin/php${PHP_VER_SHORT} /usr/bin/php ; exit 0 - -# CLEAN APK CACHES -RUN rm -vrf /var/cache/apk/* - -FROM scratch - -ARG PHP_VERSION=5.6 -ARG PHP_VER_SHORT=5 - -ENV PHP_VERSION=${PHP_VERSION} -ENV PHP_VER_SHORT=${PHP_VER_SHORT} - -LABEL maintainer="Muhamad Aditya Prima " -LABEL name="php" -LABEL version="${PHP_VERSION}" -LABEL distribution-scope="public" - -#labels for container catalog -LABEL summary="PHP ${PHP_VERSION} on alpine based container image" -LABEL description="Provide php on alpine based container base image" -LABEL io.k8s.description="Very small alpine linux container image" -LABEL io.k8s.display-name="PHP ${PHP_VERSION}" - -COPY --from=builder / / - -WORKDIR /app - -STOPSIGNAL SIGQUIT - -CMD ["/usr/bin/php", "-v"]