diff --git a/.github/workflows/build-php7-arm.yml b/.github/workflows/build-php7-arm.yml new file mode 100644 index 0000000..f5e8493 --- /dev/null +++ b/.github/workflows/build-php7-arm.yml @@ -0,0 +1,43 @@ +name: Build PHP 7 ARM 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.arm + pull: true + push: true + # build-args: | + # arg1=value1 + # arg2=value2 + cache-from: type=registry,ref=mashirozx/php-nginx:php7-arm + cache-to: type=inline + tags: | + mashirozx/php-nginx:php7-arm + mashirozx/php-nginx:php7arm-${{steps.vars.outputs.sha_short}} \ No newline at end of file diff --git a/.github/workflows/build-php8-arm.yml b/.github/workflows/build-php8-arm.yml new file mode 100644 index 0000000..f045dc2 --- /dev/null +++ b/.github/workflows/build-php8-arm.yml @@ -0,0 +1,43 @@ +name: Build PHP 8 ARM 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.arm + pull: true + push: true + # build-args: | + # arg1=value1 + # arg2=value2 + cache-from: type=registry,ref=mashirozx/php-nginx:php8-arm + cache-to: type=inline + tags: | + mashirozx/php-nginx:php8-arm + mashirozx/php-nginx:php8-arm-${{steps.vars.outputs.sha_short}} \ No newline at end of file diff --git a/Dockerfile.arm b/Dockerfile.arm new file mode 100644 index 0000000..7bc9663 --- /dev/null +++ b/Dockerfile.arm @@ -0,0 +1,64 @@ +FROM arm64v8/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 \ + php8 \ + php8-ctype \ + php8-curl \ + php8-dom \ + php8-fpm \ + php8-gd \ + php8-intl \ + php8-json \ + php8-mbstring \ + php8-mysqli \ + php8-opcache \ + php8-openssl \ + php8-phar \ + php8-session \ + php8-xml \ + php8-xmlreader \ + php8-zlib \ + supervisor + +# Create symlink so programs depending on `php` still function +RUN ln -s /usr/bin/php8 /usr/bin/php + +# Configure nginx +COPY config/nginx.conf /etc/nginx/nginx.conf + +# Configure PHP-FPM +COPY config/fpm-pool.conf /etc/php8/php-fpm.d/www.conf +COPY config/php.ini /etc/php8/conf.d/custom.ini + +# Configure supervisord +COPY config/supervisord.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/Dockerfile.php7.arm b/Dockerfile.php7.arm new file mode 100644 index 0000000..f4fe9d9 --- /dev/null +++ b/Dockerfile.php7.arm @@ -0,0 +1,64 @@ +FROM arm64v8/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