From f05153fc650b3b967d7c6eb91c0739af3a211061 Mon Sep 17 00:00:00 2001 From: mashirozx Date: Wed, 10 Nov 2021 14:18:08 +0800 Subject: [PATCH] Add php 7 image build workflow --- .github/workflows/build-php7.yml | 43 +++++++++++++ .github/workflows/build-php8.yml | 43 +++++++++++++ .github/workflows/build.yaml | 2 +- .github/workflows/dockerhub-description.yaml | 2 +- Dockerfile.php7 | 64 ++++++++++++++++++++ config/supervisord.php7.conf | 23 +++++++ 6 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build-php7.yml create mode 100644 .github/workflows/build-php8.yml create mode 100644 Dockerfile.php7 create mode 100644 config/supervisord.php7.conf diff --git a/.github/workflows/build-php7.yml b/.github/workflows/build-php7.yml new file mode 100644 index 0000000..81d46c3 --- /dev/null +++ b/.github/workflows/build-php7.yml @@ -0,0 +1,43 @@ +name: Build PHP 7 Image + +on: + push: + branches: + - master + +jobs: + docker-build: + runs-on: ubuntu-latest + + steps: + - name: 🔍 Checkout code + uses: actions/checkout@v2 + + - name: 🏗️ Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: 🔑 Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: 🎃 Set up outputs + id: vars + run: | + echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + - name: ⚓ Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile.php7 + pull: true + push: true + # build-args: | + # arg1=value1 + # arg2=value2 + cache-from: type=registry,ref=mashirozx/php-nginx:php7 + cache-to: type=inline + tags: | + mashirozx/php-nginx:php7 + mashirozx/php-nginx:php7-${{steps.vars.outputs.sha_short}} \ No newline at end of file diff --git a/.github/workflows/build-php8.yml b/.github/workflows/build-php8.yml new file mode 100644 index 0000000..34131f7 --- /dev/null +++ b/.github/workflows/build-php8.yml @@ -0,0 +1,43 @@ +name: Build PHP 8 Image + +on: + push: + branches: + - master + +jobs: + docker-build: + runs-on: ubuntu-latest + + steps: + - name: 🔍 Checkout code + uses: actions/checkout@v2 + + - name: 🏗️ Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: 🔑 Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: 🎃 Set up outputs + id: vars + run: | + echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + - name: ⚓ Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + pull: true + push: true + # build-args: | + # arg1=value1 + # arg2=value2 + cache-from: type=registry,ref=mashirozx/php-nginx:php8 + cache-to: type=inline + tags: | + mashirozx/php-nginx:php8 + mashirozx/php-nginx:php8-${{steps.vars.outputs.sha_short}} \ No newline at end of file diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e8bbfd2..283974f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -2,7 +2,7 @@ name: Test & build Docker image on: push: - branches: [ master ] + branches: [ master-no ] tags: ['*'] pull_request: diff --git a/.github/workflows/dockerhub-description.yaml b/.github/workflows/dockerhub-description.yaml index fa153ad..dbe76e4 100644 --- a/.github/workflows/dockerhub-description.yaml +++ b/.github/workflows/dockerhub-description.yaml @@ -2,7 +2,7 @@ name: Update Docker Hub Description on: push: branches: - - master + - master-no paths: - README.md - .github/workflows/dockerhub-description.yml diff --git a/Dockerfile.php7 b/Dockerfile.php7 new file mode 100644 index 0000000..9f84f63 --- /dev/null +++ b/Dockerfile.php7 @@ -0,0 +1,64 @@ +FROM alpine:3.14 +LABEL Maintainer="Tim de Pater " +LABEL Description="Lightweight container with Nginx 1.20 & PHP 8.0 based on Alpine Linux." + +# Install packages and remove default server definition +RUN apk --no-cache add \ + curl \ + nginx \ + php7 \ + php7-ctype \ + php7-curl \ + php7-dom \ + php7-fpm \ + php7-gd \ + php7-intl \ + php7-json \ + php7-mbstring \ + php7-mysqli \ + php7-opcache \ + php7-openssl \ + php7-phar \ + php7-session \ + php7-xml \ + php7-xmlreader \ + php7-zlib \ + supervisor + +# Create symlink so programs depending on `php` still function +# RUN ln -s /usr/bin/php7 /usr/bin/php + +# Configure nginx +COPY config/nginx.conf /etc/nginx/nginx.conf + +# Configure PHP-FPM +COPY config/fpm-pool.conf /etc/php7/php-fpm.d/www.conf +COPY config/php.ini /etc/php7/conf.d/custom.ini + +# Configure supervisord +COPY config/supervisord.php7.conf /etc/supervisor/conf.d/supervisord.conf + +# Setup document root +RUN mkdir -p /var/www/html + +# Make sure files/folders needed by the processes are accessable when they run under the nobody user +RUN chown -R nobody.nobody /var/www/html && \ + chown -R nobody.nobody /run && \ + chown -R nobody.nobody /var/lib/nginx && \ + chown -R nobody.nobody /var/log/nginx + +# Switch to use a non-root user from here on +USER nobody + +# Add application +WORKDIR /var/www/html +COPY --chown=nobody src/ /var/www/html/ + +# Expose the port nginx is reachable on +EXPOSE 8080 + +# Let supervisord start nginx & php-fpm +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] + +# Configure a healthcheck to validate that everything is up&running +HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:8080/fpm-ping diff --git a/config/supervisord.php7.conf b/config/supervisord.php7.conf new file mode 100644 index 0000000..edd5207 --- /dev/null +++ b/config/supervisord.php7.conf @@ -0,0 +1,23 @@ +[supervisord] +nodaemon=true +logfile=/dev/null +logfile_maxbytes=0 +pidfile=/run/supervisord.pid + +[program:php-fpm] +command=php-fpm7 -F +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +autorestart=false +startretries=0 + +[program:nginx] +command=nginx -g 'daemon off;' +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +autorestart=false +startretries=0