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..72e03fc --- /dev/null +++ b/7/Dockerfile.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"] 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/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