diff --git a/.dockerignore b/.dockerignore index dc5a87529..bbd2117fd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -22,6 +22,7 @@ **/Dockerfile **/Thumbs.db .github/ +cert/ docs/ public/bundles/ tests/ diff --git a/.editorconfig b/.editorconfig index 1ea821469..8f0de65c5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,58 +1,18 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - root = true [*] -# Change these settings to your own preference -indent_style = space -indent_size = 4 - -# We recommend you to keep these unchanged -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +end_of_line = lf +indent_size = 4 +indent_style = space insert_final_newline = true - -[*.{js,html,ts,tsx}] -indent_size = 2 - -[*.json] -indent_size = 2 +trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false -[*.sh] -indent_style = tab - -[*.xml{,.dist}] -indent_style = space -indent_size = 4 - -[*.{yaml,yml}] -trim_trailing_whitespace = false - -[.github/workflows/*.yml] +[*.{yml,yaml}] indent_size = 2 -[.gitmodules] -indent_style = tab - -[.php_cs{,.dist}] -indent_style = space -indent_size = 4 - -[composer.json] +[docker-compose.yml] indent_size = 4 - -[{,docker-}compose{,.*}.{yaml,yml}] -indent_style = space -indent_size = 2 - -[{,*.*}Dockerfile] -indent_style = tab - -[{,*.*}Caddyfile] -indent_style = tab diff --git a/.gitattributes b/.gitattributes index 642c91f2d..fcb21d396 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,17 +1,11 @@ * text=auto eol=lf -*.conf text eol=lf -*.html text eol=lf -*.ini text eol=lf -*.js text eol=lf -*.json text eol=lf -*.md text eol=lf -*.php text eol=lf -*.sh text eol=lf -*.yaml text eol=lf -*.yml text eol=lf -bin/console text eol=lf -composer.lock text eol=lf merge=ours +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php -*.ico binary -*.png binary +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/Dockerfile b/Dockerfile index 986824f52..ffb9035dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,6 @@ FROM dunglas/frankenphp:1-php8.3 AS frankenphp_upstream # https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage # https://docs.docker.com/compose/compose-file/#target - # Base FrankenPHP image FROM frankenphp_upstream AS frankenphp_base @@ -51,10 +50,15 @@ CMD [ "frankenphp", "run", "--config", "/etc/caddy/Caddyfile" ] # Dev FrankenPHP image FROM frankenphp_base AS frankenphp_dev -ENV APP_ENV=dev XDEBUG_MODE=off +ENV APP_ENV=local XDEBUG_MODE=off RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh; \ + bash nodesource_setup.sh; \ + apt-get install -y nodejs; \ + rm nodesource_setup.sh; + RUN set -eux; \ install-php-extensions \ xdebug \ @@ -64,29 +68,66 @@ COPY --link frankenphp/conf.d/app.dev.ini $PHP_INI_DIR/conf.d/ CMD [ "frankenphp", "run", "--config", "/etc/caddy/Caddyfile", "--watch" ] +FROM node:20-alpine AS build + +WORKDIR /app + +RUN npm config set update-notifier false && npm set progress=false + +COPY --link 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 --link . . + +RUN npm run build + # Prod FrankenPHP image FROM frankenphp_base AS frankenphp_prod -ENV APP_ENV=prod -ENV FRANKENPHP_CONFIG="import worker.Caddyfile" +ENV APP_ENV=production RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" COPY --link frankenphp/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/ -COPY --link frankenphp/worker.Caddyfile /etc/caddy/worker.Caddyfile # prevent the reinstallation of vendors at every changes in the source code -COPY --link composer.* symfony.* ./ +COPY --link composer.* ./ + RUN set -eux; \ - composer install --no-cache --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress + composer install \ + --no-dev \ + --no-interaction \ + --no-autoloader \ + --no-ansi \ + --no-scripts \ + --audit; # copy sources COPY --link . ./ RUN rm -Rf frankenphp/ +# copy build assets +COPY --link --from=build /app/public ./public + RUN set -eux; \ - mkdir -p var/cache var/log; \ - composer dump-autoload --classmap-authoritative --no-dev; \ - composer dump-env prod; \ - composer run-script --no-dev post-install-cmd; \ - chmod +x bin/console; sync; + mkdir -p storage/framework/sessions; \ + mkdir -p storage/framework/views; \ + mkdir -p storage/framework/cache; \ + mkdir -p storage/framework/testing; \ + mkdir -p storage/logs; \ + mkdir -p bootstrap/cache; \ + chmod -R a+rw storage; \ + composer install \ + --classmap-authoritative \ + --no-interaction \ + --no-ansi \ + --no-dev; \ + composer clear-cache; \ + php artisan storage:link; \ + php artisan optimize; sync; diff --git a/README.md b/README.md index 4c7650297..edabf3933 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Symfony Docker +# Laravel Docker -A [Docker](https://www.docker.com/)-based installer and runtime for the [Symfony](https://symfony.com) web framework, +A [Docker](https://www.docker.com/)-based installer and runtime for the [Laravel](https://laravel.com) web framework, with [FrankenPHP](https://frankenphp.dev) and [Caddy](https://caddyserver.com/) inside! ![CI](https://github.com/dunglas/symfony-docker/workflows/CI/badge.svg) @@ -18,11 +18,9 @@ with [FrankenPHP](https://frankenphp.dev) and [Caddy](https://caddyserver.com/) * Production, development and CI ready * Just 1 service by default * Blazing-fast performance thanks to [the worker mode of FrankenPHP](https://github.com/dunglas/frankenphp/blob/main/docs/worker.md) (automatically enabled in prod mode) -* [Installation of extra Docker Compose services](docs/extra-services.md) with Symfony Flex +* [Installation of extra Docker Compose services](docs/extra-services.md) * Automatic HTTPS (in dev and prod) * HTTP/3 and [Early Hints](https://symfony.com/blog/new-in-symfony-6-3-early-hints) support -* Real-time messaging thanks to a built-in [Mercure hub](https://symfony.com/doc/current/mercure.html) -* [Vulcain](https://vulcain.rocks) support * Native [XDebug](docs/xdebug.md) integration * Super-readable configuration @@ -36,16 +34,15 @@ with [FrankenPHP](https://frankenphp.dev) and [Caddy](https://caddyserver.com/) 4. [Deploying in production](docs/production.md) 5. [Debugging with Xdebug](docs/xdebug.md) 6. [TLS Certificates](docs/tls.md) -7. [Using MySQL instead of PostgreSQL](docs/mysql.md) -8. [Using Alpine Linux instead of Debian](docs/alpine.md) -9. [Using a Makefile](docs/makefile.md) +7. [Using a Makefile](docs/makefile.md) +8. [Troubleshooting](docs/troubleshooting.md) +9. [Use With Vite](docs/vite.md) 10. [Updating the template](docs/updating.md) -11. [Troubleshooting](docs/troubleshooting.md) ## License -Symfony Docker is available under the MIT License. +Laravel Docker is available under the MIT License. ## Credits -Created by [KΓ©vin Dunglas](https://dunglas.dev), co-maintained by [Maxime Helias](https://twitter.com/maxhelias) and sponsored by [Les-Tilleuls.coop](https://les-tilleuls.coop). +Original created by [KΓ©vin Dunglas](https://dunglas.dev), co-maintained by [Maxime Helias](https://twitter.com/maxhelias) and sponsored by [Les-Tilleuls.coop](https://les-tilleuls.coop). diff --git a/compose.override.yaml b/compose.override.yaml index 5f141b1f1..2cf5fab78 100644 --- a/compose.override.yaml +++ b/compose.override.yaml @@ -12,13 +12,14 @@ services: # from the bind-mount for better performance by enabling the next line: #- /app/vendor environment: - MERCURE_EXTRA_DIRECTIVES: demo # See https://xdebug.org/docs/all_settings#mode XDEBUG_MODE: "${XDEBUG_MODE:-off}" + NODE_ENV: development extra_hosts: # Ensure that host.docker.internal is correctly defined on Linux - host.docker.internal:host-gateway tty: true - -###> symfony/mercure-bundle ### -###< symfony/mercure-bundle ### + ports: + - target: 5173 + published: 5173 + protocol: tcp diff --git a/compose.prod.yaml b/compose.prod.yaml index f0db05da6..f7cc6bbbb 100644 --- a/compose.prod.yaml +++ b/compose.prod.yaml @@ -4,7 +4,10 @@ services: build: context: . target: frankenphp_prod - environment: - APP_SECRET: ${APP_SECRET} - MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} - MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} + volumes: + - storage_data:/app/storage + - cache_data:/app/bootstrap/cache + +volumes: + storage_data: + cache_data: diff --git a/compose.yaml b/compose.yaml index cbb4f512b..d51a91905 100644 --- a/compose.yaml +++ b/compose.yaml @@ -4,18 +4,10 @@ services: restart: unless-stopped environment: SERVER_NAME: ${SERVER_NAME:-localhost}, php:80 - MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} - MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} TRUSTED_PROXIES: ${TRUSTED_PROXIES:-127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16} - TRUSTED_HOSTS: ${TRUSTED_HOSTS:-^${SERVER_NAME:-example\.com|localhost}|php$$} - # Run "composer require symfony/orm-pack" to install and configure Doctrine ORM - DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:5432/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-15}&charset=${POSTGRES_CHARSET:-utf8} - # Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration - MERCURE_URL: ${CADDY_MERCURE_URL:-http://php/.well-known/mercure} - MERCURE_PUBLIC_URL: ${CADDY_MERCURE_PUBLIC_URL:-https://${SERVER_NAME:-localhost}/.well-known/mercure} - MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + TRUSTED_HOSTS: ^${SERVER_NAME:-example\.com|localhost}|php$$ # The two next lines can be removed after initial installation - SYMFONY_VERSION: ${SYMFONY_VERSION:-} + LARAVEL_VERSION: ${LARAVEL_VERSION:-} STABILITY: ${STABILITY:-stable} volumes: - caddy_data:/data @@ -34,12 +26,6 @@ services: published: ${HTTP3_PORT:-443} protocol: udp -# Mercure is installed as a Caddy module, prevent the Flex recipe from installing another service -###> symfony/mercure-bundle ### -###< symfony/mercure-bundle ### - volumes: caddy_data: caddy_config: -###> symfony/mercure-bundle ### -###< symfony/mercure-bundle ### diff --git a/docs/makefile.md b/docs/makefile.md index 80c4d20aa..d049f1db9 100644 --- a/docs/makefile.md +++ b/docs/makefile.md @@ -42,13 +42,14 @@ PHP_CONT = $(DOCKER_COMP) exec php # Executables PHP = $(PHP_CONT) php COMPOSER = $(PHP_CONT) composer -SYMFONY = $(PHP) bin/console +NPM = $(PHP_CONT) npm +LARAVEL = $(PHP) artisan # Misc .DEFAULT_GOAL = help -.PHONY : help build up start down logs sh composer vendor sf cc test +.PHONY : help build up start down logs sh composer vendor npm dev a cc test -## β€”β€” 🎡 🐳 The Symfony Docker Makefile 🐳 🎡 β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” +## β€”β€” 🎡 🐳 The Laravel Docker Makefile 🐳 🎡 β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” help: ## Outputs this help screen @grep -E '(^[a-zA-Z0-9\./_-]+:.*?##.*$$)|(^##)' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}{printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' | sed -e 's/\[32m##/[33m/' @@ -79,7 +80,7 @@ test: ## Start tests with phpunit, pass the parameter "c=" to add options to php ## β€”β€” Composer πŸ§™ β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” -composer: ## Run composer, pass the parameter "c=" to run a given command, example: make composer c='req symfony/orm-pack' +composer: ## Run composer, pass the parameter "c=" to run a given command, example: make composer c='req laravel/breeze --dev' @$(eval c ?=) @$(COMPOSER) $(c) @@ -87,11 +88,19 @@ vendor: ## Install vendors according to the current composer.lock file vendor: c=install --prefer-dist --no-dev --no-progress --no-scripts --no-interaction vendor: composer -## β€”β€” Symfony 🎡 β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” -sf: ## List all Symfony commands or pass the parameter "c=" to run a given command, example: make sf c=about +## β€”β€” Npm 🟩 β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” +npm: ## Run npm, pass the parameter "c=" to run a given command, example: make npm c='install' @$(eval c ?=) - @$(SYMFONY) $(c) + @$(NPM) $(c) + +dev: ## Run npm run dev + @$(NPM) run dev + +## β€”β€” Laravel πŸŸ₯ β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” +a: ## List all Laravel commands or pass the parameter "c=" to run a given command, example: make a c=about + @$(eval c ?=) + @$(LARAVEL) $(c) cc: c=c:c ## Clear the cache -cc: sf +cc: a ``` diff --git a/docs/vite.md b/docs/vite.md new file mode 100644 index 000000000..a6478ac90 --- /dev/null +++ b/docs/vite.md @@ -0,0 +1,55 @@ +# Vite + +To take advantage of the benefits of Vite, follow the instructions below. + +1. If you haven't already, start the project: +``` +docker compose up --pull always -d --wait +``` +2. Check that the laravel home page appears correctly: [https://localhost](https://localhost) +3. Run: +``` +docker compose exec php npm install @vitejs/plugin-basic-ssl --save-dev +``` +4. Update your vite.config.js: +```js +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; ++ import basicSsl from '@vitejs/plugin-basic-ssl' + +export default defineConfig({ ++ server: { ++ https: true, ++ host: '0.0.0.0', ++ hmr: { ++ host: 'localhost', ++ } ++ }, + plugins: [ ++ basicSsl({ ++ /** name of certification */ ++ name: 'WhatYouWant', ++ /** custom trust domains */ ++ domains: ['localhost'], ++ /** custom certification directory (from the project root for example) */ ++ certDir: './cert' ++ }), + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + ], +}); +``` +5. Just before `` balise on `resources/views/welcome.blade.php`, add this: +```javascript +@vite(['resources/css/app.css', 'resources/js/app.js']) +``` +6. Run: +``` +docker compose exec php npm run dev +``` +7. Accept certificate: [https://localhost:5173](https://localhost:5173) +8. Enjoy, you have vite refresh: [https://localhost](https://localhost) + +Of course, you can also use it with any starter kit. diff --git a/frankenphp/Caddyfile b/frankenphp/Caddyfile index 838393046..b52c27660 100644 --- a/frankenphp/Caddyfile +++ b/frankenphp/Caddyfile @@ -5,47 +5,15 @@ {$FRANKENPHP_CONFIG} } - # https://caddyserver.com/docs/caddyfile/directives#sorting-algorithm - order mercure after encode - order vulcain after reverse_proxy order php_server before file_server } {$CADDY_EXTRA_CONFIG} {$SERVER_NAME:localhost} { - log { - # Redact the authorization query parameter that can be set by Mercure - format filter { - wrap console - fields { - uri query { - replace authorization REDACTED - } - } - } - } - root * /app/public encode zstd br gzip - mercure { - # Transport to use (default to Bolt) - transport_url {$MERCURE_TRANSPORT_URL:bolt:///data/mercure.db} - # Publisher JWT key - publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG} - # Subscriber JWT key - subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG} - # Allow anonymous subscribers (double-check that it's what you want) - anonymous - # Enable the subscription API (double-check that it's what you want) - subscriptions - # Extra directives - {$MERCURE_EXTRA_DIRECTIVES} - } - - vulcain - {$CADDY_SERVER_EXTRA_DIRECTIVES} # Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics diff --git a/frankenphp/conf.d/app.prod.ini b/frankenphp/conf.d/app.prod.ini index 3bcaa71e4..e69de29bb 100644 --- a/frankenphp/conf.d/app.prod.ini +++ b/frankenphp/conf.d/app.prod.ini @@ -1,2 +0,0 @@ -opcache.preload_user = root -opcache.preload = /app/config/preload.php diff --git a/frankenphp/docker-entrypoint.sh b/frankenphp/docker-entrypoint.sh index 9823560f9..9b584a437 100755 --- a/frankenphp/docker-entrypoint.sh +++ b/frankenphp/docker-entrypoint.sh @@ -1,60 +1,33 @@ #!/bin/sh set -e -if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then +if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'artisan' ]; then # Install the project the first time PHP is started # After the installation, the following block can be deleted if [ ! -f composer.json ]; then rm -Rf tmp/ - composer create-project "symfony/skeleton $SYMFONY_VERSION" tmp --stability="$STABILITY" --prefer-dist --no-progress --no-interaction --no-install + composer create-project "laravel/laravel $LARAVEL_VERSION" tmp --stability="$STABILITY" --remove-vcs --no-scripts --prefer-dist --no-progress --no-interaction --no-install cd tmp cp -Rp . .. cd - rm -Rf tmp/ - composer require "php:>=$PHP_VERSION" runtime/frankenphp-symfony - composer config --json extra.symfony.docker 'true' - - if grep -q ^DATABASE_URL= .env; then - echo "To finish the installation please press Ctrl+C to stop Docker Compose and run: docker compose up --build -d --wait" - sleep infinity - fi - fi - - if [ -z "$(ls -A 'vendor/' 2>/dev/null)" ]; then - composer install --prefer-dist --no-progress --no-interaction - fi - - if grep -q ^DATABASE_URL= .env; then - echo "Waiting for database to be ready..." - ATTEMPTS_LEFT_TO_REACH_DATABASE=60 - until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do - if [ $? -eq 255 ]; then - # If the Doctrine command exits with 255, an unrecoverable error occurred - ATTEMPTS_LEFT_TO_REACH_DATABASE=0 - break - fi - sleep 1 - ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1)) - echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left." - done - - if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then - echo "The database is not up or not reachable:" - echo "$DATABASE_ERROR" - exit 1 - else - echo "The database is now ready and reachable" - fi - - if [ "$( find ./migrations -iname '*.php' -print -quit )" ]; then - php bin/console doctrine:migrations:migrate --no-interaction --all-or-nothing - fi + composer require "php:>=$PHP_VERSION" --no-scripts --no-install fi - setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var - setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var + if [ -z "$(ls -A 'vendor/' 2>/dev/null)" ]; then + composer run-script post-root-package-install + composer install --prefer-dist --no-progress --no-interaction + composer run-script post-create-project-cmd + fi + + if [ "$APP_ENV" = 'production' ]; then + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX storage + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX storage + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX bootstrap/cache + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX bootstrap/cache + fi fi exec docker-php-entrypoint "$@" diff --git a/frankenphp/worker.Caddyfile b/frankenphp/worker.Caddyfile deleted file mode 100644 index d384ae4cd..000000000 --- a/frankenphp/worker.Caddyfile +++ /dev/null @@ -1,4 +0,0 @@ -worker { - file ./public/index.php - env APP_RUNTIME Runtime\FrankenPhpSymfony\Runtime -}