29 lines
1.2 KiB
PHP
29 lines
1.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
function pnpaas_traefik_labels(?string $domain, string $containerName): array
|
|
{
|
|
$domain = strtolower(trim((string)$domain));
|
|
if ($domain === '') {
|
|
return [];
|
|
}
|
|
if (strlen($domain) > 253 || !preg_match('/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/', $domain)) {
|
|
throw new InvalidArgumentException('Die Kundendomain ist kein gültiger FQDN.');
|
|
}
|
|
|
|
$routerName = strtolower(trim((string)preg_replace('/[^a-z0-9-]+/i', '-', $containerName), '-'));
|
|
if ($routerName === '' || strlen($routerName) > 63) {
|
|
throw new InvalidArgumentException('Der Instanzname kann nicht als Traefik-Router verwendet werden.');
|
|
}
|
|
|
|
return [
|
|
'traefik.enable' => 'true',
|
|
'traefik.docker.network' => 'traefik-public',
|
|
'traefik.http.routers.' . $routerName . '.rule' => 'Host(`' . $domain . '`)',
|
|
'traefik.http.routers.' . $routerName . '.entrypoints' => 'websecure',
|
|
'traefik.http.routers.' . $routerName . '.tls' => 'true',
|
|
'traefik.http.routers.' . $routerName . '.tls.certresolver' => 'le',
|
|
'traefik.http.services.' . $routerName . '.loadbalancer.server.port' => '30000',
|
|
];
|
|
}
|