diff --git a/README.md b/README.md index d9b2b2c32bd1c87ba79246e0d23ee4c83a038f33..a8ca9c30378be588cb53021c25d31d6cada004e0 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,7 @@ docker4drupal: ci_home: /home/gitlab-runner docker0: ip: [IP OF YOUR DOCKER HOST] + proxy: [IP OF TRAEFIK PROXY] live: root: '' uri: '' diff --git a/src/Handler.php b/src/Handler.php index 3babb82adea124504ee0e66680c99d9ab3162eb9..542a79c8ca828f44f1751b97ef07a2a5952223cf 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -38,6 +38,9 @@ class Handler extends BaseHandler { 'ip' => ($this->isCiContext() || $this->isLocalDevMode()) ? $this->getDockerGateway() : $this->getLocalIpv4('docker0'), + 'proxy' => ($this->isCiContext() || $this->isLocalDevMode()) ? + $this->getDockerProxy($projectname) : + FALSE, ], 'live' => [ 'root' => '', @@ -358,6 +361,18 @@ class Handler extends BaseHandler { return $container['NetworkSettings']['Gateway']; } + /** + * @return string + */ + private function getDockerProxy(string $projectname): string { + foreach ($this->readNetworkConfig($projectname)['Containers'] as $container) { + if (isset($container['Name']) && $container['Name'] === 'traefik_traefik_1') { + return explode('/', $container['IPv4Address'])[0]; + } + } + return '127.0.0.1'; + } + /** * @param $projectRoot * @@ -402,4 +417,23 @@ class Handler extends BaseHandler { ]; } + /** + * @param string $projectname + * + * @return array + */ + private function readNetworkConfig(string $projectname): array { + try { + $output = []; + exec('docker network inspect traefik_' . $projectname, $output); + return json_decode(implode('', $output), TRUE)[0]; + } + catch (Exception $ex) { + // Ignore. + } + return [ + 'Containers' => [], + ]; + } + } diff --git a/templates/settings.docker.php.twig b/templates/settings.docker.php.twig index ac1fc19f0b37dc3d0bed4c543a082d31d59c597d..a9cac93603bd6651dffd8d03aeef37b8945225be 100644 --- a/templates/settings.docker.php.twig +++ b/templates/settings.docker.php.twig @@ -1,6 +1,10 @@ <?php {% if drupal.version >= 8 %} +{% if docker0.proxy %} +$settings['reverse_proxy'] = TRUE; +$settings['reverse_proxy_addresses'] = array("{{ docker0.proxy }}"); +{% endif %} $settings['trusted_host_patterns'] = array( '^{{ projectname }}\.docker\.localhost$', '^{{ webserver.type }}$',