From eb29d11134bd5d37bab4330e2478b2da55a95bf8 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Tue, 14 Feb 2023 20:14:43 +0000 Subject: [PATCH] feat: add Caddy as a web server --- .../Command/BuildConfigurationCommand.php | 18 +++++++++++++++-- src/Enum/WebServer.php | 1 + templates/Dockerfile.twig | 13 +++++++++++- templates/web/caddy/Caddyfile.twig | 4 ++++ templates/web/nginx/default.conf.twig | 20 +++++++++++++++++++ 5 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 templates/web/caddy/Caddyfile.twig create mode 100644 templates/web/nginx/default.conf.twig diff --git a/src/Console/Command/BuildConfigurationCommand.php b/src/Console/Command/BuildConfigurationCommand.php index 1187411..2b36e92 100644 --- a/src/Console/Command/BuildConfigurationCommand.php +++ b/src/Console/Command/BuildConfigurationCommand.php @@ -127,9 +127,14 @@ final class BuildConfigurationCommand extends Command $this->filesToGenerate->push(['php/docker-entrypoint-php', 'tools/docker/images/php/root/usr/local/bin/docker-entrypoint-php']); } + if (self::isCaddy(Arr::get($configurationData, 'web.type'))) { + $this->filesystem->mkdir("{$this->outputDir}/tools/docker/images/web/root/etc/caddy"); + $this->filesToGenerate->push(['web/caddy/Caddyfile', 'tools/docker/images/web/root/etc/caddy/Caddyfile']); + } + if (self::isNginx(Arr::get($configurationData, 'web.type'))) { - $this->filesystem->mkdir("{$this->outputDir}/tools/docker/images/nginx/root/etc/nginx/conf.d"); - $this->filesToGenerate->push(['default.conf', 'tools/docker/images/nginx/root/etc/nginx/conf.d/default.conf']); + $this->filesystem->mkdir("{$this->outputDir}/tools/docker/images/web/root/etc/nginx/conf.d"); + $this->filesToGenerate->push(['web/nginx/default.conf', 'tools/docker/images/web/root/etc/nginx/conf.d/default.conf']); } $this->generateFiles($configurationData); @@ -157,6 +162,15 @@ final class BuildConfigurationCommand extends Command } } + private static function isCaddy(?string $webServer): bool + { + if (is_null($webServer)) { + return false; + } + + return strtoupper($webServer) === WebServer::CADDY->name; + } + private static function isNginx(?string $webServer): bool { if (is_null($webServer)) { diff --git a/src/Enum/WebServer.php b/src/Enum/WebServer.php index 828849f..fdd63c2 100644 --- a/src/Enum/WebServer.php +++ b/src/Enum/WebServer.php @@ -6,5 +6,6 @@ namespace OliverDaviesLtd\BuildConfigs\Enum; enum WebServer { + case CADDY; case NGINX; } diff --git a/templates/Dockerfile.twig b/templates/Dockerfile.twig index 1d40b84..d307bf5 100644 --- a/templates/Dockerfile.twig +++ b/templates/Dockerfile.twig @@ -53,6 +53,17 @@ RUN {% for command in dockerfile.stages.test.commands -%} {% endfor %} {% endif %} + +{% if web.type == "caddy" %} +################################################################################ + +FROM caddy:2 as web + +WORKDIR /app + +COPY tools/docker/images/web/root / +{% endif %} + {% if web.type == "nginx" %} ################################################################################ @@ -62,5 +73,5 @@ EXPOSE 8080 WORKDIR /app -COPY tools/docker/images/nginx/root / +COPY tools/docker/images/web/root / {% endif %} diff --git a/templates/web/caddy/Caddyfile.twig b/templates/web/caddy/Caddyfile.twig new file mode 100644 index 0000000..4a02702 --- /dev/null +++ b/templates/web/caddy/Caddyfile.twig @@ -0,0 +1,4 @@ +:80 +root * /app/docroot +file_server +php_fastcgi php:9000 diff --git a/templates/web/nginx/default.conf.twig b/templates/web/nginx/default.conf.twig new file mode 100644 index 0000000..f941f8c --- /dev/null +++ b/templates/web/nginx/default.conf.twig @@ -0,0 +1,20 @@ +server { + server_name _; + + root /app/docroot; + + location / { + try_files $uri /index.php?$query_string; + } + + location ~ \.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + try_files $fastcgi_script_name =404; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param QUERY_STRING $query_string; + fastcgi_intercept_errors on; + fastcgi_pass php:9000; + } +}