From 87e74c58141b1660a3cd166480a806c6bbdc2044 Mon Sep 17 00:00:00 2001 From: Christopher Vagnetoft Date: Tue, 6 Feb 2024 01:00:58 +0100 Subject: [PATCH] Tested with Symfony 7 project --- Dockerfile | 1 + config/entrypoint.sh | 4 ++ config/frameworks/00-nginx-site.sh | 4 +- config/frameworks/10-symfony.sh | 20 ++++++++- config/frameworks/90-composer.sh | 5 ++- config/nginx/default.conf | 67 ++++++++++++++++++++++++++++++ templates/symfony.Dockerfile | 11 +++++ 7 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 config/nginx/default.conf create mode 100644 templates/symfony.Dockerfile diff --git a/Dockerfile b/Dockerfile index 7204fb7..e03ac5d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,7 @@ RUN apk add --no-cache \ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY ./config/supervisor/* /etc/supervisor.d/ COPY ./config/frameworks/* /scripts/frameworks/ +COPY ./config/nginx/* /etc/nginx/http.d/ COPY ./config/entrypoint.sh /scripts/entrypoint.sh ENTRYPOINT [ "/sbin/tini", "--" ] diff --git a/config/entrypoint.sh b/config/entrypoint.sh index 46f479f..a1e4804 100755 --- a/config/entrypoint.sh +++ b/config/entrypoint.sh @@ -1,5 +1,9 @@ #!/bin/sh +if [ ! -f /usr/bin/php ]; then + ln -s /usr/bin/php83 /usr/bin/php +fi + # run scripts in /entrypoint.d/ if [ -d /entrypoint.d ]; then echo "[-] Calling entrypoint scripts..." diff --git a/config/frameworks/00-nginx-site.sh b/config/frameworks/00-nginx-site.sh index 4be6dca..17218e9 100644 --- a/config/frameworks/00-nginx-site.sh +++ b/config/frameworks/00-nginx-site.sh @@ -1,8 +1,8 @@ #!/bin/sh if [ -f /application/.nginx-site.conf ]; then - echo " -- Installing nginx website config..." - cp -F /application/.nginx-site.conf /etc/nginx/sites-enabled/default.conf + echo " -> Installing custom nginx website config..." + cp -F /application/.nginx-site.conf /etc/nginx/http.d/default.conf fi # scripts at level 00 should not end the framework setup diff --git a/config/frameworks/10-symfony.sh b/config/frameworks/10-symfony.sh index 0d91cc1..0e0a572 100644 --- a/config/frameworks/10-symfony.sh +++ b/config/frameworks/10-symfony.sh @@ -4,6 +4,22 @@ if [ ! -f /application/symfony.lock ]; then exit 1 fi -echo " == Detected symfony project." +echo " == Detected Symfony project" cd /application -/usr/bin/composer install --no-dev --no-cache --optimize-autoloader --no-progress + +echo " -> Installing dependencies using composer..." +/usr/bin/composer install --no-dev --no-cache --optimize-autoloader --no-progress -q || exit 0 + +if [ -f /application/.symfony-init ]; then + echo " -> Running container-provided .symfony-init script" + sh /application/.symfony-init +fi + +echo " -> Testing environment..." +if bin/console &>/dev/null; then + echo " ++ Successful" +else + echo " !! Failed" +fi + +exit 0 diff --git a/config/frameworks/90-composer.sh b/config/frameworks/90-composer.sh index 0650593..3c25379 100644 --- a/config/frameworks/90-composer.sh +++ b/config/frameworks/90-composer.sh @@ -6,4 +6,7 @@ fi echo " == Detected composer project." cd /application -/usr/bin/composer install --no-dev --no-cache --optimize-autoloader --no-progress +echo " -> Installing dependencies using composer..." +/usr/bin/composer install --no-dev --no-cache --optimize-autoloader --no-progress -q || exit 0 + +exit 0 diff --git a/config/nginx/default.conf b/config/nginx/default.conf new file mode 100644 index 0000000..9e9fb05 --- /dev/null +++ b/config/nginx/default.conf @@ -0,0 +1,67 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + + root /application/public; + + client_max_body_size 350M; + + location / { + # try to serve file directly, fallback to index.php + try_files $uri /index.php$is_args$args; + } + + # optionally disable falling back to PHP script for the asset directories; + # nginx will return a 404 error when files are not found instead of passing the + # request to Symfony (improves performance but Symfony's 404 page is not displayed) + # location /bundles { + # try_files $uri =404; + # } + + location ~ ^/index\.php(/|$) { + fastcgi_pass 127.0.0.1:9000; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + + # optionally set the value of the environment variables used in the application + # fastcgi_param APP_ENV prod; + # fastcgi_param APP_SECRET ; + # fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"; + + # When you are using symlinks to link the document root to the + # current version of your application, you should pass the real + # application path instead of the path to the symlink to PHP + # FPM. + # Otherwise, PHP's OPcache may not properly detect changes to + # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126 + # for more information). + # Caveat: When PHP-FPM is hosted on a different machine from nginx + # $realpath_root may not resolve as you expect! In this case try using + # $document_root instead. + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + # Prevents URIs that include the front controller. This will 404: + # http://domain.tld/index.php/some-path + # Remove the internal directive to allow URIs like this + internal; + } + + # return 404 for all other php files not matching the front controller + # this prevents access to other php files you don't want to be accessible. + location ~ \.php$ { + return 404; + } + + location ~ /\. { + deny all; + } + + # Block access to Markdown, Twig & YAML files directly + location ~* /(.*)\.(?:markdown|md|twig|yaml|yml)$ { + deny all; + } + + error_log /dev/stderr; + access_log /dev/stdout; + +} diff --git a/templates/symfony.Dockerfile b/templates/symfony.Dockerfile new file mode 100644 index 0000000..fbb3050 --- /dev/null +++ b/templates/symfony.Dockerfile @@ -0,0 +1,11 @@ +# Dockerfile template for Symfony based projects using PHP 8.3 +# +# Magic files (in /application): +# +# .nginx-site Override nginx site default.conf +# .symfony-init Initializes Symfony framework install +# + +FROM dev.noccylabs.info/noccylabs/alpine-php83-aio:latest + +COPY . /application