From 1f0771a19cc8b7e907cda932b625f646473593b6 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Wed, 12 Mar 2025 23:33:45 +0100 Subject: [PATCH] ci: optimize docker build chore: update docker --- .github/workflows/docker-build.yml | 53 ++++++++++++++++++++++++++++++ Dockerfile | 53 +++++++----------------------- 2 files changed, 64 insertions(+), 42 deletions(-) create mode 100644 .github/workflows/docker-build.yml diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 0000000..78c36c9 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,53 @@ +name: Build and Push Docker Images + +on: + release: + types: [published] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=tag + latest + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=user/app:buildcache + cache-to: type=registry,ref=user/app:buildcache,mode=max diff --git a/Dockerfile b/Dockerfile index ee2eb5e..75293d5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,37 +1,4 @@ -FROM php:8.3-fpm-alpine3.20 - -# Install system dependencies -RUN apk add --no-cache \ - nginx \ - supervisor \ - libpq \ - nodejs \ - npm \ - git \ - curl \ - zip \ - unzip \ - imagemagick-dev \ - chromium - -# Configure Chromium Path -ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium -ENV PUPPETEER_DOCKER=1 - -#RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS imagemagick-dev \ -#&& pecl install imagick \ -#&& docker-php-ext-enable imagick \ -#&& apk del .build-deps \ - -#RUN docker-php-ext-install imagick \ -# && docker-php-ext-enable imagick - -RUN mkdir -p /usr/src/php/ext/imagick -RUN chmod 777 /usr/src/php/ext/imagick -RUN curl -fsSL https://github.com/Imagick/imagick/archive/refs/tags/3.7.0.tar.gz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 - -# Install PHP extensions -RUN docker-php-ext-install opcache imagick +FROM bnussbau/php:8.3-fpm-opcache-imagick-puppeteer-alpine3.20 # Install composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer @@ -39,14 +6,6 @@ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Set working directory WORKDIR /var/www/html -# Copy application files -COPY --chown=www-data:www-data . . -COPY --chown=www-data:www-data ./.env.example ./.env - -# Install application dependencies -RUN composer install --no-interaction --prefer-dist --optimize-autoloader -RUN npm install && npm run build - # Copy configuration files COPY docker/nginx.conf /etc/nginx/http.d/default.conf COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf @@ -57,10 +16,20 @@ RUN mkdir -p /var/log/supervisor \ && mkdir -p storage/logs \ && mkdir -p storage/framework/{cache,sessions,views} \ && chmod -R 775 storage \ + && mkdir -p bootstrap/cache \ && chmod -R 775 bootstrap/cache \ + && mkdir -p database \ && touch database/database.sqlite \ && chmod -R 777 database +# Copy application files +COPY --chown=www-data:www-data . . +COPY --chown=www-data:www-data ./.env.example ./.env + +# Install application dependencies +RUN composer install --no-interaction --prefer-dist --optimize-autoloader +RUN npm ci && npm run build + # Expose port 80 EXPOSE 80