diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 78720d9ad..5bd4d5442 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,14 +24,14 @@ jobs: if [[ $GITHUB_REF == refs/tags/* ]]; then TAGS="$TAGS,${GITHUB_REPOSITORY}:latest" - elif [[ $VERSION == "master" ]]; then + elif [[ $VERSION == "main" ]]; then TAGS="$TAGS,${GITHUB_REPOSITORY}:beta" fi GHCR_TAGS="${GHCR_IMAGE}:${VERSION}" if [[ $GITHUB_REF == refs/tags/* ]]; then GHCR_TAGS="$GHCR_TAGS,${GHCR_IMAGE}:latest" - elif [[ $VERSION == "master" ]]; then + elif [[ $VERSION == "main" ]]; then GHCR_TAGS="$GHCR_TAGS,${GHCR_IMAGE}:beta" fi @@ -76,18 +76,19 @@ jobs: docker compose version docker compose --file docker-compose.test.yml up --exit-code-from sut --timeout 10 --build - # Step 8: Build and Push (if not a PR) + # Step 8: Build and Push to DockerHub - name: Build and push + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) uses: docker/build-push-action@v6 with: context: . - push: ${{ github.event_name != 'pull_request' }} + push: true tags: ${{ steps.prepare.outputs.tags }} platforms: ${{ steps.prepare.outputs.platforms }} # Step 9: Push to GitHub Container Registry - name: Push to GHCR - if: github.event_name != 'pull_request' + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) uses: docker/build-push-action@v6 with: context: . diff --git a/Dockerfile b/Dockerfile index 6cdccc7d1..e9afbb665 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,35 +6,35 @@ LABEL Maintainer="Ernesto Serrano " \ # Install packages RUN apk --no-cache add \ - php83 \ - php83-ctype \ - php83-curl \ - php83-dom \ - php83-exif \ - php83-fileinfo \ - php83-fpm \ - php83-gd \ - php83-iconv \ - php83-intl \ - php83-json \ - php83-mbstring \ - php83-mysqli \ - php83-opcache \ - php83-openssl \ - php83-pecl-apcu \ - php83-pdo \ - php83-pdo_mysql \ - php83-pgsql \ - php83-phar \ - php83-session \ - php83-simplexml \ - php83-soap \ - php83-sodium \ - php83-tokenizer \ - php83-xml \ - php83-xmlreader \ - php83-zip \ - php83-zlib \ + php84 \ + php84-ctype \ + php84-curl \ + php84-dom \ + php84-exif \ + php84-fileinfo \ + php84-fpm \ + php84-gd \ + php84-iconv \ + php84-intl \ + php84-json \ + php84-mbstring \ + php84-mysqli \ + php84-opcache \ + php84-openssl \ + php84-pecl-apcu \ + php84-pdo \ + php84-pdo_mysql \ + php84-pgsql \ + php84-phar \ + php84-session \ + php84-simplexml \ + php84-soap \ + php84-sodium \ + php84-tokenizer \ + php84-xml \ + php84-xmlreader \ + php84-zip \ + php84-zlib \ nginx \ runit \ curl \ diff --git a/README.md b/README.md index c2afd6900..76e802c17 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@ -# Docker PHP-FPM 8.3 & Nginx 1.26 on Alpine Linux 3.20 +# Docker PHP-FPM 8.4 & Nginx 1.26 on Alpine Linux 3.21 [![Docker Pulls](https://img.shields.io/docker/pulls/erseco/alpine-php-webserver.svg)](https://hub.docker.com/r/erseco/alpine-php-webserver/) ![Docker Image Size](https://img.shields.io/docker/image-size/erseco/alpine-php-webserver) -![alpine 3.20](https://img.shields.io/badge/alpine-3.20-brightgreen.svg) -![nginx 1.26.0](https://img.shields.io/badge/nginx-1.26-brightgreen.svg) -![php 8.3](https://img.shields.io/badge/php-8.3-brightgreen.svg) +![alpine 3.21](https://img.shields.io/badge/alpine-3.21-brightgreen.svg) +![nginx 1.26.2-r3](https://img.shields.io/badge/nginx-1.26.2-r3-brightgreen.svg) +![php 8.4](https://img.shields.io/badge/php-8.4-brightgreen.svg) ![License MIT](https://img.shields.io/badge/license-MIT-blue.svg) -Example PHP-FPM 8.3 & Nginx 1.26 setup for Docker, build on [Alpine Linux](https://www.alpinelinux.org/). +Example PHP-FPM 8.4 & Nginx 1.26 setup for Docker, build on [Alpine Linux](https://www.alpinelinux.org/). The image is only +/- 25MB large. Repository: https://github.com/erseco/alpine-php-webserver * Built on the lightweight and secure Alpine Linux distribution * Very small Docker image size (+/-25MB) -* Uses PHP 8.3 for better performance, lower cpu usage & memory footprint +* Uses PHP 8.4 for better performance, lower cpu usage & memory footprint * Multi-arch support: 386, amd64, arm/v6, arm/v7, arm64, ppc64le, s390x * Optimized for 100 concurrent users * Optimized to only use resources when there's traffic (by using PHP-FPM's ondemand PM) @@ -22,8 +22,6 @@ Repository: https://github.com/erseco/alpine-php-webserver * The servers Nginx, PHP-FPM run under a non-privileged user (nobody) to make it more secure * The logs of all the services are redirected to the output of the Docker container (visible with `docker logs -f `) * Follows the KISS principle (Keep It Simple, Stupid) to make it easy to understand and adjust the image to your needs -* Also availabe in Apache flavour: `erseco/alpine-php-webserver:apache` - ## Usage @@ -46,8 +44,6 @@ Easily serve your local PHP files using Docker Compose. This setup mounts your ` Here's a simple `docker-compose.yml` example to get you started: ```yaml -version: '3.8' - services: webserver: image: erseco/alpine-php-webserver diff --git a/docker-compose.test.yml b/docker-compose.test.yml index b1da7e558..52b154934 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -1,9 +1,9 @@ -version: '3.5' +--- services: app: build: . sut: - image: alpine:3.21 + image: alpine:latest depends_on: - app command: /tmp/run_tests.sh diff --git a/rootfs/bin/docker-entrypoint.sh b/rootfs/bin/docker-entrypoint.sh index a1cd20344..e89d4eab2 100755 --- a/rootfs/bin/docker-entrypoint.sh +++ b/rootfs/bin/docker-entrypoint.sh @@ -29,12 +29,12 @@ mv "$tmpfile" /etc/nginx/nginx.conf # Replace ENV vars in php configuration files tmpfile=$(mktemp) -cat /etc/php83/conf.d/custom.ini | envsubst "$(env | cut -d= -f1 | sed -e 's/^/$/')" | tee "$tmpfile" > /dev/null -mv "$tmpfile" /etc/php83/conf.d/custom.ini +cat /etc/php84/conf.d/custom.ini | envsubst "$(env | cut -d= -f1 | sed -e 's/^/$/')" | tee "$tmpfile" > /dev/null +mv "$tmpfile" /etc/php84/conf.d/custom.ini tmpfile=$(mktemp) -cat /etc/php83/php-fpm.d/www.conf | envsubst "$(env | cut -d= -f1 | sed -e 's/^/$/')" | tee "$tmpfile" > /dev/null -mv "$tmpfile" /etc/php83/php-fpm.d/www.conf +cat /etc/php84/php-fpm.d/www.conf | envsubst "$(env | cut -d= -f1 | sed -e 's/^/$/')" | tee "$tmpfile" > /dev/null +mv "$tmpfile" /etc/php84/php-fpm.d/www.conf echo "Starting startup scripts in /docker-entrypoint-init.d ..." for script in $(find /docker-entrypoint-init.d/ -executable -type f | sort); do diff --git a/rootfs/etc/php83/conf.d/custom.ini b/rootfs/etc/php84/conf.d/custom.ini similarity index 100% rename from rootfs/etc/php83/conf.d/custom.ini rename to rootfs/etc/php84/conf.d/custom.ini diff --git a/rootfs/etc/php83/php-fpm.d/www.conf b/rootfs/etc/php84/php-fpm.d/www.conf similarity index 100% rename from rootfs/etc/php83/php-fpm.d/www.conf rename to rootfs/etc/php84/php-fpm.d/www.conf diff --git a/rootfs/etc/service/php/run b/rootfs/etc/service/php/run index 71a10460e..95d292bd6 100755 --- a/rootfs/etc/service/php/run +++ b/rootfs/etc/service/php/run @@ -2,4 +2,4 @@ # pipe stderr to stdout and run php-fpm exec 2>&1 -exec php-fpm83 -F \ No newline at end of file +exec php-fpm84 -F \ No newline at end of file diff --git a/run_tests.sh b/run_tests.sh index b71b8813b..d27bdbf90 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,3 +1,3 @@ #!/usr/bin/env sh apk --no-cache add curl -curl --silent --fail http://app:8080 | grep 'PHP 8.3' \ No newline at end of file +curl --silent --fail http://app:8080 | grep 'PHP 8.4' \ No newline at end of file