From 844a39a3884c0800d066d00d89ca3b5fd9b98b1a Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen.haas@lakedrops.com> Date: Sun, 10 Jan 2021 17:41:25 +0100 Subject: [PATCH] composer/library/docker-traefik#6 Update traefik config to version 2 --- .ahoy.l3d.yml | 4 ++++ ahoy.traefik.yml | 5 +++++ src/CommandProvider.php | 1 + src/Handler.php | 33 ++++++++++++++++++++++----- src/TraefikRewriteCommand.php | 37 +++++++++++++++++++++++++++++++ src/UpdateCommand.php | 5 ----- templates/docker-compose.yml.twig | 31 +++++++++++++------------- 7 files changed, 90 insertions(+), 26 deletions(-) create mode 100644 ahoy.traefik.yml create mode 100644 src/TraefikRewriteCommand.php diff --git a/.ahoy.l3d.yml b/.ahoy.l3d.yml index a763df4..0c697da 100644 --- a/.ahoy.l3d.yml +++ b/.ahoy.l3d.yml @@ -12,3 +12,7 @@ commands: imports: - ahoy.debug.yml usage: PHP debugging + traefik: + imports: + - ahoy.traefik.yml + usage: Traefik commands diff --git a/ahoy.traefik.yml b/ahoy.traefik.yml new file mode 100644 index 0000000..1bda0e5 --- /dev/null +++ b/ahoy.traefik.yml @@ -0,0 +1,5 @@ +ahoyapi: v2 +commands: + rewrite: + cmd: composer lakedrops:traefik:rewrite + usage: Pull files and DB from live site diff --git a/src/CommandProvider.php b/src/CommandProvider.php index fb14a2e..64796d0 100644 --- a/src/CommandProvider.php +++ b/src/CommandProvider.php @@ -14,6 +14,7 @@ class CommandProvider implements CommandProviderCapability { */ public function getCommands(): array { return [ + new TraefikRewriteCommand(), new UpdateCommand(), ]; } diff --git a/src/Handler.php b/src/Handler.php index 24512e5..e3a62dc 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -272,6 +272,31 @@ class Handler extends BaseHandler { $this->gitIgnore('tests/backstop/backstop_data/html_report'); $this->gitLFS('tests/backstop/**/*.png'); + $this->updateTraefik(FALSE); + + // Set permissions, see https://wodby.com/stacks/drupal/docs/local/permissions + exec('setfacl -dR -m u:$(whoami):rwX -m u:82:rwX -m u:100:rX -m g::rwX ' . $projectRoot . ' >/dev/null 2>&1'); + exec('setfacl -R -m u:$(whoami):rwX -m u:82:rwX -m u:100:rX -m g::rwX ' . $projectRoot . ' >/dev/null 2>&1'); + } + + /** + * Configure Traefik on the host for all projects. + * + * @param bool $rewrite + * Whether to rewrite existing Traefik config. + */ + public function configureTraefik($rewrite = FALSE): void { + if (!$this->isDevMode()) { + return; + } + $this->init(); + $this->updateTraefik($rewrite); + } + + /** + * @param $rewrite + */ + private function updateTraefik($rewrite): void { $traefik = new Traefik( $this->config->readValue('projectname'), $this->config->readValue(['traefik', 'domain']), @@ -280,11 +305,7 @@ class Handler extends BaseHandler { $this->config->readValue(['traefik', 'cert']), $this->config->readValue(['traefik', 'key']) ); - $traefik->update(); - - // Set permissions, see https://wodby.com/stacks/drupal/docs/local/permissions - exec('setfacl -dR -m u:$(whoami):rwX -m u:82:rwX -m u:100:rX -m g::rwX ' . $projectRoot . ' >/dev/null 2>&1'); - exec('setfacl -R -m u:$(whoami):rwX -m u:82:rwX -m u:100:rX -m g::rwX ' . $projectRoot . ' >/dev/null 2>&1'); + $traefik->update($rewrite); } /** @@ -378,6 +399,8 @@ class Handler extends BaseHandler { } /** + * @param string $projectname + * * @return string */ private function getDockerProxy(string $projectname): string { diff --git a/src/TraefikRewriteCommand.php b/src/TraefikRewriteCommand.php new file mode 100644 index 0000000..bc5752e --- /dev/null +++ b/src/TraefikRewriteCommand.php @@ -0,0 +1,37 @@ +<?php + +namespace LakeDrops\Docker4Drupal; + +use LakeDrops\Component\Composer\BaseCommand; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class TraefikRewriteCommand extends BaseCommand { + + /** + * {@inheritdoc} + */ + protected function configure() { + $this->setName('lakedrops:traefik:rewrite'); + $this->setDescription('Rewrite Traefik config on this host.'); + } + + /** + * {@inheritdoc} + */ + public function getHandlerClass(): string { + return Handler::class; + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output): int { + parent::execute($input, $output); + /** @var Handler $handler */ + $handler = $this->handler; + $handler->configureTraefik(TRUE); + return 0; + } + +} diff --git a/src/UpdateCommand.php b/src/UpdateCommand.php index d31572d..89f0b3c 100644 --- a/src/UpdateCommand.php +++ b/src/UpdateCommand.php @@ -3,7 +3,6 @@ namespace LakeDrops\Docker4Drupal; use LakeDrops\Component\Composer\BaseCommand; -use LakeDrops\Component\Composer\BaseHandlerInterface; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -26,10 +25,6 @@ class UpdateCommand extends BaseCommand { /** * {@inheritdoc} - * - * @throws \Twig\Error\LoaderError - * @throws \Twig\Error\RuntimeError - * @throws \Twig\Error\SyntaxError */ protected function execute(InputInterface $input, OutputInterface $output): int { parent::execute($input, $output); diff --git a/templates/docker-compose.yml.twig b/templates/docker-compose.yml.twig index 031f710..5a31ea8 100644 --- a/templates/docker-compose.yml.twig +++ b/templates/docker-compose.yml.twig @@ -82,8 +82,7 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`{{ projectname }}.{{ traefik.domain }}`) - #{% for domain in extradomains|default([]) %},{{ domain }}{% endfor %}' + traefik.http.routers.{{ projectname }}_{{ webserver.type }}.rule: Host(`{{ projectname }}.{{ traefik.domain }}`){% for domain in extradomains|default([]) %} || Host(`{{ domain }}`){% endfor %}' {% if varnish.enable %} varnish: @@ -97,7 +96,7 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`varnish.{{ projectname }}.{{ traefik.domain }}`) + traefik.http.routers.{{ projectname }}_varnish.rule: Host(`varnish-{{ projectname }}.{{ traefik.domain }}`) {% endif %} redis: @@ -111,8 +110,8 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`adminer.{{ projectname }}.{{ traefik.domain }}`) - #traefik.port: '9000' + traefik.http.services.{{ projectname }}_adminer.loadbalancer.server.port: 9000 + traefik.http.routers.{{ projectname }}_adminer.rule: Host(`adminer-{{ projectname }}.{{ traefik.domain }}`) {% elseif dbbrowser.type == 'pma' %} pma: image: 'phpmyadmin/phpmyadmin:5' @@ -125,7 +124,7 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`pma.{{ projectname }}.{{ traefik.domain }}`) + traefik.http.routers.{{ projectname }}_pma.rule: Host(`pma-{{ projectname }}.{{ traefik.domain }}`) {% endif %} {% if solr.enable %} @@ -136,8 +135,8 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`solr.{{ projectname }}.{{ traefik.domain }}`) - #traefik.port: '8983' + traefik.http.services.{{ projectname }}_solr.loadbalancer.server.port: 8983 + traefik.http.routers.{{ projectname }}_solr.rule: Host(`solr-{{ projectname }}.{{ traefik.domain }}`) {% endif %} mailhog: @@ -145,8 +144,8 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`mailhog.{{ projectname }}.{{ traefik.domain }}`) - #traefik.port: '8025' + traefik.http.services.{{ projectname }}_mailhog.loadbalancer.server.port: 8025 + traefik.http.routers.{{ projectname }}_mailhog.rule: Host(`mailhog-{{ projectname }}.{{ traefik.domain }}`) {% if node.enable %} nodejs: @@ -156,8 +155,8 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`nodejs.{{ projectname }}.{{ traefik.domain }}`) - #traefik.port: '8080' + traefik.http.services.{{ projectname }}_nodejs.loadbalancer.server.port: 8080 + traefik.http.routers.{{ projectname }}_nodejs.rule: Host(`nodejs-{{ projectname }}.{{ traefik.domain }}`) volumes: - {{ projectroot }}/{{ node.path }}:/app command: sh -c 'npm install && npm run start' @@ -168,8 +167,8 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`front.{{ projectname }}.{{ traefik.domain }}`) - #traefik.port: '3000' + traefik.http.services.{{ projectname }}_node.loadbalancer.server.port: 3000 + traefik.http.routers.{{ projectname }}_node.rule: Host(`front-{{ projectname }}.{{ traefik.domain }}`) expose: - '3000' volumes: @@ -216,8 +215,8 @@ services: labels: traefik.enable: true traefik.network: {{ projectname }} - traefik.http.routers.whoami.rule: Host(`webgrind.{{ projectname }}.{{ traefik.domain }}`) - #traefik.port: '8080' + traefik.http.services.{{ projectname }}_webgrind.loadbalancer.server.port: 8080 + traefik.http.routers.{{ projectname }}_webgrind.rule: Host(`webgrind-{{ projectname }}.{{ traefik.domain }}`) volumes: - {{ projectroot }}/files:/mnt/files {% endif %} -- GitLab