diff --git a/bootstrap/helpers/docker.php b/bootstrap/helpers/docker.php index a087c92c5..c7c2fb26e 100644 --- a/bootstrap/helpers/docker.php +++ b/bootstrap/helpers/docker.php @@ -234,7 +234,7 @@ function generateServiceSpecificFqdns(ServiceApplication|Application $resource) } return $payload; } -function fqdnLabelsForCaddy(string $network, string $uuid, Collection $domains, bool $is_force_https_enabled = false, $onlyPort = null, ?Collection $serviceLabels = null, ?bool $is_gzip_enabled = true, ?bool $is_stripprefix_enabled = true, ?string $service_name = null) +function fqdnLabelsForCaddy(string $network, string $uuid, Collection $domains, bool $is_force_https_enabled = false, $onlyPort = null, ?Collection $serviceLabels = null, ?bool $is_gzip_enabled = true, ?bool $is_stripprefix_enabled = true, ?string $service_name = null, ?string $image = null) { $labels = collect([]); if ($serviceLabels) { @@ -247,7 +247,6 @@ function fqdnLabelsForCaddy(string $network, string $uuid, Collection $domains, $url = Url::fromString($domain); $host = $url->getHost(); $path = $url->getPath(); - // $stripped_path = str($path)->replaceEnd('/', ''); $schema = $url->getScheme(); $port = $url->getPort(); @@ -273,7 +272,7 @@ function fqdnLabelsForCaddy(string $network, string $uuid, Collection $domains, } return $labels->sort(); } -function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_https_enabled = false, $onlyPort = null, ?Collection $serviceLabels = null, ?bool $is_gzip_enabled = true, ?bool $is_stripprefix_enabled = true, ?string $service_name = null, bool $generate_unique_uuid = false) +function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_https_enabled = false, $onlyPort = null, ?Collection $serviceLabels = null, ?bool $is_gzip_enabled = true, ?bool $is_stripprefix_enabled = true, ?string $service_name = null, bool $generate_unique_uuid = false, ?string $image = null) { $labels = collect([]); $labels->push('traefik.enable=true'); @@ -331,7 +330,10 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $http_label = "http-{$loop}-{$uuid}-{$service_name}"; $https_label = "https-{$loop}-{$uuid}-{$service_name}"; } - + if (str($image)->contains('ghost')) { + $labels->push("traefik.http.middlewares.redir-ghost.redirectregex.regex=^{$path}/(.*)"); + $labels->push("traefik.http.middlewares.redir-ghost.redirectregex.replacement=/$1"); + } if ($schema === 'https') { // Set labels for https $labels->push("traefik.http.routers.{$https_label}.rule=Host(`{$host}`) && PathPrefix(`{$path}`)"); @@ -341,9 +343,10 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels->push("traefik.http.services.{$https_label}.loadbalancer.server.port=$port"); } if ($path !== '/') { - if ($is_stripprefix_enabled) { + $middlewares = collect([]); + if ($is_stripprefix_enabled && !str($image)->contains('ghost')) { $labels->push("traefik.http.middlewares.{$https_label}-stripprefix.stripprefix.prefixes={$path}"); - $middlewares = collect(["{$https_label}-stripprefix"]); + $middlewares->push("{$https_label}-stripprefix"); } if ($is_gzip_enabled) { $middlewares->push('gzip'); @@ -354,6 +357,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ if ($redirect && $redirect_middleware) { $middlewares->push($redirect_middleware); } + if (str($image)->contains('ghost')) { + $middlewares->push('redir-ghost'); + } if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}"); @@ -369,6 +375,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ if ($redirect && $redirect_middleware) { $middlewares->push($redirect_middleware); } + if (str($image)->contains('ghost')) { + $middlewares->push('redir-ghost'); + } if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}"); @@ -396,9 +405,10 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels->push("traefik.http.routers.{$http_label}.service={$http_label}"); } if ($path !== '/') { - if ($is_stripprefix_enabled) { + $middlewares = collect([]); + if ($is_stripprefix_enabled && !str($image)->contains('ghost')) { $labels->push("traefik.http.middlewares.{$http_label}-stripprefix.stripprefix.prefixes={$path}"); - $middlewares = collect(["{$http_label}-stripprefix"]); + $middlewares->push("{$https_label}-stripprefix"); } if ($is_gzip_enabled) { $middlewares->push('gzip'); @@ -409,6 +419,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ if ($redirect && $redirect_middleware) { $middlewares->push($redirect_middleware); } + if (str($image)->contains('ghost')) { + $middlewares->push('redir-ghost'); + } if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}"); @@ -424,6 +437,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ if ($redirect && $redirect_middleware) { $middlewares->push($redirect_middleware); } + if (str($image)->contains('ghost')) { + $middlewares->push('redir-ghost'); + } if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}"); diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 8e1030ac6..d57c4dc73 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -1167,7 +1167,8 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal serviceLabels: $serviceLabels, is_gzip_enabled: $savedService->isGzipEnabled(), is_stripprefix_enabled: $savedService->isStripprefixEnabled(), - service_name: $serviceName + service_name: $serviceName, + image: data_get($service, 'image') )); $serviceLabels = $serviceLabels->merge(fqdnLabelsForCaddy( network: $resource->destination->network, @@ -1177,7 +1178,8 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal serviceLabels: $serviceLabels, is_gzip_enabled: $savedService->isGzipEnabled(), is_stripprefix_enabled: $savedService->isStripprefixEnabled(), - service_name: $serviceName + service_name: $serviceName, + image: data_get($service, 'image') )); } } @@ -1656,13 +1658,15 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal uuid: $resource->uuid, domains: $fqdns, serviceLabels: $serviceLabels, - generate_unique_uuid: $resource->build_pack === 'dockercompose' + generate_unique_uuid: $resource->build_pack === 'dockercompose', + image: data_get($service, 'image') )); $serviceLabels = $serviceLabels->merge(fqdnLabelsForCaddy( network: $resource->destination->network, uuid: $resource->uuid, domains: $fqdns, - serviceLabels: $serviceLabels + serviceLabels: $serviceLabels, + image: data_get($service, 'image') )); } }