[ 'routers' => [], 'services' => [], ], ]; foreach ($config['servers'] as $server_name => $server_ip) { $proxy_routers = @file_get_contents("http://{$server_ip}:8080/api/http/routers"); if (empty($proxy_routers)) { continue; } $proxy_routers = json_decode($proxy_routers, TRUE); $server_key = 'proxy-'.$server_name; $data['http']['services'][$server_key] = [ 'loadBalancer' => [ 'servers' => [ ['url' => "http://{$server_ip}:80"], ], 'passHostHeader' => TRUE, ], ]; foreach ($proxy_routers as $router) { if ($router['status'] !== 'enabled' || $router['provider'] !== 'docker') { continue; } preg_match_all("/Host\(\`(?'domain'[a-zA-Z\.\-]+)\`\)/m", $router['rule'], $rule_hosts); if (empty($rule_hosts['domain'])) { continue; } $domains = []; foreach ($rule_hosts['domain'] as $domain) { $is_docker_name = !str_contains($domain, '.'); if ($is_docker_name) { continue; } $domains[] = $domain; } if (empty($domains)) { continue; } $http_router = [ 'entryPoints' => ['web'], 'rule' => $router['rule'], 'service' => $server_key, ]; $ssl_router = [ 'entryPoints' => ['websecure'], 'rule' => $router['rule'], 'service' => $server_key, 'tls' => [ 'certResolver' => 'defaultResolver', 'domains' => [], ], ]; foreach ($domains as $domain) { $ssl_router['tls']['domains'][] = [ 'main' => $domain, 'sans' => [], ]; } $router_name = str_replace(['@'], '_', $router['name']); $data['http']['routers'][$server_key . '--https-' . $router_name] = $ssl_router; $data['http']['routers'][$server_key . '--http-' . $router_name] = $http_router; } } header('application/x-yaml'); echo Yaml::dump($data, 4, 2, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK | Yaml::DUMP_OBJECT_AS_MAP);