diff --git a/.gitea/workflows/php8-alpine.yaml b/.gitea/workflows/php8-alpine.yaml new file mode 100644 index 0000000..385daf7 --- /dev/null +++ b/.gitea/workflows/php8-alpine.yaml @@ -0,0 +1,223 @@ +name: Build and push PHP 8 container images + +on: + push: + branches: + - php8-alpine + +jobs: + builder: + name: Build PHP 8 builder container images + runs-on: ubuntu-latest + container: + image: ghcr.io/catthehacker/ubuntu:act-latest + strategy: + matrix: + flavors: + - os: "alpine" + os_version: "3.16" + php_version: "8.0" + php_ver_short: "8" + - os: "alpine" + os_version: "3.19" + php_version: "8.1" + php_ver_short: "81" + - os: "alpine" + os_version: "3.21" + php_version: "8.2" + php_ver_short: "83" + - os: "alpine" + os_version: "3.21" + php_version: "8.3" + php_ver_short: "83" + 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 php8 builder + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 8/Dockerfile.${{ matrix.flavors.os }}-builder + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + PHP_VERSION=${{ matrix.flavors.php_version }} + PHP_VER_SHORT=${{ matrix.flavors.php_ver_short }} + tags: | + quay.io/sindigilive/php:${{ matrix.flavors.php_version }}-builder-${{ matrix.flavors.os }} + + flavors: + name: Build PHP 8 container images + runs-on: ubuntu-latest + needs: + - builder + container: + image: ghcr.io/catthehacker/ubuntu:act-latest + strategy: + matrix: + flavors: + - os: "alpine" + os_version: "3.16" + php_version: "8.0" + php_ver_short: "8" + with_server: "false" + with_database: "false" + - os: "alpine" + os_version: "3.19" + php_version: "8.1" + php_ver_short: "81" + with_server: "false" + with_database: "false" + - os: "alpine" + os_version: "3.21" + php_version: "8.2" + php_ver_short: "82" + with_server: "false" + with_database: "false" + - os: "alpine" + os_version: "3.21" + php_version: "8.3" + php_ver_short: "83" + with_server: "false" + with_database: "false" + + - os: "alpine" + os_version: "3.16" + php_version: "8.0" + php_ver_short: "8" + with_server: "apache" + with_database: "false" + - os: "alpine" + os_version: "3.19" + php_version: "8.1" + php_ver_short: "81" + with_server: "apache" + with_database: "false" + - os: "alpine" + os_version: "3.21" + php_version: "8.2" + php_ver_short: "82" + with_server: "apache" + with_database: "false" + - os: "alpine" + os_version: "3.21" + php_version: "8.3" + php_ver_short: "83" + with_server: "apache" + with_database: "false" + + - os: "alpine" + os_version: "3.16" + php_version: "8.0" + php_ver_short: "8" + with_server: "apache" + with_database: "mysql" + - os: "alpine" + os_version: "3.19" + php_version: "8.1" + php_ver_short: "81" + with_server: "apache" + with_database: "mysql" + - os: "alpine" + os_version: "3.21" + php_version: "8.2" + php_ver_short: "82" + with_server: "apache" + with_database: "mysql" + - os: "alpine" + os_version: "3.21" + php_version: "8.3" + php_ver_short: "83" + with_server: "apache" + with_database: "mysql" + + - os: "alpine" + os_version: "3.16" + php_version: "8.0" + php_ver_short: "8" + with_server: "apache" + with_database: "postgresql" + - os: "alpine" + os_version: "3.19" + php_version: "8.1" + php_ver_short: "81" + with_server: "apache" + with_database: "postgresql" + - os: "alpine" + os_version: "3.21" + php_version: "8.2" + php_ver_short: "82" + with_server: "apache" + with_database: "postgresql" + - os: "alpine" + os_version: "3.21" + php_version: "8.3" + php_ver_short: "83" + 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 php8 + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 8/Dockerfile.${{ matrix.flavors.os }} + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + 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.os }} + - if: ${{ matrix.flavors.with_server != 'false' && matrix.flavors.with_database == 'false' }} + name: Build and push php8 with webserver + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 8/Dockerfile.${{ matrix.flavors.os }}-${{ matrix.flavors.with_server }} + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + 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.with_server }}-${{ matrix.flavors.os }} + - if: ${{ matrix.flavors.with_server != 'false' && matrix.flavors.with_database != 'false' }} + name: Build and push php8 with webserver and database connector library + uses: docker/build-push-action@v5 + with: + push: true + context: . + file: 8/Dockerfile.${{ matrix.flavors.os }}-${{ matrix.flavors.with_server }} + build-args: | + OS_VERSION=${{ matrix.flavors.os_version }} + 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.with_server }}-${{ matrix.flavors.with_database }}-${{ matrix.flavors.os }} \ No newline at end of file diff --git a/8/Dockerfile.alpine b/8/Dockerfile.alpine new file mode 100644 index 0000000..5da837b --- /dev/null +++ b/8/Dockerfile.alpine @@ -0,0 +1,48 @@ +# PHP 8.0 == 3.16 +# PHP 8.1 == 3.19 +# PHP 8.2 == 3.21 +# PHP 8.3 == 3.21 +ARG OS_VERSION=3.21 +ARG PHP_VERSION=8.3 + +FROM quay.io/sindigilive/php:${PHP_VERSION}-builder-alpine AS builder + +ARG WITH_APACHE=false +ARG WITH_DATABASE=false + +ENV WITH_APACHE=${WITH_APACHE} +ENV WITH_DATABASE=${WITH_DATABASE} + +# Create directory, and install required php app +RUN /bin/sh /tmp/setup.sh; \ + /bin/rm -f /tmp/*.sh; \ + rm -vrf /var/cache/apk/* + +FROM scratch + +ARG PHP_VERSION=8.3 +ARG PHP_VER_SHORT=8 + +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 + +USER php + +STOPSIGNAL SIGQUIT + +CMD ["/usr/bin/php", "-v"] diff --git a/8/Dockerfile.alpine-apache b/8/Dockerfile.alpine-apache new file mode 100644 index 0000000..d80be17 --- /dev/null +++ b/8/Dockerfile.alpine-apache @@ -0,0 +1,62 @@ +# PHP 8.0 == 3.16 +# PHP 8.1 == 3.19 +# PHP 8.2 == 3.21 +# PHP 8.3 == 3.21 +ARG OS_VERSION=3.21 +ARG PHP_VERSION=8.3 + +FROM quay.io/sindigilive/php:${PHP_VERSION}-builder-alpine AS builder + +USER root + +ARG WITH_APACHE=true +ARG WITH_DATABASE=false + +ENV WITH_APACHE=${WITH_APACHE} +ENV WITH_DATABASE=${WITH_DATABASE} +ENV APP_ROOT=${SERVER_ROOT}/htdocs + +ADD scripts/apache-entrypoint.sh /usr/local/bin/entrypoint +ADD htdocs ${APP_ROOT} + +# Create directory, and install required php app +RUN /bin/sh /tmp/setup.sh; \ + /bin/rm -f /tmp/*.sh; \ + rm -vrf /var/cache/apk/*; \ + chmod +rx /usr/local/bin/entrypoint ; \ + sed -i "s|#version#|${PHP_VERSION}|" /app/htdocs/index.html ; \ + sed -i "s|#os#|alpine|" /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=8.3 +ARG PHP_VER_SHORT=83 + +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/local/bin/entrypoint"] diff --git a/8/Dockerfile.alpine-builder b/8/Dockerfile.alpine-builder new file mode 100644 index 0000000..dcde2f3 --- /dev/null +++ b/8/Dockerfile.alpine-builder @@ -0,0 +1,40 @@ +# PHP 8.0 == 3.16 +# PHP 8.1 == 3.19 +# PHP 8.2 == 3.21 +# PHP 8.3 == 3.21 +ARG OS_VERSION=3.21 + +FROM quay.io/sindigilive/alpine:${OS_VERSION} +LABEL maintainer=" map@sindigilive.com" + +ARG PHP_VERSION=8.3 +ARG PHP_VER_SHORT=83 +ARG COMPOSER_VERSION=2.8.4 + +ENV PHP_VERSION=${PHP_VERSION} +ENV PHP_VER_SHORT=${PHP_VER_SHORT} +ENV COMPOSER_VERSION=${COMPOSER_VERSION} +ENV SERVER_ROOT=/app + +WORKDIR ${SERVER_ROOT} + +ADD 8/scripts/alpine-setup.sh /tmp/setup.sh +ADD https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar /usr/local/bin/composer + +# Create directory, and install required php app +RUN /bin/mkdir -p /app ; \ + /usr/sbin/addgroup -g 10000 php ; \ + /usr/sbin/adduser -D -u 10000 -G php -s /bin/sh -h $SERVER_ROOT php ; \ + /bin/chown -R php:php /app ; \ + /sbin/apk add --update --no-cache \ + php${PHP_VER_SHORT} php${PHP_VER_SHORT}-common \ + php${PHP_VER_SHORT}-cli php${PHP_VER_SHORT}-phar \ + php${PHP_VER_SHORT}-iconv php${PHP_VER_SHORT}-mbstring \ + php${PHP_VER_SHORT}-json ; \ + /bin/chmod +rx /tmp/setup.sh /usr/local/bin/composer ; + +# 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/* \ No newline at end of file diff --git a/8/scripts/alpine-setup.sh b/8/scripts/alpine-setup.sh new file mode 100644 index 0000000..9f0ef7d --- /dev/null +++ b/8/scripts/alpine-setup.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +PHP_LIST="bcmath,bz2,calendar,cgi, +ctype,curl,dba,dom,embed, +enchant,exif,fileinfo,ftp,gd, +gettext,gmp,imap,intl, +ldap,opcache,openssl, +pcntl,pdo,pear,posix, +pspell,shmop,snmp,soap,sockets, +sysvmsg,sysvsem,sysvshm,tidy,tokenizer, +xml,xmlreader,xmlwriter,xmlrpc,xsl,zip" +PHP_DEPS="" +# apache2 configurations +SERVER_ROOT="/app" +APP_ROOT="$SERVER_ROOT/htdocs" +LOG_LEVEL="info" + +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; + +# Setup apache2 +if [ "$WITH_APACHE" == "true" ]; 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 + +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