diff --git a/.github/workflows/frankenphp-test.yml b/.github/workflows/frankenphp-test.yml index 78e0b0f..d96b193 100644 --- a/.github/workflows/frankenphp-test.yml +++ b/.github/workflows/frankenphp-test.yml @@ -13,8 +13,8 @@ on: - '**.md' jobs: - build: - name: Build and Run Docker image + debian-build: + name: Build and Run Debian-based Docker image runs-on: ubuntu-latest strategy: fail-fast: true @@ -41,8 +41,8 @@ jobs: uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ matrix.setup }} - restore-keys: ${{ runner.os }}-composer- + key: "${{ runner.os }}-composer-${{ matrix.setup }}" + restore-keys: "${{ runner.os }}-composer-" - name: Create app directory run: mkdir -p /var/www @@ -59,7 +59,7 @@ jobs: run: sudo cp -R FrankenPHP.Dockerfile .dockerignore deployment/ /var/www/app/ - name: Build image - run: docker build -t app:local -f FrankenPHP.Dockerfile . + run: docker build -t app:local --build-arg PHP_VERSION=${{ matrix.php }} -f FrankenPHP.Dockerfile . working-directory: /var/www/app - name: Run the Docker container @@ -71,3 +71,62 @@ jobs: - name: Check application health run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:8000 + + alpine-build: + name: Build and Run Alpine-based Docker image + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + php: [ 8.2, 8.3 ] + timeout-minutes: 15 + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup PHP with Composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php }}" + extensions: dom, curl, libxml, mbstring, zip + tools: composer:v2 + coverage: none + + - name: Get Composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache PHP dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: "${{ runner.os }}-composer-${{ matrix.setup }}" + restore-keys: "${{ runner.os }}-composer-" + + - name: Create app directory + run: mkdir -p /var/www + + - name: Install a fresh Laravel app + run: sudo composer create-project laravel/laravel app + working-directory: /var/www + + - name: Install Laravel Octane + run: sudo composer require laravel/octane + working-directory: /var/www/app + + - name: Copy required content to dockerize the app + run: sudo cp -R FrankenPHP.Alpine.Dockerfile .dockerignore deployment/ /var/www/app/ + + - name: Build image + run: docker build -t app:local --build-arg PHP_VERSION=${{ matrix.php }} -f FrankenPHP.Alpine.Dockerfile . + working-directory: /var/www/app + + - name: Run the Docker container + run: docker run -d --rm -p 8000:8000 app:local + working-directory: /var/www/app + + - name: Wait for the container + run: sleep 10s + + - name: Check application health + run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:8000 \ No newline at end of file diff --git a/.github/workflows/roadrunner-test.yml b/.github/workflows/roadrunner-test.yml index 10b5e98..2622039 100644 --- a/.github/workflows/roadrunner-test.yml +++ b/.github/workflows/roadrunner-test.yml @@ -13,8 +13,8 @@ on: - '**.md' jobs: - build: - name: Build and Run Docker image + debian-build: + name: Build and Run Debian-based Docker image runs-on: ubuntu-latest strategy: fail-fast: true @@ -41,8 +41,8 @@ jobs: uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ matrix.setup }} - restore-keys: ${{ runner.os }}-composer- + key: "${{ runner.os }}-composer-${{ matrix.setup }}" + restore-keys: "${{ runner.os }}-composer-" - name: Create app directory run: mkdir -p /var/www @@ -59,7 +59,7 @@ jobs: run: sudo cp -R RoadRunner.Dockerfile .dockerignore deployment/ /var/www/app/ - name: Build image - run: docker build -t app:local -f RoadRunner.Dockerfile . + run: docker build -t app:local --build-arg PHP_VERSION=${{ matrix.php }} -f RoadRunner.Dockerfile . working-directory: /var/www/app - name: Run the Docker container @@ -71,3 +71,62 @@ jobs: - name: Check application health run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:8000 + + alpine-build: + name: Build and Run Alpine-based Docker image + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + php: [ 8.2, 8.3 ] + timeout-minutes: 15 + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup PHP with Composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php }}" + extensions: dom, curl, libxml, mbstring, zip + tools: composer:v2 + coverage: none + + - name: Get Composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache PHP dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: "${{ runner.os }}-composer-${{ matrix.setup }}" + restore-keys: "${{ runner.os }}-composer-" + + - name: Create app directory + run: mkdir -p /var/www + + - name: Install a fresh Laravel app + run: sudo composer create-project laravel/laravel app + working-directory: /var/www + + - name: Install Laravel Octane + run: sudo composer require laravel/octane + working-directory: /var/www/app + + - name: Copy required content to dockerize the app + run: sudo cp -R RoadRunner.Alpine.Dockerfile .dockerignore deployment/ /var/www/app/ + + - name: Build image + run: docker build -t app:local --build-arg PHP_VERSION=${{ matrix.php }} -f RoadRunner.Alpine.Dockerfile . + working-directory: /var/www/app + + - name: Run the Docker container + run: docker run -d --rm -p 8000:8000 app:local + working-directory: /var/www/app + + - name: Wait for the container + run: sleep 10s + + - name: Check application health + run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:8000 \ No newline at end of file diff --git a/.github/workflows/swoole-test.yml b/.github/workflows/swoole-test.yml index ce77828..10a6b50 100644 --- a/.github/workflows/swoole-test.yml +++ b/.github/workflows/swoole-test.yml @@ -13,8 +13,8 @@ on: - '**.md' jobs: - build: - name: Build and Run Docker image + debian-build: + name: Build and Run Debian-based Docker image runs-on: ubuntu-latest strategy: fail-fast: true @@ -41,8 +41,8 @@ jobs: uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ matrix.setup }} - restore-keys: ${{ runner.os }}-composer- + key: "${{ runner.os }}-composer-${{ matrix.setup }}" + restore-keys: "${{ runner.os }}-composer-" - name: Create app directory run: mkdir -p /var/www @@ -59,7 +59,7 @@ jobs: run: sudo cp -R Swoole.Dockerfile .dockerignore deployment/ /var/www/app/ - name: Build image - run: docker build -t app:local -f Swoole.Dockerfile . + run: docker build -t app:local --build-arg PHP_VERSION=${{ matrix.php }} -f Swoole.Dockerfile . working-directory: /var/www/app - name: Run the Docker container @@ -71,3 +71,62 @@ jobs: - name: Check application health run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:8000 + + alpine-build: + name: Build and Run Alpine-based Docker image + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + php: [ 8.2, 8.3 ] + timeout-minutes: 15 + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup PHP with Composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php }}" + extensions: dom, curl, libxml, mbstring, zip + tools: composer:v2 + coverage: none + + - name: Get Composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache PHP dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: "${{ runner.os }}-composer-${{ matrix.setup }}" + restore-keys: "${{ runner.os }}-composer-" + + - name: Create app directory + run: mkdir -p /var/www + + - name: Install a fresh Laravel app + run: sudo composer create-project laravel/laravel app + working-directory: /var/www + + - name: Install Laravel Octane + run: sudo composer require laravel/octane + working-directory: /var/www/app + + - name: Copy required content to dockerize the app + run: sudo cp -R Swoole.Alpine.Dockerfile .dockerignore deployment/ /var/www/app/ + + - name: Build image + run: docker build -t app:local --build-arg PHP_VERSION=${{ matrix.php }} -f Swoole.Alpine.Dockerfile . + working-directory: /var/www/app + + - name: Run the Docker container + run: docker run -d --rm -p 8000:8000 app:local + working-directory: /var/www/app + + - name: Wait for the container + run: sleep 10s + + - name: Check application health + run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:8000 \ No newline at end of file diff --git a/FrankenPHP.Alpine.Dockerfile b/FrankenPHP.Alpine.Dockerfile new file mode 100644 index 0000000..b9e865a --- /dev/null +++ b/FrankenPHP.Alpine.Dockerfile @@ -0,0 +1,181 @@ +# Accepted values: 8.3 - 8.2 +ARG PHP_VERSION=8.3 + +ARG FRANKENPHP_VERSION=latest + +ARG COMPOSER_VERSION=latest + +########################################### +# Build frontend assets with NPM +########################################### + +ARG NODE_VERSION=20-alpine + +FROM node:${NODE_VERSION} AS build + +ENV ROOT=/var/www/html + +WORKDIR ${ROOT} + +RUN npm config set update-notifier false && npm set progress=false + +COPY package*.json ./ + +RUN if [ -f $ROOT/package-lock.json ]; \ + then \ + npm ci --loglevel=error --no-audit; \ + else \ + npm install --loglevel=error --no-audit; \ + fi + +COPY . . + +RUN npm run build + +########################################### + +FROM composer:${COMPOSER_VERSION} AS vendor + +FROM dunglas/frankenphp:${FRANKENPHP_VERSION}-php${PHP_VERSION}-alpine + +LABEL maintainer="SMortexa " +LABEL org.opencontainers.image.title="Laravel Octane Dockerfile" +LABEL org.opencontainers.image.description="Production-ready Dockerfile for Laravel Octane" +LABEL org.opencontainers.image.source=https://github.com/exaco/laravel-octane-dockerfile +LABEL org.opencontainers.image.licenses=MIT + +ARG WWWUSER=1000 +ARG WWWGROUP=1000 +ARG TZ=UTC +ARG APP_DIR=/var/www/html + +ENV DEBIAN_FRONTEND=noninteractive \ + TERM=xterm-color \ + WITH_HORIZON=false \ + WITH_SCHEDULER=false \ + OCTANE_SERVER=frankenphp \ + USER=octane \ + ROOT=${APP_DIR} \ + COMPOSER_FUND=0 \ + COMPOSER_MAX_PARALLEL_HTTP=24 \ + XDG_CONFIG_HOME=${APP_DIR}/.config \ + XDG_DATA_HOME=${APP_DIR}/.data + +WORKDIR ${ROOT} + +SHELL ["/bin/sh", "-eou", "pipefail", "-c"] + +RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \ + && echo ${TZ} > /etc/timezone + +ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ + +RUN apk update; \ + apk upgrade; \ + apk add --no-cache \ + curl \ + wget \ + nano \ + ncdu \ + procps \ + ca-certificates \ + supervisor \ + libsodium-dev \ + # Install PHP extensions + && install-php-extensions \ + bz2 \ + pcntl \ + mbstring \ + bcmath \ + sockets \ + pgsql \ + pdo_pgsql \ + opcache \ + exif \ + pdo_mysql \ + zip \ + intl \ + gd \ + redis \ + rdkafka \ + memcached \ + igbinary \ + ldap \ + swoole \ + && docker-php-source delete \ + && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* + +RUN arch="$(apk --print-arch)" \ + && case "$arch" in \ + armhf) _cronic_fname='supercronic-linux-arm' ;; \ + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ + x86) _cronic_fname='supercronic-linux-386' ;; \ + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ + esac \ + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ + -O /usr/bin/supercronic \ + && chmod +x /usr/bin/supercronic \ + && mkdir -p /etc/supercronic \ + && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --no-interaction" > /etc/supercronic/laravel + +RUN addgroup -g ${WWWGROUP} ${USER} \ + && adduser -D -h ${ROOT} -G ${USER} -u ${WWWUSER} -s /bin/sh ${USER} + +RUN chown -R ${USER}:${USER} ${ROOT} /var/log /var/run \ + && chmod -R a+rw ${ROOT} /var/log /var/run + +RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini + +USER ${USER} + +COPY --chown=${USER}:${USER} --from=vendor /usr/bin/composer /usr/bin/composer +COPY --chown=${USER}:${USER} composer.json composer.lock ./ + +RUN composer install \ + --no-dev \ + --no-interaction \ + --no-autoloader \ + --no-ansi \ + --no-scripts \ + --audit + +COPY --chown=${USER}:${USER} . . +COPY --chown=${USER}:${USER} --from=build ${ROOT}/public public + +RUN mkdir -p \ + storage/framework/sessions \ + storage/framework/views \ + storage/framework/cache \ + storage/framework/testing \ + storage/logs \ + bootstrap/cache && chmod -R a+rw storage + +COPY --chown=${USER}:${USER} deployment/supervisord.conf /etc/supervisor/ +COPY --chown=${USER}:${USER} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/ +COPY --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ +COPY --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini + +# FrankenPHP embedded PHP configuration +COPY --chown=${USER}:${USER} deployment/php.ini /lib/php.ini + +RUN composer install \ + --classmap-authoritative \ + --no-interaction \ + --no-ansi \ + --no-dev \ + && composer clear-cache + +RUN chmod +x /usr/local/bin/start-container + +RUN cat deployment/utilities.sh >> ~/.bashrc + +EXPOSE 8000 +EXPOSE 443 +EXPOSE 443/udp +EXPOSE 2019 + +ENTRYPOINT ["start-container"] + +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 diff --git a/FrankenPHP.Dockerfile b/FrankenPHP.Dockerfile index e364bdd..d2ac1fe 100644 --- a/FrankenPHP.Dockerfile +++ b/FrankenPHP.Dockerfile @@ -108,11 +108,19 @@ RUN apt-get update; \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && rm /var/log/lastlog /var/log/faillog -RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ - -O /usr/bin/supercronic \ - && chmod +x /usr/bin/supercronic \ - && mkdir -p /etc/supercronic \ - && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --no-interaction" > /etc/supercronic/laravel +RUN arch="$(uname -m)" \ + && case "$arch" in \ + armhf) _cronic_fname='supercronic-linux-arm' ;; \ + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ + x86) _cronic_fname='supercronic-linux-386' ;; \ + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ + esac \ + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ + -O /usr/bin/supercronic \ + && chmod +x /usr/bin/supercronic \ + && mkdir -p /etc/supercronic \ + && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --no-interaction" > /etc/supercronic/laravel RUN userdel --remove --force www-data \ && groupadd --force -g ${WWWGROUP} ${USER} \ @@ -158,8 +166,7 @@ RUN composer install \ --no-interaction \ --no-ansi \ --no-dev \ - && composer clear-cache \ - && php artisan storage:link + && composer clear-cache RUN chmod +x /usr/local/bin/start-container diff --git a/README.md b/README.md index 4072554..3d8f22e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ powered web services and microservices. The Docker configuration provides the following setup: -- PHP 8.2 and 8.3 official Debian-based images +- PHP 8.2 and 8.3 official Debian-based and Alpine-based images - Preconfigured JIT compiler and OPcache ## Container modes @@ -112,7 +112,7 @@ Also, some useful Bash functions and aliases are added in `utilities.sh` that ma - [ ] Add support for Laravel Dusk - [x] Support more PHP extensions - [x] Add tests -- [ ] Add Alpine-based images +- [x] Add Alpine-based images ## Contributing diff --git a/RoadRunner.Alpine.Dockerfile b/RoadRunner.Alpine.Dockerfile index 3b72bcc..a4dee9c 100644 --- a/RoadRunner.Alpine.Dockerfile +++ b/RoadRunner.Alpine.Dockerfile @@ -97,9 +97,17 @@ RUN apk update; \ igbinary \ ldap \ && docker-php-source delete \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ + && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* + +RUN arch="$(apk --print-arch)" \ + && case "$arch" in \ + armhf) _cronic_fname='supercronic-linux-arm' ;; \ + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ + x86) _cronic_fname='supercronic-linux-386' ;; \ + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ + esac \ + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ -O /usr/bin/supercronic \ && chmod +x /usr/bin/supercronic \ && mkdir -p /etc/supercronic \ @@ -108,8 +116,8 @@ RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/su RUN addgroup -g ${WWWGROUP} ${USER} \ && adduser -D -h ${ROOT} -G ${USER} -u ${WWWUSER} -s /bin/sh ${USER} -RUN mkdir -p /var/log/supervisor /var/run/supervisor \ - && chown -R ${USER}:${USER} /var/log/supervisor /var/run/supervisor +RUN chown -R ${USER}:${USER} ${ROOT} /var/log /var/run \ + && chmod -R a+rw ${ROOT} /var/log /var/run RUN chown -R ${USER}:${USER} ${ROOT} /var/log /var/run \ && chmod -R a+rw ${ROOT} /var/log /var/run @@ -152,11 +160,10 @@ RUN composer install \ --no-interaction \ --no-ansi \ --no-dev \ - && composer clear-cache \ - && php artisan storage:link + && composer clear-cache RUN if composer show | grep spiral/roadrunner-cli >/dev/null; then \ - ./vendor/bin/rr get-binary; else \ + ./vendor/bin/rr get-binary --quiet; else \ echo "`spiral/roadrunner-cli` package is not installed. Exiting..."; exit 1; \ fi diff --git a/RoadRunner.Dockerfile b/RoadRunner.Dockerfile index 80a0f6d..6964b8c 100644 --- a/RoadRunner.Dockerfile +++ b/RoadRunner.Dockerfile @@ -103,7 +103,15 @@ RUN apt-get update; \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && rm /var/log/lastlog /var/log/faillog -RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ +RUN arch="$(uname -m)" \ + && case "$arch" in \ + armhf) _cronic_fname='supercronic-linux-arm' ;; \ + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ + x86) _cronic_fname='supercronic-linux-386' ;; \ + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ + esac \ + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ -O /usr/bin/supercronic \ && chmod +x /usr/bin/supercronic \ && mkdir -p /etc/supercronic \ @@ -151,11 +159,10 @@ RUN composer install \ --no-interaction \ --no-ansi \ --no-dev \ - && composer clear-cache \ - && php artisan storage:link + && composer clear-cache RUN if composer show | grep spiral/roadrunner-cli >/dev/null; then \ - ./vendor/bin/rr get-binary; else \ + ./vendor/bin/rr get-binary --quiet; else \ echo "`spiral/roadrunner-cli` package is not installed. Exiting..."; exit 1; \ fi diff --git a/Swoole.Alpine.Dockerfile b/Swoole.Alpine.Dockerfile index 560782c..4a36951 100644 --- a/Swoole.Alpine.Dockerfile +++ b/Swoole.Alpine.Dockerfile @@ -98,9 +98,17 @@ RUN apk update; \ ldap \ swoole \ && docker-php-source delete \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ + && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* + +RUN arch="$(apk --print-arch)" \ + && case "$arch" in \ + armhf) _cronic_fname='supercronic-linux-arm' ;; \ + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ + x86) _cronic_fname='supercronic-linux-386' ;; \ + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ + esac \ + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ -O /usr/bin/supercronic \ && chmod +x /usr/bin/supercronic \ && mkdir -p /etc/supercronic \ @@ -152,8 +160,7 @@ RUN composer install \ --no-interaction \ --no-ansi \ --no-dev \ - && composer clear-cache \ - && php artisan storage:link + && composer clear-cache RUN chmod +x /usr/local/bin/start-container diff --git a/Swoole.Dockerfile b/Swoole.Dockerfile index 26d1870..7936784 100644 --- a/Swoole.Dockerfile +++ b/Swoole.Dockerfile @@ -104,7 +104,15 @@ RUN apt-get update; \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && rm /var/log/lastlog /var/log/faillog -RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ +RUN arch="$(uname -m)" \ + && case "$arch" in \ + armhf) _cronic_fname='supercronic-linux-arm' ;; \ + aarch64) _cronic_fname='supercronic-linux-arm64' ;; \ + x86_64) _cronic_fname='supercronic-linux-amd64' ;; \ + x86) _cronic_fname='supercronic-linux-386' ;; \ + *) echo >&2 "error: unsupported architecture: $arch"; exit 1 ;; \ + esac \ + && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/${_cronic_fname}" \ -O /usr/bin/supercronic \ && chmod +x /usr/bin/supercronic \ && mkdir -p /etc/supercronic \ @@ -151,8 +159,7 @@ RUN composer install \ --no-interaction \ --no-ansi \ --no-dev \ - && composer clear-cache \ - && php artisan storage:link + && composer clear-cache RUN chmod +x /usr/local/bin/start-container diff --git a/deployment/start-container b/deployment/start-container index 4f9e56a..8816674 100644 --- a/deployment/start-container +++ b/deployment/start-container @@ -8,6 +8,7 @@ running_migrations_and_seeders=${RUNNING_MIGRATIONS_AND_SEEDERS:-"false"} echo "Container mode: $container_mode" initialStuff() { + php artisan storage:link; \ php artisan optimize:clear; \ php artisan event:cache; \ php artisan config:cache; \