diff --git a/docs/diagrams/docker-compose.dot b/docs/diagrams/docker-compose.dot index 30a23e6..d8ce9bf 100644 --- a/docs/diagrams/docker-compose.dot +++ b/docs/diagrams/docker-compose.dot @@ -1,5 +1,5 @@ digraph DockerTraefikDynu { - graph [rankdir=LR, compound=true, splines=ortho, nodesep=0.5, ranksep=1.0, fontname="Helvetica"]; + graph [rankdir=LR, compound=true, splines=true, nodesep=0.5, ranksep=1.0, fontname="Helvetica"]; node [fontname="Helvetica", fontsize=10, style="rounded,filled"]; edge [fontname="Helvetica", fontsize=9]; "ext:dynu" [label="Dynu / Public DNS", shape=oval, fillcolor="#fde68a"]; @@ -13,7 +13,8 @@ digraph DockerTraefikDynu { "svc:authelia" -> "net:traefik" [color="#6b7280"]; "router:authelia" [label="router:authelia\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:authelia"; - "router:authelia" -> "svc:authelia" [label="service:authelia"]; + "traefik-service:authelia" [label="service:authelia", shape=component, fillcolor="#fecaca"]; + "router:authelia" -> "traefik-service:authelia"; "dns:service-1." [label="service-1.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-1."; "dns:service-1." -> "router:authelia"; @@ -28,44 +29,48 @@ digraph DockerTraefikDynu { "svc:error-pages" -> "net:traefik" [color="#6b7280"]; "router:error-pages-router" [label="router:error-pages-router\nentry:web tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:error-pages-router"; - "router:error-pages-router" -> "svc:error-pages" [label="service:error-pages"]; + "traefik-service:error-pages" [label="service:error-pages", shape=component, fillcolor="#fecaca"]; + "router:error-pages-router" -> "traefik-service:error-pages"; "mw:error-pages-middleware" [label="error-pages-middleware", shape=hexagon, fillcolor="#ddd6fe"]; "router:error-pages-router" -> "mw:error-pages-middleware" [style=dashed]; - "lb:error-pages:error-pages-service" [label="lb:error-pages-service\nport:8080", shape=component, fillcolor="#fecaca"]; - "lb:error-pages:error-pages-service" -> "svc:error-pages"; + "traefik-service:error-pages-service" [label="service:error-pages-service\nport:8080", shape=component, fillcolor="#fecaca"]; + "traefik-service:error-pages-service" -> "svc:error-pages"; "svc:gitea" [label="gitea", shape=box, fillcolor="#dcfce7"]; "svc:gitea" -> "net:traefik" [color="#6b7280"]; "router:gitea" [label="router:gitea\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:gitea"; - "router:gitea" -> "svc:gitea" [label="service:gitea"]; + "traefik-service:gitea" [label="service:gitea", shape=component, fillcolor="#fecaca"]; + "router:gitea" -> "traefik-service:gitea"; "dns:service-2." [label="service-2.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-2."; "dns:service-2." -> "router:gitea"; - "lb:gitea:gitea" [label="lb:gitea\nport:3000", shape=component, fillcolor="#fecaca"]; - "lb:gitea:gitea" -> "svc:gitea"; + "traefik-service:gitea" [label="service:gitea\nport:3000", shape=component, fillcolor="#fecaca"]; + "traefik-service:gitea" -> "svc:gitea"; "svc:gitea-runner" [label="gitea-runner", shape=box, fillcolor="#dcfce7"]; "svc:gitea-runner" -> "net:traefik" [color="#6b7280"]; "svc:gotify" [label="gotify", shape=box, fillcolor="#dcfce7"]; "svc:gotify" -> "net:traefik" [color="#6b7280"]; "router:gotify" [label="router:gotify\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:gotify"; - "router:gotify" -> "svc:gotify" [label="service:gotify"]; + "traefik-service:gotify" [label="service:gotify", shape=component, fillcolor="#fecaca"]; + "router:gotify" -> "traefik-service:gotify"; "dns:service-3." [label="service-3.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-3."; "dns:service-3." -> "router:gotify"; - "lb:gotify:gotify" [label="lb:gotify\nport:80", shape=component, fillcolor="#fecaca"]; - "lb:gotify:gotify" -> "svc:gotify"; + "traefik-service:gotify" [label="service:gotify\nport:80", shape=component, fillcolor="#fecaca"]; + "traefik-service:gotify" -> "svc:gotify"; "svc:grafana" [label="grafana", shape=box, fillcolor="#dcfce7"]; "svc:grafana" -> "net:monitor" [color="#6b7280"]; "svc:grafana" -> "net:traefik" [color="#6b7280"]; "router:grafana" [label="router:grafana\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:grafana"; - "router:grafana" -> "svc:grafana" [label="service:grafana"]; + "traefik-service:grafana" [label="service:grafana", shape=component, fillcolor="#fecaca"]; + "router:grafana" -> "traefik-service:grafana"; "dns:service-4." [label="service-4.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-4."; "dns:service-4." -> "router:grafana"; - "lb:grafana:grafana" [label="lb:grafana\nport:3000", shape=component, fillcolor="#fecaca"]; - "lb:grafana:grafana" -> "svc:grafana"; + "traefik-service:grafana" [label="service:grafana\nport:3000", shape=component, fillcolor="#fecaca"]; + "traefik-service:grafana" -> "svc:grafana"; "svc:gramps-redis" [label="gramps-redis", shape=box, fillcolor="#dcfce7"]; "svc:gramps-redis" -> "net:gramps" [color="#6b7280"]; "svc:grampsweb" [label="grampsweb", shape=box, fillcolor="#dcfce7"]; @@ -73,12 +78,13 @@ digraph DockerTraefikDynu { "svc:grampsweb" -> "net:traefik" [color="#6b7280"]; "router:gramps" [label="router:gramps\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:gramps"; - "router:gramps" -> "svc:grampsweb" [label="service:grampsweb"]; + "traefik-service:grampsweb" [label="service:grampsweb", shape=component, fillcolor="#fecaca"]; + "router:gramps" -> "traefik-service:grampsweb"; "dns:service-5." [label="service-5.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-5."; "dns:service-5." -> "router:gramps"; - "lb:grampsweb:gramps" [label="lb:gramps\nport:5000", shape=component, fillcolor="#fecaca"]; - "lb:grampsweb:gramps" -> "svc:grampsweb"; + "traefik-service:gramps" [label="service:gramps\nport:5000", shape=component, fillcolor="#fecaca"]; + "traefik-service:gramps" -> "svc:grampsweb"; "svc:grampsweb_celery" [label="grampsweb_celery", shape=box, fillcolor="#dcfce7"]; "svc:grampsweb_celery" -> "net:gramps" [color="#6b7280"]; "svc:influxdb" [label="influxdb", shape=box, fillcolor="#dcfce7"]; @@ -86,31 +92,34 @@ digraph DockerTraefikDynu { "svc:influxdb" -> "net:traefik" [color="#6b7280"]; "router:influxdb" [label="router:influxdb\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:influxdb"; - "router:influxdb" -> "svc:influxdb" [label="service:influxdb"]; + "traefik-service:influxdb" [label="service:influxdb", shape=component, fillcolor="#fecaca"]; + "router:influxdb" -> "traefik-service:influxdb"; "dns:service-6." [label="service-6.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-6."; "dns:service-6." -> "router:influxdb"; "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; "router:influxdb" -> "mw:authelia" [style=dashed]; - "lb:influxdb:influxdb" [label="lb:influxdb\nport:8086", shape=component, fillcolor="#fecaca"]; - "lb:influxdb:influxdb" -> "svc:influxdb"; + "traefik-service:influxdb" [label="service:influxdb\nport:8086", shape=component, fillcolor="#fecaca"]; + "traefik-service:influxdb" -> "svc:influxdb"; "svc:monitor-kuma" [label="monitor-kuma", shape=box, fillcolor="#dcfce7"]; "svc:monitor-kuma" -> "net:monitor" [color="#6b7280"]; "svc:monitor-kuma" -> "net:traefik" [color="#6b7280"]; "router:monitor" [label="router:monitor\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:monitor"; - "router:monitor" -> "svc:monitor-kuma" [label="service:monitor-kuma"]; + "traefik-service:monitor-kuma" [label="service:monitor-kuma", shape=component, fillcolor="#fecaca"]; + "router:monitor" -> "traefik-service:monitor-kuma"; "dns:service-7." [label="service-7.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-7."; "dns:service-7." -> "router:monitor"; - "lb:monitor-kuma:monitor" [label="lb:monitor\nport:3001", shape=component, fillcolor="#fecaca"]; - "lb:monitor-kuma:monitor" -> "svc:monitor-kuma"; + "traefik-service:monitor" [label="service:monitor\nport:3001", shape=component, fillcolor="#fecaca"]; + "traefik-service:monitor" -> "svc:monitor-kuma"; "svc:mtls-bridge" [label="mtls-bridge", shape=box, fillcolor="#dcfce7"]; "svc:mtls-bridge" -> "net:monitor" [color="#6b7280"]; "svc:mtls-bridge" -> "net:traefik" [color="#6b7280"]; "router:mtls-bridge" [label="router:mtls-bridge\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:mtls-bridge"; - "router:mtls-bridge" -> "svc:mtls-bridge" [label="service:mtls-bridge"]; + "traefik-service:mtls-bridge" [label="service:mtls-bridge", shape=component, fillcolor="#fecaca"]; + "router:mtls-bridge" -> "traefik-service:mtls-bridge"; "dns:service-8." [label="service-8.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-8."; "dns:service-8." -> "router:mtls-bridge"; @@ -120,14 +129,15 @@ digraph DockerTraefikDynu { "router:mtls-bridge" -> "mw:mtls-bridge-cors" [style=dashed]; "router:mtls-bridge-preflight" [label="router:mtls-bridge-preflight\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:mtls-bridge-preflight"; - "router:mtls-bridge-preflight" -> "svc:mtls-bridge" [label="service:mtls-bridge"]; + "traefik-service:mtls-bridge" [label="service:mtls-bridge", shape=component, fillcolor="#fecaca"]; + "router:mtls-bridge-preflight" -> "traefik-service:mtls-bridge"; "dns:service-8." [label="service-8.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-8."; "dns:service-8." -> "router:mtls-bridge-preflight"; "mw:mtls-bridge-cors" [label="mtls-bridge-cors", shape=hexagon, fillcolor="#ddd6fe"]; "router:mtls-bridge-preflight" -> "mw:mtls-bridge-cors" [style=dashed]; - "lb:mtls-bridge:mtls-bridge" [label="lb:mtls-bridge\nport:8080", shape=component, fillcolor="#fecaca"]; - "lb:mtls-bridge:mtls-bridge" -> "svc:mtls-bridge"; + "traefik-service:mtls-bridge" [label="service:mtls-bridge\nport:8080", shape=component, fillcolor="#fecaca"]; + "traefik-service:mtls-bridge" -> "svc:mtls-bridge"; "svc:nextcloud-db" [label="nextcloud-db", shape=box, fillcolor="#dcfce7"]; "svc:nextcloud-db" -> "net:nextcloud" [color="#6b7280"]; "svc:nextcloud-redis" [label="nextcloud-redis", shape=box, fillcolor="#dcfce7"]; @@ -137,7 +147,8 @@ digraph DockerTraefikDynu { "svc:nextcloud-webapp" -> "net:traefik" [color="#6b7280"]; "router:nextcloud" [label="router:nextcloud\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:nextcloud"; - "router:nextcloud" -> "svc:nextcloud-webapp" [label="service:nextcloud-webapp"]; + "traefik-service:nextcloud-webapp" [label="service:nextcloud-webapp", shape=component, fillcolor="#fecaca"]; + "router:nextcloud" -> "traefik-service:nextcloud-webapp"; "dns:service-9." [label="service-9.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-9."; "dns:service-9." -> "router:nextcloud"; @@ -152,14 +163,15 @@ digraph DockerTraefikDynu { "svc:node-red" -> "net:traefik" [color="#6b7280"]; "router:node-red" [label="router:node-red\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:node-red"; - "router:node-red" -> "svc:node-red" [label="service:node-red"]; + "traefik-service:node-red" [label="service:node-red", shape=component, fillcolor="#fecaca"]; + "router:node-red" -> "traefik-service:node-red"; "dns:service-10." [label="service-10.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-10."; "dns:service-10." -> "router:node-red"; "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; "router:node-red" -> "mw:authelia" [style=dashed]; - "lb:node-red:node-red" [label="lb:node-red\nport:1880", shape=component, fillcolor="#fecaca"]; - "lb:node-red:node-red" -> "svc:node-red"; + "traefik-service:node-red" [label="service:node-red\nport:1880", shape=component, fillcolor="#fecaca"]; + "traefik-service:node-red" -> "svc:node-red"; "svc:passbolt-db" [label="passbolt-db", shape=box, fillcolor="#dcfce7"]; "svc:passbolt-db" -> "net:passbolt" [color="#6b7280"]; "svc:passbolt-webapp" [label="passbolt-webapp", shape=box, fillcolor="#dcfce7"]; @@ -167,7 +179,8 @@ digraph DockerTraefikDynu { "svc:passbolt-webapp" -> "net:traefik" [color="#6b7280"]; "router:passbolt" [label="router:passbolt\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:passbolt"; - "router:passbolt" -> "svc:passbolt-webapp" [label="service:passbolt-webapp"]; + "traefik-service:passbolt-webapp" [label="service:passbolt-webapp", shape=component, fillcolor="#fecaca"]; + "router:passbolt" -> "traefik-service:passbolt-webapp"; "dns:service-11." [label="service-11.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-11."; "dns:service-11." -> "router:passbolt"; @@ -177,62 +190,68 @@ digraph DockerTraefikDynu { "svc:portainer" -> "net:traefik" [color="#6b7280"]; "router:portainer" [label="router:portainer\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:portainer"; - "router:portainer" -> "svc:portainer" [label="service:portainer"]; + "traefik-service:portainer" [label="service:portainer", shape=component, fillcolor="#fecaca"]; + "router:portainer" -> "traefik-service:portainer"; "dns:service-12." [label="service-12.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-12."; "dns:service-12." -> "router:portainer"; - "lb:portainer:portainer" [label="lb:portainer\nport:9000", shape=component, fillcolor="#fecaca"]; - "lb:portainer:portainer" -> "svc:portainer"; + "traefik-service:portainer" [label="service:portainer\nport:9000", shape=component, fillcolor="#fecaca"]; + "traefik-service:portainer" -> "svc:portainer"; "svc:prometheus" [label="prometheus", shape=box, fillcolor="#dcfce7"]; "svc:prometheus" -> "net:monitor" [color="#6b7280"]; "svc:prometheus" -> "net:traefik" [color="#6b7280"]; "router:prometheus" [label="router:prometheus\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:prometheus"; - "router:prometheus" -> "svc:prometheus" [label="service:prometheus"]; + "traefik-service:prometheus" [label="service:prometheus", shape=component, fillcolor="#fecaca"]; + "router:prometheus" -> "traefik-service:prometheus"; "dns:service-13." [label="service-13.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-13."; "dns:service-13." -> "router:prometheus"; "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; "router:prometheus" -> "mw:authelia" [style=dashed]; - "lb:prometheus:prometheus" [label="lb:prometheus\nport:9090", shape=component, fillcolor="#fecaca"]; - "lb:prometheus:prometheus" -> "svc:prometheus"; + "traefik-service:prometheus" [label="service:prometheus\nport:9090", shape=component, fillcolor="#fecaca"]; + "traefik-service:prometheus" -> "svc:prometheus"; "svc:searxng-webapp" [label="searxng-webapp", shape=box, fillcolor="#dcfce7"]; "svc:searxng-webapp" -> "net:traefik" [color="#6b7280"]; "router:searxng" [label="router:searxng\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:searxng"; - "router:searxng" -> "svc:searxng-webapp" [label="service:searxng-webapp"]; + "traefik-service:searxng-webapp" [label="service:searxng-webapp", shape=component, fillcolor="#fecaca"]; + "router:searxng" -> "traefik-service:searxng-webapp"; "dns:service-14." [label="service-14.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-14."; "dns:service-14." -> "router:searxng"; - "lb:searxng-webapp:searxng" [label="lb:searxng\nport:8080", shape=component, fillcolor="#fecaca"]; - "lb:searxng-webapp:searxng" -> "svc:searxng-webapp"; + "traefik-service:searxng" [label="service:searxng\nport:8080", shape=component, fillcolor="#fecaca"]; + "traefik-service:searxng" -> "svc:searxng-webapp"; "svc:shift-recorder-web" [label="shift-recorder-web", shape=box, fillcolor="#dcfce7"]; "svc:shift-recorder-web" -> "net:traefik" [color="#6b7280"]; "router:shifts" [label="router:shifts\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:shifts"; - "router:shifts" -> "svc:shift-recorder-web" [label="service:shift-recorder-web"]; + "traefik-service:shift-recorder-web" [label="service:shift-recorder-web", shape=component, fillcolor="#fecaca"]; + "router:shifts" -> "traefik-service:shift-recorder-web"; "dns:service-15." [label="service-15.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-15."; "dns:service-15." -> "router:shifts"; - "lb:shift-recorder-web:shifts" [label="lb:shifts\nport:80", shape=component, fillcolor="#fecaca"]; - "lb:shift-recorder-web:shifts" -> "svc:shift-recorder-web"; + "traefik-service:shifts" [label="service:shifts\nport:80", shape=component, fillcolor="#fecaca"]; + "traefik-service:shifts" -> "svc:shift-recorder-web"; "svc:stockfill" [label="stockfill", shape=box, fillcolor="#dcfce7"]; "svc:stockfill" -> "net:traefik" [color="#6b7280"]; "router:stockfill" [label="router:stockfill\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:stockfill"; - "router:stockfill" -> "svc:stockfill" [label="service:stockfill"]; + "traefik-service:stockfill" [label="service:stockfill", shape=component, fillcolor="#fecaca"]; + "router:stockfill" -> "traefik-service:stockfill"; "dns:service-16." [label="service-16.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-16."; "dns:service-16." -> "router:stockfill"; - "lb:stockfill:stockfill" [label="lb:stockfill\nport:80", shape=component, fillcolor="#fecaca"]; - "lb:stockfill:stockfill" -> "svc:stockfill"; + "traefik-service:stockfill" [label="service:stockfill\nport:80", shape=component, fillcolor="#fecaca"]; + "traefik-service:stockfill" -> "svc:stockfill"; "svc:telegraf" [label="telegraf", shape=box, fillcolor="#dcfce7"]; "svc:telegraf" -> "net:monitor" [color="#6b7280"]; "svc:traefik" [label="traefik", shape=box, fillcolor="#dcfce7"]; "svc:traefik" -> "net:traefik" [color="#6b7280"]; "router:traefik" [label="router:traefik\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:traefik"; - "router:traefik" -> "svc:traefik" [label="service:api@internal"]; + "traefik-service:api@internal" [label="service:api@internal", shape=component, fillcolor="#fecaca"]; + "router:traefik" -> "traefik-service:api@internal"; "dns:service-17." [label="service-17.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-17."; "dns:service-17." -> "router:traefik"; diff --git a/docs/diagrams/docker-compose.svg b/docs/diagrams/docker-compose.svg index 9ba6e9e..3011e6a 100644 --- a/docs/diagrams/docker-compose.svg +++ b/docs/diagrams/docker-compose.svg @@ -4,1504 +4,1557 @@ - - + + DockerTraefikDynu - + ext:dynu - -Dynu / Public DNS + +Dynu / Public DNS - + dns:service-1.<internal-domain> - - - -service-1.<internal-domain> + + + +service-1.<internal-domain> ext:dynu->dns:service-1.<internal-domain> - - + + - + dns:service-2.<internal-domain> - - - -service-2.<internal-domain> + + + +service-2.<internal-domain> ext:dynu->dns:service-2.<internal-domain> - - + + - + dns:service-3.<internal-domain> - - - -service-3.<internal-domain> + + + +service-3.<internal-domain> ext:dynu->dns:service-3.<internal-domain> - - + + - + dns:service-4.<internal-domain> - - - -service-4.<internal-domain> + + + +service-4.<internal-domain> ext:dynu->dns:service-4.<internal-domain> - - + + - + dns:service-5.<internal-domain> - - - -service-5.<internal-domain> + + + +service-5.<internal-domain> ext:dynu->dns:service-5.<internal-domain> - - + + - + dns:service-6.<internal-domain> - - - -service-6.<internal-domain> + + + +service-6.<internal-domain> ext:dynu->dns:service-6.<internal-domain> - - + + - + dns:service-7.<internal-domain> - - - -service-7.<internal-domain> + + + +service-7.<internal-domain> ext:dynu->dns:service-7.<internal-domain> - - + + - + dns:service-8.<internal-domain> - - - -service-8.<internal-domain> + + + +service-8.<internal-domain> ext:dynu->dns:service-8.<internal-domain> - - + + ext:dynu->dns:service-8.<internal-domain> - - + + - + dns:service-9.<internal-domain> - - - -service-9.<internal-domain> + + + +service-9.<internal-domain> ext:dynu->dns:service-9.<internal-domain> - - + + - + dns:service-10.<internal-domain> - - - -service-10.<internal-domain> + + + +service-10.<internal-domain> ext:dynu->dns:service-10.<internal-domain> - - + + - + dns:service-11.<internal-domain> - - - -service-11.<internal-domain> + + + +service-11.<internal-domain> ext:dynu->dns:service-11.<internal-domain> - - + + - + dns:service-12.<internal-domain> - - - -service-12.<internal-domain> + + + +service-12.<internal-domain> ext:dynu->dns:service-12.<internal-domain> - - + + - + dns:service-13.<internal-domain> - - - -service-13.<internal-domain> + + + +service-13.<internal-domain> ext:dynu->dns:service-13.<internal-domain> - - + + - + dns:service-14.<internal-domain> - - - -service-14.<internal-domain> + + + +service-14.<internal-domain> ext:dynu->dns:service-14.<internal-domain> - - + + - + dns:service-15.<internal-domain> - - - -service-15.<internal-domain> + + + +service-15.<internal-domain> ext:dynu->dns:service-15.<internal-domain> - - + + - + dns:service-16.<internal-domain> - - - -service-16.<internal-domain> + + + +service-16.<internal-domain> ext:dynu->dns:service-16.<internal-domain> - - + + - + dns:service-17.<internal-domain> - - - -service-17.<internal-domain> + + + +service-17.<internal-domain> ext:dynu->dns:service-17.<internal-domain> - - + + svc:traefik - -traefik + +traefik net:traefik - -traefik + +traefik svc:traefik->net:traefik - - + + router:authelia - -router:authelia -entry:websecure tls:true + +router:authelia +entry:websecure tls:true svc:traefik->router:authelia - - + + - + router:error-pages-router - -router:error-pages-router -entry:web tls:false + +router:error-pages-router +entry:web tls:false svc:traefik->router:error-pages-router - - + + - + router:gitea - -router:gitea -entry:websecure tls:true + +router:gitea +entry:websecure tls:true svc:traefik->router:gitea - - + + - + router:gotify - -router:gotify -entry:websecure tls:false + +router:gotify +entry:websecure tls:false svc:traefik->router:gotify - - + + - + router:grafana - -router:grafana -entry:websecure tls:false + +router:grafana +entry:websecure tls:false svc:traefik->router:grafana - - + + - + router:gramps - -router:gramps -entry:websecure tls:false + +router:gramps +entry:websecure tls:false svc:traefik->router:gramps - - + + - + router:influxdb - -router:influxdb -entry:websecure tls:false + +router:influxdb +entry:websecure tls:false svc:traefik->router:influxdb - - + + - + router:monitor - -router:monitor -entry:websecure tls:true + +router:monitor +entry:websecure tls:true svc:traefik->router:monitor - - + + - + router:mtls-bridge - -router:mtls-bridge -entry:websecure tls:false + +router:mtls-bridge +entry:websecure tls:false svc:traefik->router:mtls-bridge - - + + - + router:mtls-bridge-preflight - -router:mtls-bridge-preflight -entry:websecure tls:false + +router:mtls-bridge-preflight +entry:websecure tls:false svc:traefik->router:mtls-bridge-preflight - - + + - + router:nextcloud - -router:nextcloud -entry:websecure tls:false + +router:nextcloud +entry:websecure tls:false svc:traefik->router:nextcloud - - + + - + router:node-red - -router:node-red -entry:websecure tls:false + +router:node-red +entry:websecure tls:false svc:traefik->router:node-red - - + + - + router:passbolt - -router:passbolt -entry:websecure tls:false + +router:passbolt +entry:websecure tls:false svc:traefik->router:passbolt - - + + - + router:portainer - -router:portainer -entry:websecure tls:true + +router:portainer +entry:websecure tls:true svc:traefik->router:portainer - - + + - + router:prometheus - -router:prometheus -entry:websecure tls:false + +router:prometheus +entry:websecure tls:false svc:traefik->router:prometheus - - + + - + router:searxng - -router:searxng -entry:websecure tls:false + +router:searxng +entry:websecure tls:false svc:traefik->router:searxng - - + + - + router:shifts - -router:shifts -entry:websecure tls:true + +router:shifts +entry:websecure tls:true svc:traefik->router:shifts - - + + - + router:stockfill - -router:stockfill -entry:websecure tls:true + +router:stockfill +entry:websecure tls:true svc:traefik->router:stockfill - - + + - + router:traefik - -router:traefik -entry:websecure tls:false + +router:traefik +entry:websecure tls:false svc:traefik->router:traefik - - + + net:gramps - -gramps + +gramps net:monitor - -monitor + +monitor net:nextcloud - -nextcloud + +nextcloud net:passbolt - -passbolt + +passbolt svc:authelia - -authelia + +authelia svc:authelia->net:traefik - - + + - + + +traefik-service:authelia + + + +service:authelia + + -router:authelia->svc:authelia - - -service:authelia +router:authelia->traefik-service:authelia + + dns:service-1.<internal-domain>->router:authelia - - + + - + svc:crowdsec - -crowdsec + +crowdsec svc:crowdsec->net:traefik - - + + - + svc:docker-socket-proxy - -docker-socket-proxy + +docker-socket-proxy svc:docker-socket-proxy->net:monitor - - + + svc:docker-socket-proxy->net:traefik - - + + - + svc:docker-update-exporter - -docker-update-exporter + +docker-update-exporter svc:docker-update-exporter->net:monitor - - + + - + svc:error-pages - -error-pages + +error-pages svc:error-pages->net:traefik - - + + - + + +traefik-service:error-pages + + + +service:error-pages + + -router:error-pages-router->svc:error-pages - - -service:error-pages +router:error-pages-router->traefik-service:error-pages + + - + mw:error-pages-middleware - -error-pages-middleware + +error-pages-middleware router:error-pages-router->mw:error-pages-middleware - - + + - - -lb:error-pages:error-pages-service - - - -lb:error-pages-service -port:8080 + + +traefik-service:error-pages-service + + + +service:error-pages-service +port:8080 - + -lb:error-pages:error-pages-service->svc:error-pages - - +traefik-service:error-pages-service->svc:error-pages + + - + svc:gitea - -gitea + +gitea svc:gitea->net:traefik - - + + - + + +traefik-service:gitea + + + +service:gitea +port:3000 + + -router:gitea->svc:gitea - - -service:gitea +router:gitea->traefik-service:gitea + + + + + +traefik-service:gitea->svc:gitea + + dns:service-2.<internal-domain>->router:gitea - - - - - -lb:gitea:gitea - - - -lb:gitea -port:3000 - - - -lb:gitea:gitea->svc:gitea - - + + - + svc:gitea-runner - -gitea-runner + +gitea-runner svc:gitea-runner->net:traefik - - + + - + svc:gotify - -gotify + +gotify svc:gotify->net:traefik - - + + - + + +traefik-service:gotify + + + +service:gotify +port:80 + + -router:gotify->svc:gotify - - -service:gotify +router:gotify->traefik-service:gotify + + + + + +traefik-service:gotify->svc:gotify + + dns:service-3.<internal-domain>->router:gotify - - - - - -lb:gotify:gotify - - - -lb:gotify -port:80 - - - -lb:gotify:gotify->svc:gotify - - + + - + svc:grafana - -grafana + +grafana svc:grafana->net:monitor - - + + svc:grafana->net:traefik - - + + - + + +traefik-service:grafana + + + +service:grafana +port:3000 + + -router:grafana->svc:grafana - - -service:grafana +router:grafana->traefik-service:grafana + + + + + +traefik-service:grafana->svc:grafana + + dns:service-4.<internal-domain>->router:grafana - - - - - -lb:grafana:grafana - - - -lb:grafana -port:3000 - - - -lb:grafana:grafana->svc:grafana - - + + - + svc:gramps-redis - -gramps-redis + +gramps-redis svc:gramps-redis->net:gramps - - + + - + svc:grampsweb - -grampsweb + +grampsweb svc:grampsweb->net:gramps - - + + svc:grampsweb->net:traefik - - + + - + + +traefik-service:grampsweb + + + +service:grampsweb + + -router:gramps->svc:grampsweb - - -service:grampsweb +router:gramps->traefik-service:grampsweb + + dns:service-5.<internal-domain>->router:gramps - - + + - - -lb:grampsweb:gramps - - - -lb:gramps -port:5000 + + +traefik-service:gramps + + + +service:gramps +port:5000 - + -lb:grampsweb:gramps->svc:grampsweb - - +traefik-service:gramps->svc:grampsweb + + - + svc:grampsweb_celery - -grampsweb_celery + +grampsweb_celery svc:grampsweb_celery->net:gramps - - + + - + svc:influxdb - -influxdb + +influxdb svc:influxdb->net:monitor - - + + svc:influxdb->net:traefik - - + + - + + +traefik-service:influxdb + + + +service:influxdb +port:8086 + + -router:influxdb->svc:influxdb - - -service:influxdb +router:influxdb->traefik-service:influxdb + + - + mw:authelia - -authelia + +authelia router:influxdb->mw:authelia - - + + + + + +traefik-service:influxdb->svc:influxdb + + dns:service-6.<internal-domain>->router:influxdb - - - - - -lb:influxdb:influxdb - - - -lb:influxdb -port:8086 - - - -lb:influxdb:influxdb->svc:influxdb - - + + - + svc:monitor-kuma - -monitor-kuma + +monitor-kuma svc:monitor-kuma->net:monitor - - + + svc:monitor-kuma->net:traefik - - + + - + + +traefik-service:monitor-kuma + + + +service:monitor-kuma + + -router:monitor->svc:monitor-kuma - - -service:monitor-kuma +router:monitor->traefik-service:monitor-kuma + + dns:service-7.<internal-domain>->router:monitor - - + + - - -lb:monitor-kuma:monitor - - - -lb:monitor -port:3001 + + +traefik-service:monitor + + + +service:monitor +port:3001 - + -lb:monitor-kuma:monitor->svc:monitor-kuma - - +traefik-service:monitor->svc:monitor-kuma + + - + svc:mtls-bridge - -mtls-bridge + +mtls-bridge svc:mtls-bridge->net:monitor - - + + svc:mtls-bridge->net:traefik - - + + - + + +traefik-service:mtls-bridge + + + +service:mtls-bridge +port:8080 + + -router:mtls-bridge->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge->traefik-service:mtls-bridge + + - + mw:mtls-bridge-auth - -mtls-bridge-auth + +mtls-bridge-auth router:mtls-bridge->mw:mtls-bridge-auth - - + + - + mw:mtls-bridge-cors - -mtls-bridge-cors + +mtls-bridge-cors router:mtls-bridge->mw:mtls-bridge-cors - - + + + + + +traefik-service:mtls-bridge->svc:mtls-bridge + + dns:service-8.<internal-domain>->router:mtls-bridge - - + + dns:service-8.<internal-domain>->router:mtls-bridge-preflight - - + + - + -router:mtls-bridge-preflight->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge-preflight->traefik-service:mtls-bridge + + router:mtls-bridge-preflight->mw:mtls-bridge-cors - - - - - -lb:mtls-bridge:mtls-bridge - - - -lb:mtls-bridge -port:8080 - - - -lb:mtls-bridge:mtls-bridge->svc:mtls-bridge - - + + - + svc:nextcloud-db - -nextcloud-db + +nextcloud-db svc:nextcloud-db->net:nextcloud - - + + - + svc:nextcloud-redis - -nextcloud-redis + +nextcloud-redis svc:nextcloud-redis->net:nextcloud - - + + - + svc:nextcloud-webapp - -nextcloud-webapp + +nextcloud-webapp svc:nextcloud-webapp->net:nextcloud - - + + svc:nextcloud-webapp->net:traefik - - + + - + + +traefik-service:nextcloud-webapp + + + +service:nextcloud-webapp + + -router:nextcloud->svc:nextcloud-webapp - - -service:nextcloud-webapp +router:nextcloud->traefik-service:nextcloud-webapp + + - + mw:nextcloud-dav - -nextcloud-dav + +nextcloud-dav router:nextcloud->mw:nextcloud-dav - - + + - + mw:nextcloud-webfinger - -nextcloud-webfinger + +nextcloud-webfinger router:nextcloud->mw:nextcloud-webfinger - - + + dns:service-9.<internal-domain>->router:nextcloud - - + + - + svc:node-exporter - -node-exporter + +node-exporter svc:node-exporter->net:monitor - - + + - + svc:node-red - -node-red + +node-red svc:node-red->net:monitor - - + + svc:node-red->net:traefik - - + + router:node-red->mw:authelia - - + + - + + +traefik-service:node-red + + + +service:node-red +port:1880 + + -router:node-red->svc:node-red - - -service:node-red +router:node-red->traefik-service:node-red + + + + + +traefik-service:node-red->svc:node-red + + dns:service-10.<internal-domain>->router:node-red - - - - - -lb:node-red:node-red - - - -lb:node-red -port:1880 - - - -lb:node-red:node-red->svc:node-red - - + + - + svc:passbolt-db - -passbolt-db + +passbolt-db svc:passbolt-db->net:passbolt - - + + - + svc:passbolt-webapp - -passbolt-webapp + +passbolt-webapp svc:passbolt-webapp->net:passbolt - - + + svc:passbolt-webapp->net:traefik - - + + - + + +traefik-service:passbolt-webapp + + + +service:passbolt-webapp + + -router:passbolt->svc:passbolt-webapp - - -service:passbolt-webapp +router:passbolt->traefik-service:passbolt-webapp + + dns:service-11.<internal-domain>->router:passbolt - - + + - + svc:pihole-exporter - -pihole-exporter + +pihole-exporter svc:pihole-exporter->net:monitor - - + + - + svc:portainer - -portainer + +portainer svc:portainer->net:traefik - - + + - + + +traefik-service:portainer + + + +service:portainer +port:9000 + + -router:portainer->svc:portainer - - -service:portainer +router:portainer->traefik-service:portainer + + + + + +traefik-service:portainer->svc:portainer + + dns:service-12.<internal-domain>->router:portainer - - - - - -lb:portainer:portainer - - - -lb:portainer -port:9000 - - - -lb:portainer:portainer->svc:portainer - - + + - + svc:prometheus - -prometheus + +prometheus svc:prometheus->net:monitor - - + + svc:prometheus->net:traefik - - + + router:prometheus->mw:authelia - - + + - + + +traefik-service:prometheus + + + +service:prometheus +port:9090 + + -router:prometheus->svc:prometheus - - -service:prometheus +router:prometheus->traefik-service:prometheus + + + + + +traefik-service:prometheus->svc:prometheus + + dns:service-13.<internal-domain>->router:prometheus - - - - - -lb:prometheus:prometheus - - - -lb:prometheus -port:9090 - - - -lb:prometheus:prometheus->svc:prometheus - - + + - + svc:searxng-webapp - -searxng-webapp + +searxng-webapp svc:searxng-webapp->net:traefik - - + + - + + +traefik-service:searxng-webapp + + + +service:searxng-webapp + + -router:searxng->svc:searxng-webapp - - -service:searxng-webapp +router:searxng->traefik-service:searxng-webapp + + dns:service-14.<internal-domain>->router:searxng - - + + - - -lb:searxng-webapp:searxng - - - -lb:searxng -port:8080 + + +traefik-service:searxng + + + +service:searxng +port:8080 - + -lb:searxng-webapp:searxng->svc:searxng-webapp - - +traefik-service:searxng->svc:searxng-webapp + + - + svc:shift-recorder-web - -shift-recorder-web + +shift-recorder-web svc:shift-recorder-web->net:traefik - - + + - + + +traefik-service:shift-recorder-web + + + +service:shift-recorder-web + + -router:shifts->svc:shift-recorder-web - - -service:shift-recorder-web +router:shifts->traefik-service:shift-recorder-web + + dns:service-15.<internal-domain>->router:shifts - - + + - - -lb:shift-recorder-web:shifts - - - -lb:shifts -port:80 + + +traefik-service:shifts + + + +service:shifts +port:80 - + -lb:shift-recorder-web:shifts->svc:shift-recorder-web - - +traefik-service:shifts->svc:shift-recorder-web + + - + svc:stockfill - -stockfill + +stockfill svc:stockfill->net:traefik - - + + - + + +traefik-service:stockfill + + + +service:stockfill +port:80 + + -router:stockfill->svc:stockfill - - -service:stockfill +router:stockfill->traefik-service:stockfill + + + + + +traefik-service:stockfill->svc:stockfill + + dns:service-16.<internal-domain>->router:stockfill - - - - - -lb:stockfill:stockfill - - - -lb:stockfill -port:80 - - - -lb:stockfill:stockfill->svc:stockfill - - + + - + svc:telegraf - -telegraf + +telegraf svc:telegraf->net:monitor - - - - - -router:traefik->svc:traefik - - -service:api@internal + + router:traefik->mw:authelia - - + + + + + +traefik-service:api@internal + + + +service:api@internal + + + +router:traefik->traefik-service:api@internal + + dns:service-17.<internal-domain>->router:traefik - - + + diff --git a/docs/diagrams/docker-traefik-dynu.dot b/docs/diagrams/docker-traefik-dynu.dot index 30a23e6..d8ce9bf 100644 --- a/docs/diagrams/docker-traefik-dynu.dot +++ b/docs/diagrams/docker-traefik-dynu.dot @@ -1,5 +1,5 @@ digraph DockerTraefikDynu { - graph [rankdir=LR, compound=true, splines=ortho, nodesep=0.5, ranksep=1.0, fontname="Helvetica"]; + graph [rankdir=LR, compound=true, splines=true, nodesep=0.5, ranksep=1.0, fontname="Helvetica"]; node [fontname="Helvetica", fontsize=10, style="rounded,filled"]; edge [fontname="Helvetica", fontsize=9]; "ext:dynu" [label="Dynu / Public DNS", shape=oval, fillcolor="#fde68a"]; @@ -13,7 +13,8 @@ digraph DockerTraefikDynu { "svc:authelia" -> "net:traefik" [color="#6b7280"]; "router:authelia" [label="router:authelia\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:authelia"; - "router:authelia" -> "svc:authelia" [label="service:authelia"]; + "traefik-service:authelia" [label="service:authelia", shape=component, fillcolor="#fecaca"]; + "router:authelia" -> "traefik-service:authelia"; "dns:service-1." [label="service-1.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-1."; "dns:service-1." -> "router:authelia"; @@ -28,44 +29,48 @@ digraph DockerTraefikDynu { "svc:error-pages" -> "net:traefik" [color="#6b7280"]; "router:error-pages-router" [label="router:error-pages-router\nentry:web tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:error-pages-router"; - "router:error-pages-router" -> "svc:error-pages" [label="service:error-pages"]; + "traefik-service:error-pages" [label="service:error-pages", shape=component, fillcolor="#fecaca"]; + "router:error-pages-router" -> "traefik-service:error-pages"; "mw:error-pages-middleware" [label="error-pages-middleware", shape=hexagon, fillcolor="#ddd6fe"]; "router:error-pages-router" -> "mw:error-pages-middleware" [style=dashed]; - "lb:error-pages:error-pages-service" [label="lb:error-pages-service\nport:8080", shape=component, fillcolor="#fecaca"]; - "lb:error-pages:error-pages-service" -> "svc:error-pages"; + "traefik-service:error-pages-service" [label="service:error-pages-service\nport:8080", shape=component, fillcolor="#fecaca"]; + "traefik-service:error-pages-service" -> "svc:error-pages"; "svc:gitea" [label="gitea", shape=box, fillcolor="#dcfce7"]; "svc:gitea" -> "net:traefik" [color="#6b7280"]; "router:gitea" [label="router:gitea\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:gitea"; - "router:gitea" -> "svc:gitea" [label="service:gitea"]; + "traefik-service:gitea" [label="service:gitea", shape=component, fillcolor="#fecaca"]; + "router:gitea" -> "traefik-service:gitea"; "dns:service-2." [label="service-2.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-2."; "dns:service-2." -> "router:gitea"; - "lb:gitea:gitea" [label="lb:gitea\nport:3000", shape=component, fillcolor="#fecaca"]; - "lb:gitea:gitea" -> "svc:gitea"; + "traefik-service:gitea" [label="service:gitea\nport:3000", shape=component, fillcolor="#fecaca"]; + "traefik-service:gitea" -> "svc:gitea"; "svc:gitea-runner" [label="gitea-runner", shape=box, fillcolor="#dcfce7"]; "svc:gitea-runner" -> "net:traefik" [color="#6b7280"]; "svc:gotify" [label="gotify", shape=box, fillcolor="#dcfce7"]; "svc:gotify" -> "net:traefik" [color="#6b7280"]; "router:gotify" [label="router:gotify\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:gotify"; - "router:gotify" -> "svc:gotify" [label="service:gotify"]; + "traefik-service:gotify" [label="service:gotify", shape=component, fillcolor="#fecaca"]; + "router:gotify" -> "traefik-service:gotify"; "dns:service-3." [label="service-3.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-3."; "dns:service-3." -> "router:gotify"; - "lb:gotify:gotify" [label="lb:gotify\nport:80", shape=component, fillcolor="#fecaca"]; - "lb:gotify:gotify" -> "svc:gotify"; + "traefik-service:gotify" [label="service:gotify\nport:80", shape=component, fillcolor="#fecaca"]; + "traefik-service:gotify" -> "svc:gotify"; "svc:grafana" [label="grafana", shape=box, fillcolor="#dcfce7"]; "svc:grafana" -> "net:monitor" [color="#6b7280"]; "svc:grafana" -> "net:traefik" [color="#6b7280"]; "router:grafana" [label="router:grafana\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:grafana"; - "router:grafana" -> "svc:grafana" [label="service:grafana"]; + "traefik-service:grafana" [label="service:grafana", shape=component, fillcolor="#fecaca"]; + "router:grafana" -> "traefik-service:grafana"; "dns:service-4." [label="service-4.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-4."; "dns:service-4." -> "router:grafana"; - "lb:grafana:grafana" [label="lb:grafana\nport:3000", shape=component, fillcolor="#fecaca"]; - "lb:grafana:grafana" -> "svc:grafana"; + "traefik-service:grafana" [label="service:grafana\nport:3000", shape=component, fillcolor="#fecaca"]; + "traefik-service:grafana" -> "svc:grafana"; "svc:gramps-redis" [label="gramps-redis", shape=box, fillcolor="#dcfce7"]; "svc:gramps-redis" -> "net:gramps" [color="#6b7280"]; "svc:grampsweb" [label="grampsweb", shape=box, fillcolor="#dcfce7"]; @@ -73,12 +78,13 @@ digraph DockerTraefikDynu { "svc:grampsweb" -> "net:traefik" [color="#6b7280"]; "router:gramps" [label="router:gramps\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:gramps"; - "router:gramps" -> "svc:grampsweb" [label="service:grampsweb"]; + "traefik-service:grampsweb" [label="service:grampsweb", shape=component, fillcolor="#fecaca"]; + "router:gramps" -> "traefik-service:grampsweb"; "dns:service-5." [label="service-5.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-5."; "dns:service-5." -> "router:gramps"; - "lb:grampsweb:gramps" [label="lb:gramps\nport:5000", shape=component, fillcolor="#fecaca"]; - "lb:grampsweb:gramps" -> "svc:grampsweb"; + "traefik-service:gramps" [label="service:gramps\nport:5000", shape=component, fillcolor="#fecaca"]; + "traefik-service:gramps" -> "svc:grampsweb"; "svc:grampsweb_celery" [label="grampsweb_celery", shape=box, fillcolor="#dcfce7"]; "svc:grampsweb_celery" -> "net:gramps" [color="#6b7280"]; "svc:influxdb" [label="influxdb", shape=box, fillcolor="#dcfce7"]; @@ -86,31 +92,34 @@ digraph DockerTraefikDynu { "svc:influxdb" -> "net:traefik" [color="#6b7280"]; "router:influxdb" [label="router:influxdb\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:influxdb"; - "router:influxdb" -> "svc:influxdb" [label="service:influxdb"]; + "traefik-service:influxdb" [label="service:influxdb", shape=component, fillcolor="#fecaca"]; + "router:influxdb" -> "traefik-service:influxdb"; "dns:service-6." [label="service-6.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-6."; "dns:service-6." -> "router:influxdb"; "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; "router:influxdb" -> "mw:authelia" [style=dashed]; - "lb:influxdb:influxdb" [label="lb:influxdb\nport:8086", shape=component, fillcolor="#fecaca"]; - "lb:influxdb:influxdb" -> "svc:influxdb"; + "traefik-service:influxdb" [label="service:influxdb\nport:8086", shape=component, fillcolor="#fecaca"]; + "traefik-service:influxdb" -> "svc:influxdb"; "svc:monitor-kuma" [label="monitor-kuma", shape=box, fillcolor="#dcfce7"]; "svc:monitor-kuma" -> "net:monitor" [color="#6b7280"]; "svc:monitor-kuma" -> "net:traefik" [color="#6b7280"]; "router:monitor" [label="router:monitor\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:monitor"; - "router:monitor" -> "svc:monitor-kuma" [label="service:monitor-kuma"]; + "traefik-service:monitor-kuma" [label="service:monitor-kuma", shape=component, fillcolor="#fecaca"]; + "router:monitor" -> "traefik-service:monitor-kuma"; "dns:service-7." [label="service-7.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-7."; "dns:service-7." -> "router:monitor"; - "lb:monitor-kuma:monitor" [label="lb:monitor\nport:3001", shape=component, fillcolor="#fecaca"]; - "lb:monitor-kuma:monitor" -> "svc:monitor-kuma"; + "traefik-service:monitor" [label="service:monitor\nport:3001", shape=component, fillcolor="#fecaca"]; + "traefik-service:monitor" -> "svc:monitor-kuma"; "svc:mtls-bridge" [label="mtls-bridge", shape=box, fillcolor="#dcfce7"]; "svc:mtls-bridge" -> "net:monitor" [color="#6b7280"]; "svc:mtls-bridge" -> "net:traefik" [color="#6b7280"]; "router:mtls-bridge" [label="router:mtls-bridge\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:mtls-bridge"; - "router:mtls-bridge" -> "svc:mtls-bridge" [label="service:mtls-bridge"]; + "traefik-service:mtls-bridge" [label="service:mtls-bridge", shape=component, fillcolor="#fecaca"]; + "router:mtls-bridge" -> "traefik-service:mtls-bridge"; "dns:service-8." [label="service-8.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-8."; "dns:service-8." -> "router:mtls-bridge"; @@ -120,14 +129,15 @@ digraph DockerTraefikDynu { "router:mtls-bridge" -> "mw:mtls-bridge-cors" [style=dashed]; "router:mtls-bridge-preflight" [label="router:mtls-bridge-preflight\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:mtls-bridge-preflight"; - "router:mtls-bridge-preflight" -> "svc:mtls-bridge" [label="service:mtls-bridge"]; + "traefik-service:mtls-bridge" [label="service:mtls-bridge", shape=component, fillcolor="#fecaca"]; + "router:mtls-bridge-preflight" -> "traefik-service:mtls-bridge"; "dns:service-8." [label="service-8.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-8."; "dns:service-8." -> "router:mtls-bridge-preflight"; "mw:mtls-bridge-cors" [label="mtls-bridge-cors", shape=hexagon, fillcolor="#ddd6fe"]; "router:mtls-bridge-preflight" -> "mw:mtls-bridge-cors" [style=dashed]; - "lb:mtls-bridge:mtls-bridge" [label="lb:mtls-bridge\nport:8080", shape=component, fillcolor="#fecaca"]; - "lb:mtls-bridge:mtls-bridge" -> "svc:mtls-bridge"; + "traefik-service:mtls-bridge" [label="service:mtls-bridge\nport:8080", shape=component, fillcolor="#fecaca"]; + "traefik-service:mtls-bridge" -> "svc:mtls-bridge"; "svc:nextcloud-db" [label="nextcloud-db", shape=box, fillcolor="#dcfce7"]; "svc:nextcloud-db" -> "net:nextcloud" [color="#6b7280"]; "svc:nextcloud-redis" [label="nextcloud-redis", shape=box, fillcolor="#dcfce7"]; @@ -137,7 +147,8 @@ digraph DockerTraefikDynu { "svc:nextcloud-webapp" -> "net:traefik" [color="#6b7280"]; "router:nextcloud" [label="router:nextcloud\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:nextcloud"; - "router:nextcloud" -> "svc:nextcloud-webapp" [label="service:nextcloud-webapp"]; + "traefik-service:nextcloud-webapp" [label="service:nextcloud-webapp", shape=component, fillcolor="#fecaca"]; + "router:nextcloud" -> "traefik-service:nextcloud-webapp"; "dns:service-9." [label="service-9.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-9."; "dns:service-9." -> "router:nextcloud"; @@ -152,14 +163,15 @@ digraph DockerTraefikDynu { "svc:node-red" -> "net:traefik" [color="#6b7280"]; "router:node-red" [label="router:node-red\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:node-red"; - "router:node-red" -> "svc:node-red" [label="service:node-red"]; + "traefik-service:node-red" [label="service:node-red", shape=component, fillcolor="#fecaca"]; + "router:node-red" -> "traefik-service:node-red"; "dns:service-10." [label="service-10.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-10."; "dns:service-10." -> "router:node-red"; "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; "router:node-red" -> "mw:authelia" [style=dashed]; - "lb:node-red:node-red" [label="lb:node-red\nport:1880", shape=component, fillcolor="#fecaca"]; - "lb:node-red:node-red" -> "svc:node-red"; + "traefik-service:node-red" [label="service:node-red\nport:1880", shape=component, fillcolor="#fecaca"]; + "traefik-service:node-red" -> "svc:node-red"; "svc:passbolt-db" [label="passbolt-db", shape=box, fillcolor="#dcfce7"]; "svc:passbolt-db" -> "net:passbolt" [color="#6b7280"]; "svc:passbolt-webapp" [label="passbolt-webapp", shape=box, fillcolor="#dcfce7"]; @@ -167,7 +179,8 @@ digraph DockerTraefikDynu { "svc:passbolt-webapp" -> "net:traefik" [color="#6b7280"]; "router:passbolt" [label="router:passbolt\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:passbolt"; - "router:passbolt" -> "svc:passbolt-webapp" [label="service:passbolt-webapp"]; + "traefik-service:passbolt-webapp" [label="service:passbolt-webapp", shape=component, fillcolor="#fecaca"]; + "router:passbolt" -> "traefik-service:passbolt-webapp"; "dns:service-11." [label="service-11.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-11."; "dns:service-11." -> "router:passbolt"; @@ -177,62 +190,68 @@ digraph DockerTraefikDynu { "svc:portainer" -> "net:traefik" [color="#6b7280"]; "router:portainer" [label="router:portainer\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:portainer"; - "router:portainer" -> "svc:portainer" [label="service:portainer"]; + "traefik-service:portainer" [label="service:portainer", shape=component, fillcolor="#fecaca"]; + "router:portainer" -> "traefik-service:portainer"; "dns:service-12." [label="service-12.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-12."; "dns:service-12." -> "router:portainer"; - "lb:portainer:portainer" [label="lb:portainer\nport:9000", shape=component, fillcolor="#fecaca"]; - "lb:portainer:portainer" -> "svc:portainer"; + "traefik-service:portainer" [label="service:portainer\nport:9000", shape=component, fillcolor="#fecaca"]; + "traefik-service:portainer" -> "svc:portainer"; "svc:prometheus" [label="prometheus", shape=box, fillcolor="#dcfce7"]; "svc:prometheus" -> "net:monitor" [color="#6b7280"]; "svc:prometheus" -> "net:traefik" [color="#6b7280"]; "router:prometheus" [label="router:prometheus\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:prometheus"; - "router:prometheus" -> "svc:prometheus" [label="service:prometheus"]; + "traefik-service:prometheus" [label="service:prometheus", shape=component, fillcolor="#fecaca"]; + "router:prometheus" -> "traefik-service:prometheus"; "dns:service-13." [label="service-13.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-13."; "dns:service-13." -> "router:prometheus"; "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; "router:prometheus" -> "mw:authelia" [style=dashed]; - "lb:prometheus:prometheus" [label="lb:prometheus\nport:9090", shape=component, fillcolor="#fecaca"]; - "lb:prometheus:prometheus" -> "svc:prometheus"; + "traefik-service:prometheus" [label="service:prometheus\nport:9090", shape=component, fillcolor="#fecaca"]; + "traefik-service:prometheus" -> "svc:prometheus"; "svc:searxng-webapp" [label="searxng-webapp", shape=box, fillcolor="#dcfce7"]; "svc:searxng-webapp" -> "net:traefik" [color="#6b7280"]; "router:searxng" [label="router:searxng\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:searxng"; - "router:searxng" -> "svc:searxng-webapp" [label="service:searxng-webapp"]; + "traefik-service:searxng-webapp" [label="service:searxng-webapp", shape=component, fillcolor="#fecaca"]; + "router:searxng" -> "traefik-service:searxng-webapp"; "dns:service-14." [label="service-14.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-14."; "dns:service-14." -> "router:searxng"; - "lb:searxng-webapp:searxng" [label="lb:searxng\nport:8080", shape=component, fillcolor="#fecaca"]; - "lb:searxng-webapp:searxng" -> "svc:searxng-webapp"; + "traefik-service:searxng" [label="service:searxng\nport:8080", shape=component, fillcolor="#fecaca"]; + "traefik-service:searxng" -> "svc:searxng-webapp"; "svc:shift-recorder-web" [label="shift-recorder-web", shape=box, fillcolor="#dcfce7"]; "svc:shift-recorder-web" -> "net:traefik" [color="#6b7280"]; "router:shifts" [label="router:shifts\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:shifts"; - "router:shifts" -> "svc:shift-recorder-web" [label="service:shift-recorder-web"]; + "traefik-service:shift-recorder-web" [label="service:shift-recorder-web", shape=component, fillcolor="#fecaca"]; + "router:shifts" -> "traefik-service:shift-recorder-web"; "dns:service-15." [label="service-15.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-15."; "dns:service-15." -> "router:shifts"; - "lb:shift-recorder-web:shifts" [label="lb:shifts\nport:80", shape=component, fillcolor="#fecaca"]; - "lb:shift-recorder-web:shifts" -> "svc:shift-recorder-web"; + "traefik-service:shifts" [label="service:shifts\nport:80", shape=component, fillcolor="#fecaca"]; + "traefik-service:shifts" -> "svc:shift-recorder-web"; "svc:stockfill" [label="stockfill", shape=box, fillcolor="#dcfce7"]; "svc:stockfill" -> "net:traefik" [color="#6b7280"]; "router:stockfill" [label="router:stockfill\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:stockfill"; - "router:stockfill" -> "svc:stockfill" [label="service:stockfill"]; + "traefik-service:stockfill" [label="service:stockfill", shape=component, fillcolor="#fecaca"]; + "router:stockfill" -> "traefik-service:stockfill"; "dns:service-16." [label="service-16.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-16."; "dns:service-16." -> "router:stockfill"; - "lb:stockfill:stockfill" [label="lb:stockfill\nport:80", shape=component, fillcolor="#fecaca"]; - "lb:stockfill:stockfill" -> "svc:stockfill"; + "traefik-service:stockfill" [label="service:stockfill\nport:80", shape=component, fillcolor="#fecaca"]; + "traefik-service:stockfill" -> "svc:stockfill"; "svc:telegraf" [label="telegraf", shape=box, fillcolor="#dcfce7"]; "svc:telegraf" -> "net:monitor" [color="#6b7280"]; "svc:traefik" [label="traefik", shape=box, fillcolor="#dcfce7"]; "svc:traefik" -> "net:traefik" [color="#6b7280"]; "router:traefik" [label="router:traefik\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"]; "svc:traefik" -> "router:traefik"; - "router:traefik" -> "svc:traefik" [label="service:api@internal"]; + "traefik-service:api@internal" [label="service:api@internal", shape=component, fillcolor="#fecaca"]; + "router:traefik" -> "traefik-service:api@internal"; "dns:service-17." [label="service-17.", shape=note, fillcolor="#fde68a"]; "ext:dynu" -> "dns:service-17."; "dns:service-17." -> "router:traefik"; diff --git a/docs/diagrams/docker-traefik-dynu.svg b/docs/diagrams/docker-traefik-dynu.svg index 9ba6e9e..3011e6a 100644 --- a/docs/diagrams/docker-traefik-dynu.svg +++ b/docs/diagrams/docker-traefik-dynu.svg @@ -4,1504 +4,1557 @@ - - + + DockerTraefikDynu - + ext:dynu - -Dynu / Public DNS + +Dynu / Public DNS - + dns:service-1.<internal-domain> - - - -service-1.<internal-domain> + + + +service-1.<internal-domain> ext:dynu->dns:service-1.<internal-domain> - - + + - + dns:service-2.<internal-domain> - - - -service-2.<internal-domain> + + + +service-2.<internal-domain> ext:dynu->dns:service-2.<internal-domain> - - + + - + dns:service-3.<internal-domain> - - - -service-3.<internal-domain> + + + +service-3.<internal-domain> ext:dynu->dns:service-3.<internal-domain> - - + + - + dns:service-4.<internal-domain> - - - -service-4.<internal-domain> + + + +service-4.<internal-domain> ext:dynu->dns:service-4.<internal-domain> - - + + - + dns:service-5.<internal-domain> - - - -service-5.<internal-domain> + + + +service-5.<internal-domain> ext:dynu->dns:service-5.<internal-domain> - - + + - + dns:service-6.<internal-domain> - - - -service-6.<internal-domain> + + + +service-6.<internal-domain> ext:dynu->dns:service-6.<internal-domain> - - + + - + dns:service-7.<internal-domain> - - - -service-7.<internal-domain> + + + +service-7.<internal-domain> ext:dynu->dns:service-7.<internal-domain> - - + + - + dns:service-8.<internal-domain> - - - -service-8.<internal-domain> + + + +service-8.<internal-domain> ext:dynu->dns:service-8.<internal-domain> - - + + ext:dynu->dns:service-8.<internal-domain> - - + + - + dns:service-9.<internal-domain> - - - -service-9.<internal-domain> + + + +service-9.<internal-domain> ext:dynu->dns:service-9.<internal-domain> - - + + - + dns:service-10.<internal-domain> - - - -service-10.<internal-domain> + + + +service-10.<internal-domain> ext:dynu->dns:service-10.<internal-domain> - - + + - + dns:service-11.<internal-domain> - - - -service-11.<internal-domain> + + + +service-11.<internal-domain> ext:dynu->dns:service-11.<internal-domain> - - + + - + dns:service-12.<internal-domain> - - - -service-12.<internal-domain> + + + +service-12.<internal-domain> ext:dynu->dns:service-12.<internal-domain> - - + + - + dns:service-13.<internal-domain> - - - -service-13.<internal-domain> + + + +service-13.<internal-domain> ext:dynu->dns:service-13.<internal-domain> - - + + - + dns:service-14.<internal-domain> - - - -service-14.<internal-domain> + + + +service-14.<internal-domain> ext:dynu->dns:service-14.<internal-domain> - - + + - + dns:service-15.<internal-domain> - - - -service-15.<internal-domain> + + + +service-15.<internal-domain> ext:dynu->dns:service-15.<internal-domain> - - + + - + dns:service-16.<internal-domain> - - - -service-16.<internal-domain> + + + +service-16.<internal-domain> ext:dynu->dns:service-16.<internal-domain> - - + + - + dns:service-17.<internal-domain> - - - -service-17.<internal-domain> + + + +service-17.<internal-domain> ext:dynu->dns:service-17.<internal-domain> - - + + svc:traefik - -traefik + +traefik net:traefik - -traefik + +traefik svc:traefik->net:traefik - - + + router:authelia - -router:authelia -entry:websecure tls:true + +router:authelia +entry:websecure tls:true svc:traefik->router:authelia - - + + - + router:error-pages-router - -router:error-pages-router -entry:web tls:false + +router:error-pages-router +entry:web tls:false svc:traefik->router:error-pages-router - - + + - + router:gitea - -router:gitea -entry:websecure tls:true + +router:gitea +entry:websecure tls:true svc:traefik->router:gitea - - + + - + router:gotify - -router:gotify -entry:websecure tls:false + +router:gotify +entry:websecure tls:false svc:traefik->router:gotify - - + + - + router:grafana - -router:grafana -entry:websecure tls:false + +router:grafana +entry:websecure tls:false svc:traefik->router:grafana - - + + - + router:gramps - -router:gramps -entry:websecure tls:false + +router:gramps +entry:websecure tls:false svc:traefik->router:gramps - - + + - + router:influxdb - -router:influxdb -entry:websecure tls:false + +router:influxdb +entry:websecure tls:false svc:traefik->router:influxdb - - + + - + router:monitor - -router:monitor -entry:websecure tls:true + +router:monitor +entry:websecure tls:true svc:traefik->router:monitor - - + + - + router:mtls-bridge - -router:mtls-bridge -entry:websecure tls:false + +router:mtls-bridge +entry:websecure tls:false svc:traefik->router:mtls-bridge - - + + - + router:mtls-bridge-preflight - -router:mtls-bridge-preflight -entry:websecure tls:false + +router:mtls-bridge-preflight +entry:websecure tls:false svc:traefik->router:mtls-bridge-preflight - - + + - + router:nextcloud - -router:nextcloud -entry:websecure tls:false + +router:nextcloud +entry:websecure tls:false svc:traefik->router:nextcloud - - + + - + router:node-red - -router:node-red -entry:websecure tls:false + +router:node-red +entry:websecure tls:false svc:traefik->router:node-red - - + + - + router:passbolt - -router:passbolt -entry:websecure tls:false + +router:passbolt +entry:websecure tls:false svc:traefik->router:passbolt - - + + - + router:portainer - -router:portainer -entry:websecure tls:true + +router:portainer +entry:websecure tls:true svc:traefik->router:portainer - - + + - + router:prometheus - -router:prometheus -entry:websecure tls:false + +router:prometheus +entry:websecure tls:false svc:traefik->router:prometheus - - + + - + router:searxng - -router:searxng -entry:websecure tls:false + +router:searxng +entry:websecure tls:false svc:traefik->router:searxng - - + + - + router:shifts - -router:shifts -entry:websecure tls:true + +router:shifts +entry:websecure tls:true svc:traefik->router:shifts - - + + - + router:stockfill - -router:stockfill -entry:websecure tls:true + +router:stockfill +entry:websecure tls:true svc:traefik->router:stockfill - - + + - + router:traefik - -router:traefik -entry:websecure tls:false + +router:traefik +entry:websecure tls:false svc:traefik->router:traefik - - + + net:gramps - -gramps + +gramps net:monitor - -monitor + +monitor net:nextcloud - -nextcloud + +nextcloud net:passbolt - -passbolt + +passbolt svc:authelia - -authelia + +authelia svc:authelia->net:traefik - - + + - + + +traefik-service:authelia + + + +service:authelia + + -router:authelia->svc:authelia - - -service:authelia +router:authelia->traefik-service:authelia + + dns:service-1.<internal-domain>->router:authelia - - + + - + svc:crowdsec - -crowdsec + +crowdsec svc:crowdsec->net:traefik - - + + - + svc:docker-socket-proxy - -docker-socket-proxy + +docker-socket-proxy svc:docker-socket-proxy->net:monitor - - + + svc:docker-socket-proxy->net:traefik - - + + - + svc:docker-update-exporter - -docker-update-exporter + +docker-update-exporter svc:docker-update-exporter->net:monitor - - + + - + svc:error-pages - -error-pages + +error-pages svc:error-pages->net:traefik - - + + - + + +traefik-service:error-pages + + + +service:error-pages + + -router:error-pages-router->svc:error-pages - - -service:error-pages +router:error-pages-router->traefik-service:error-pages + + - + mw:error-pages-middleware - -error-pages-middleware + +error-pages-middleware router:error-pages-router->mw:error-pages-middleware - - + + - - -lb:error-pages:error-pages-service - - - -lb:error-pages-service -port:8080 + + +traefik-service:error-pages-service + + + +service:error-pages-service +port:8080 - + -lb:error-pages:error-pages-service->svc:error-pages - - +traefik-service:error-pages-service->svc:error-pages + + - + svc:gitea - -gitea + +gitea svc:gitea->net:traefik - - + + - + + +traefik-service:gitea + + + +service:gitea +port:3000 + + -router:gitea->svc:gitea - - -service:gitea +router:gitea->traefik-service:gitea + + + + + +traefik-service:gitea->svc:gitea + + dns:service-2.<internal-domain>->router:gitea - - - - - -lb:gitea:gitea - - - -lb:gitea -port:3000 - - - -lb:gitea:gitea->svc:gitea - - + + - + svc:gitea-runner - -gitea-runner + +gitea-runner svc:gitea-runner->net:traefik - - + + - + svc:gotify - -gotify + +gotify svc:gotify->net:traefik - - + + - + + +traefik-service:gotify + + + +service:gotify +port:80 + + -router:gotify->svc:gotify - - -service:gotify +router:gotify->traefik-service:gotify + + + + + +traefik-service:gotify->svc:gotify + + dns:service-3.<internal-domain>->router:gotify - - - - - -lb:gotify:gotify - - - -lb:gotify -port:80 - - - -lb:gotify:gotify->svc:gotify - - + + - + svc:grafana - -grafana + +grafana svc:grafana->net:monitor - - + + svc:grafana->net:traefik - - + + - + + +traefik-service:grafana + + + +service:grafana +port:3000 + + -router:grafana->svc:grafana - - -service:grafana +router:grafana->traefik-service:grafana + + + + + +traefik-service:grafana->svc:grafana + + dns:service-4.<internal-domain>->router:grafana - - - - - -lb:grafana:grafana - - - -lb:grafana -port:3000 - - - -lb:grafana:grafana->svc:grafana - - + + - + svc:gramps-redis - -gramps-redis + +gramps-redis svc:gramps-redis->net:gramps - - + + - + svc:grampsweb - -grampsweb + +grampsweb svc:grampsweb->net:gramps - - + + svc:grampsweb->net:traefik - - + + - + + +traefik-service:grampsweb + + + +service:grampsweb + + -router:gramps->svc:grampsweb - - -service:grampsweb +router:gramps->traefik-service:grampsweb + + dns:service-5.<internal-domain>->router:gramps - - + + - - -lb:grampsweb:gramps - - - -lb:gramps -port:5000 + + +traefik-service:gramps + + + +service:gramps +port:5000 - + -lb:grampsweb:gramps->svc:grampsweb - - +traefik-service:gramps->svc:grampsweb + + - + svc:grampsweb_celery - -grampsweb_celery + +grampsweb_celery svc:grampsweb_celery->net:gramps - - + + - + svc:influxdb - -influxdb + +influxdb svc:influxdb->net:monitor - - + + svc:influxdb->net:traefik - - + + - + + +traefik-service:influxdb + + + +service:influxdb +port:8086 + + -router:influxdb->svc:influxdb - - -service:influxdb +router:influxdb->traefik-service:influxdb + + - + mw:authelia - -authelia + +authelia router:influxdb->mw:authelia - - + + + + + +traefik-service:influxdb->svc:influxdb + + dns:service-6.<internal-domain>->router:influxdb - - - - - -lb:influxdb:influxdb - - - -lb:influxdb -port:8086 - - - -lb:influxdb:influxdb->svc:influxdb - - + + - + svc:monitor-kuma - -monitor-kuma + +monitor-kuma svc:monitor-kuma->net:monitor - - + + svc:monitor-kuma->net:traefik - - + + - + + +traefik-service:monitor-kuma + + + +service:monitor-kuma + + -router:monitor->svc:monitor-kuma - - -service:monitor-kuma +router:monitor->traefik-service:monitor-kuma + + dns:service-7.<internal-domain>->router:monitor - - + + - - -lb:monitor-kuma:monitor - - - -lb:monitor -port:3001 + + +traefik-service:monitor + + + +service:monitor +port:3001 - + -lb:monitor-kuma:monitor->svc:monitor-kuma - - +traefik-service:monitor->svc:monitor-kuma + + - + svc:mtls-bridge - -mtls-bridge + +mtls-bridge svc:mtls-bridge->net:monitor - - + + svc:mtls-bridge->net:traefik - - + + - + + +traefik-service:mtls-bridge + + + +service:mtls-bridge +port:8080 + + -router:mtls-bridge->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge->traefik-service:mtls-bridge + + - + mw:mtls-bridge-auth - -mtls-bridge-auth + +mtls-bridge-auth router:mtls-bridge->mw:mtls-bridge-auth - - + + - + mw:mtls-bridge-cors - -mtls-bridge-cors + +mtls-bridge-cors router:mtls-bridge->mw:mtls-bridge-cors - - + + + + + +traefik-service:mtls-bridge->svc:mtls-bridge + + dns:service-8.<internal-domain>->router:mtls-bridge - - + + dns:service-8.<internal-domain>->router:mtls-bridge-preflight - - + + - + -router:mtls-bridge-preflight->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge-preflight->traefik-service:mtls-bridge + + router:mtls-bridge-preflight->mw:mtls-bridge-cors - - - - - -lb:mtls-bridge:mtls-bridge - - - -lb:mtls-bridge -port:8080 - - - -lb:mtls-bridge:mtls-bridge->svc:mtls-bridge - - + + - + svc:nextcloud-db - -nextcloud-db + +nextcloud-db svc:nextcloud-db->net:nextcloud - - + + - + svc:nextcloud-redis - -nextcloud-redis + +nextcloud-redis svc:nextcloud-redis->net:nextcloud - - + + - + svc:nextcloud-webapp - -nextcloud-webapp + +nextcloud-webapp svc:nextcloud-webapp->net:nextcloud - - + + svc:nextcloud-webapp->net:traefik - - + + - + + +traefik-service:nextcloud-webapp + + + +service:nextcloud-webapp + + -router:nextcloud->svc:nextcloud-webapp - - -service:nextcloud-webapp +router:nextcloud->traefik-service:nextcloud-webapp + + - + mw:nextcloud-dav - -nextcloud-dav + +nextcloud-dav router:nextcloud->mw:nextcloud-dav - - + + - + mw:nextcloud-webfinger - -nextcloud-webfinger + +nextcloud-webfinger router:nextcloud->mw:nextcloud-webfinger - - + + dns:service-9.<internal-domain>->router:nextcloud - - + + - + svc:node-exporter - -node-exporter + +node-exporter svc:node-exporter->net:monitor - - + + - + svc:node-red - -node-red + +node-red svc:node-red->net:monitor - - + + svc:node-red->net:traefik - - + + router:node-red->mw:authelia - - + + - + + +traefik-service:node-red + + + +service:node-red +port:1880 + + -router:node-red->svc:node-red - - -service:node-red +router:node-red->traefik-service:node-red + + + + + +traefik-service:node-red->svc:node-red + + dns:service-10.<internal-domain>->router:node-red - - - - - -lb:node-red:node-red - - - -lb:node-red -port:1880 - - - -lb:node-red:node-red->svc:node-red - - + + - + svc:passbolt-db - -passbolt-db + +passbolt-db svc:passbolt-db->net:passbolt - - + + - + svc:passbolt-webapp - -passbolt-webapp + +passbolt-webapp svc:passbolt-webapp->net:passbolt - - + + svc:passbolt-webapp->net:traefik - - + + - + + +traefik-service:passbolt-webapp + + + +service:passbolt-webapp + + -router:passbolt->svc:passbolt-webapp - - -service:passbolt-webapp +router:passbolt->traefik-service:passbolt-webapp + + dns:service-11.<internal-domain>->router:passbolt - - + + - + svc:pihole-exporter - -pihole-exporter + +pihole-exporter svc:pihole-exporter->net:monitor - - + + - + svc:portainer - -portainer + +portainer svc:portainer->net:traefik - - + + - + + +traefik-service:portainer + + + +service:portainer +port:9000 + + -router:portainer->svc:portainer - - -service:portainer +router:portainer->traefik-service:portainer + + + + + +traefik-service:portainer->svc:portainer + + dns:service-12.<internal-domain>->router:portainer - - - - - -lb:portainer:portainer - - - -lb:portainer -port:9000 - - - -lb:portainer:portainer->svc:portainer - - + + - + svc:prometheus - -prometheus + +prometheus svc:prometheus->net:monitor - - + + svc:prometheus->net:traefik - - + + router:prometheus->mw:authelia - - + + - + + +traefik-service:prometheus + + + +service:prometheus +port:9090 + + -router:prometheus->svc:prometheus - - -service:prometheus +router:prometheus->traefik-service:prometheus + + + + + +traefik-service:prometheus->svc:prometheus + + dns:service-13.<internal-domain>->router:prometheus - - - - - -lb:prometheus:prometheus - - - -lb:prometheus -port:9090 - - - -lb:prometheus:prometheus->svc:prometheus - - + + - + svc:searxng-webapp - -searxng-webapp + +searxng-webapp svc:searxng-webapp->net:traefik - - + + - + + +traefik-service:searxng-webapp + + + +service:searxng-webapp + + -router:searxng->svc:searxng-webapp - - -service:searxng-webapp +router:searxng->traefik-service:searxng-webapp + + dns:service-14.<internal-domain>->router:searxng - - + + - - -lb:searxng-webapp:searxng - - - -lb:searxng -port:8080 + + +traefik-service:searxng + + + +service:searxng +port:8080 - + -lb:searxng-webapp:searxng->svc:searxng-webapp - - +traefik-service:searxng->svc:searxng-webapp + + - + svc:shift-recorder-web - -shift-recorder-web + +shift-recorder-web svc:shift-recorder-web->net:traefik - - + + - + + +traefik-service:shift-recorder-web + + + +service:shift-recorder-web + + -router:shifts->svc:shift-recorder-web - - -service:shift-recorder-web +router:shifts->traefik-service:shift-recorder-web + + dns:service-15.<internal-domain>->router:shifts - - + + - - -lb:shift-recorder-web:shifts - - - -lb:shifts -port:80 + + +traefik-service:shifts + + + +service:shifts +port:80 - + -lb:shift-recorder-web:shifts->svc:shift-recorder-web - - +traefik-service:shifts->svc:shift-recorder-web + + - + svc:stockfill - -stockfill + +stockfill svc:stockfill->net:traefik - - + + - + + +traefik-service:stockfill + + + +service:stockfill +port:80 + + -router:stockfill->svc:stockfill - - -service:stockfill +router:stockfill->traefik-service:stockfill + + + + + +traefik-service:stockfill->svc:stockfill + + dns:service-16.<internal-domain>->router:stockfill - - - - - -lb:stockfill:stockfill - - - -lb:stockfill -port:80 - - - -lb:stockfill:stockfill->svc:stockfill - - + + - + svc:telegraf - -telegraf + +telegraf svc:telegraf->net:monitor - - - - - -router:traefik->svc:traefik - - -service:api@internal + + router:traefik->mw:authelia - - + + + + + +traefik-service:api@internal + + + +service:api@internal + + + +router:traefik->traefik-service:api@internal + + dns:service-17.<internal-domain>->router:traefik - - + + diff --git a/docs/public/docker-compose.svg b/docs/public/docker-compose.svg index 9ba6e9e..3011e6a 100644 --- a/docs/public/docker-compose.svg +++ b/docs/public/docker-compose.svg @@ -4,1504 +4,1557 @@ - - + + DockerTraefikDynu - + ext:dynu - -Dynu / Public DNS + +Dynu / Public DNS - + dns:service-1.<internal-domain> - - - -service-1.<internal-domain> + + + +service-1.<internal-domain> ext:dynu->dns:service-1.<internal-domain> - - + + - + dns:service-2.<internal-domain> - - - -service-2.<internal-domain> + + + +service-2.<internal-domain> ext:dynu->dns:service-2.<internal-domain> - - + + - + dns:service-3.<internal-domain> - - - -service-3.<internal-domain> + + + +service-3.<internal-domain> ext:dynu->dns:service-3.<internal-domain> - - + + - + dns:service-4.<internal-domain> - - - -service-4.<internal-domain> + + + +service-4.<internal-domain> ext:dynu->dns:service-4.<internal-domain> - - + + - + dns:service-5.<internal-domain> - - - -service-5.<internal-domain> + + + +service-5.<internal-domain> ext:dynu->dns:service-5.<internal-domain> - - + + - + dns:service-6.<internal-domain> - - - -service-6.<internal-domain> + + + +service-6.<internal-domain> ext:dynu->dns:service-6.<internal-domain> - - + + - + dns:service-7.<internal-domain> - - - -service-7.<internal-domain> + + + +service-7.<internal-domain> ext:dynu->dns:service-7.<internal-domain> - - + + - + dns:service-8.<internal-domain> - - - -service-8.<internal-domain> + + + +service-8.<internal-domain> ext:dynu->dns:service-8.<internal-domain> - - + + ext:dynu->dns:service-8.<internal-domain> - - + + - + dns:service-9.<internal-domain> - - - -service-9.<internal-domain> + + + +service-9.<internal-domain> ext:dynu->dns:service-9.<internal-domain> - - + + - + dns:service-10.<internal-domain> - - - -service-10.<internal-domain> + + + +service-10.<internal-domain> ext:dynu->dns:service-10.<internal-domain> - - + + - + dns:service-11.<internal-domain> - - - -service-11.<internal-domain> + + + +service-11.<internal-domain> ext:dynu->dns:service-11.<internal-domain> - - + + - + dns:service-12.<internal-domain> - - - -service-12.<internal-domain> + + + +service-12.<internal-domain> ext:dynu->dns:service-12.<internal-domain> - - + + - + dns:service-13.<internal-domain> - - - -service-13.<internal-domain> + + + +service-13.<internal-domain> ext:dynu->dns:service-13.<internal-domain> - - + + - + dns:service-14.<internal-domain> - - - -service-14.<internal-domain> + + + +service-14.<internal-domain> ext:dynu->dns:service-14.<internal-domain> - - + + - + dns:service-15.<internal-domain> - - - -service-15.<internal-domain> + + + +service-15.<internal-domain> ext:dynu->dns:service-15.<internal-domain> - - + + - + dns:service-16.<internal-domain> - - - -service-16.<internal-domain> + + + +service-16.<internal-domain> ext:dynu->dns:service-16.<internal-domain> - - + + - + dns:service-17.<internal-domain> - - - -service-17.<internal-domain> + + + +service-17.<internal-domain> ext:dynu->dns:service-17.<internal-domain> - - + + svc:traefik - -traefik + +traefik net:traefik - -traefik + +traefik svc:traefik->net:traefik - - + + router:authelia - -router:authelia -entry:websecure tls:true + +router:authelia +entry:websecure tls:true svc:traefik->router:authelia - - + + - + router:error-pages-router - -router:error-pages-router -entry:web tls:false + +router:error-pages-router +entry:web tls:false svc:traefik->router:error-pages-router - - + + - + router:gitea - -router:gitea -entry:websecure tls:true + +router:gitea +entry:websecure tls:true svc:traefik->router:gitea - - + + - + router:gotify - -router:gotify -entry:websecure tls:false + +router:gotify +entry:websecure tls:false svc:traefik->router:gotify - - + + - + router:grafana - -router:grafana -entry:websecure tls:false + +router:grafana +entry:websecure tls:false svc:traefik->router:grafana - - + + - + router:gramps - -router:gramps -entry:websecure tls:false + +router:gramps +entry:websecure tls:false svc:traefik->router:gramps - - + + - + router:influxdb - -router:influxdb -entry:websecure tls:false + +router:influxdb +entry:websecure tls:false svc:traefik->router:influxdb - - + + - + router:monitor - -router:monitor -entry:websecure tls:true + +router:monitor +entry:websecure tls:true svc:traefik->router:monitor - - + + - + router:mtls-bridge - -router:mtls-bridge -entry:websecure tls:false + +router:mtls-bridge +entry:websecure tls:false svc:traefik->router:mtls-bridge - - + + - + router:mtls-bridge-preflight - -router:mtls-bridge-preflight -entry:websecure tls:false + +router:mtls-bridge-preflight +entry:websecure tls:false svc:traefik->router:mtls-bridge-preflight - - + + - + router:nextcloud - -router:nextcloud -entry:websecure tls:false + +router:nextcloud +entry:websecure tls:false svc:traefik->router:nextcloud - - + + - + router:node-red - -router:node-red -entry:websecure tls:false + +router:node-red +entry:websecure tls:false svc:traefik->router:node-red - - + + - + router:passbolt - -router:passbolt -entry:websecure tls:false + +router:passbolt +entry:websecure tls:false svc:traefik->router:passbolt - - + + - + router:portainer - -router:portainer -entry:websecure tls:true + +router:portainer +entry:websecure tls:true svc:traefik->router:portainer - - + + - + router:prometheus - -router:prometheus -entry:websecure tls:false + +router:prometheus +entry:websecure tls:false svc:traefik->router:prometheus - - + + - + router:searxng - -router:searxng -entry:websecure tls:false + +router:searxng +entry:websecure tls:false svc:traefik->router:searxng - - + + - + router:shifts - -router:shifts -entry:websecure tls:true + +router:shifts +entry:websecure tls:true svc:traefik->router:shifts - - + + - + router:stockfill - -router:stockfill -entry:websecure tls:true + +router:stockfill +entry:websecure tls:true svc:traefik->router:stockfill - - + + - + router:traefik - -router:traefik -entry:websecure tls:false + +router:traefik +entry:websecure tls:false svc:traefik->router:traefik - - + + net:gramps - -gramps + +gramps net:monitor - -monitor + +monitor net:nextcloud - -nextcloud + +nextcloud net:passbolt - -passbolt + +passbolt svc:authelia - -authelia + +authelia svc:authelia->net:traefik - - + + - + + +traefik-service:authelia + + + +service:authelia + + -router:authelia->svc:authelia - - -service:authelia +router:authelia->traefik-service:authelia + + dns:service-1.<internal-domain>->router:authelia - - + + - + svc:crowdsec - -crowdsec + +crowdsec svc:crowdsec->net:traefik - - + + - + svc:docker-socket-proxy - -docker-socket-proxy + +docker-socket-proxy svc:docker-socket-proxy->net:monitor - - + + svc:docker-socket-proxy->net:traefik - - + + - + svc:docker-update-exporter - -docker-update-exporter + +docker-update-exporter svc:docker-update-exporter->net:monitor - - + + - + svc:error-pages - -error-pages + +error-pages svc:error-pages->net:traefik - - + + - + + +traefik-service:error-pages + + + +service:error-pages + + -router:error-pages-router->svc:error-pages - - -service:error-pages +router:error-pages-router->traefik-service:error-pages + + - + mw:error-pages-middleware - -error-pages-middleware + +error-pages-middleware router:error-pages-router->mw:error-pages-middleware - - + + - - -lb:error-pages:error-pages-service - - - -lb:error-pages-service -port:8080 + + +traefik-service:error-pages-service + + + +service:error-pages-service +port:8080 - + -lb:error-pages:error-pages-service->svc:error-pages - - +traefik-service:error-pages-service->svc:error-pages + + - + svc:gitea - -gitea + +gitea svc:gitea->net:traefik - - + + - + + +traefik-service:gitea + + + +service:gitea +port:3000 + + -router:gitea->svc:gitea - - -service:gitea +router:gitea->traefik-service:gitea + + + + + +traefik-service:gitea->svc:gitea + + dns:service-2.<internal-domain>->router:gitea - - - - - -lb:gitea:gitea - - - -lb:gitea -port:3000 - - - -lb:gitea:gitea->svc:gitea - - + + - + svc:gitea-runner - -gitea-runner + +gitea-runner svc:gitea-runner->net:traefik - - + + - + svc:gotify - -gotify + +gotify svc:gotify->net:traefik - - + + - + + +traefik-service:gotify + + + +service:gotify +port:80 + + -router:gotify->svc:gotify - - -service:gotify +router:gotify->traefik-service:gotify + + + + + +traefik-service:gotify->svc:gotify + + dns:service-3.<internal-domain>->router:gotify - - - - - -lb:gotify:gotify - - - -lb:gotify -port:80 - - - -lb:gotify:gotify->svc:gotify - - + + - + svc:grafana - -grafana + +grafana svc:grafana->net:monitor - - + + svc:grafana->net:traefik - - + + - + + +traefik-service:grafana + + + +service:grafana +port:3000 + + -router:grafana->svc:grafana - - -service:grafana +router:grafana->traefik-service:grafana + + + + + +traefik-service:grafana->svc:grafana + + dns:service-4.<internal-domain>->router:grafana - - - - - -lb:grafana:grafana - - - -lb:grafana -port:3000 - - - -lb:grafana:grafana->svc:grafana - - + + - + svc:gramps-redis - -gramps-redis + +gramps-redis svc:gramps-redis->net:gramps - - + + - + svc:grampsweb - -grampsweb + +grampsweb svc:grampsweb->net:gramps - - + + svc:grampsweb->net:traefik - - + + - + + +traefik-service:grampsweb + + + +service:grampsweb + + -router:gramps->svc:grampsweb - - -service:grampsweb +router:gramps->traefik-service:grampsweb + + dns:service-5.<internal-domain>->router:gramps - - + + - - -lb:grampsweb:gramps - - - -lb:gramps -port:5000 + + +traefik-service:gramps + + + +service:gramps +port:5000 - + -lb:grampsweb:gramps->svc:grampsweb - - +traefik-service:gramps->svc:grampsweb + + - + svc:grampsweb_celery - -grampsweb_celery + +grampsweb_celery svc:grampsweb_celery->net:gramps - - + + - + svc:influxdb - -influxdb + +influxdb svc:influxdb->net:monitor - - + + svc:influxdb->net:traefik - - + + - + + +traefik-service:influxdb + + + +service:influxdb +port:8086 + + -router:influxdb->svc:influxdb - - -service:influxdb +router:influxdb->traefik-service:influxdb + + - + mw:authelia - -authelia + +authelia router:influxdb->mw:authelia - - + + + + + +traefik-service:influxdb->svc:influxdb + + dns:service-6.<internal-domain>->router:influxdb - - - - - -lb:influxdb:influxdb - - - -lb:influxdb -port:8086 - - - -lb:influxdb:influxdb->svc:influxdb - - + + - + svc:monitor-kuma - -monitor-kuma + +monitor-kuma svc:monitor-kuma->net:monitor - - + + svc:monitor-kuma->net:traefik - - + + - + + +traefik-service:monitor-kuma + + + +service:monitor-kuma + + -router:monitor->svc:monitor-kuma - - -service:monitor-kuma +router:monitor->traefik-service:monitor-kuma + + dns:service-7.<internal-domain>->router:monitor - - + + - - -lb:monitor-kuma:monitor - - - -lb:monitor -port:3001 + + +traefik-service:monitor + + + +service:monitor +port:3001 - + -lb:monitor-kuma:monitor->svc:monitor-kuma - - +traefik-service:monitor->svc:monitor-kuma + + - + svc:mtls-bridge - -mtls-bridge + +mtls-bridge svc:mtls-bridge->net:monitor - - + + svc:mtls-bridge->net:traefik - - + + - + + +traefik-service:mtls-bridge + + + +service:mtls-bridge +port:8080 + + -router:mtls-bridge->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge->traefik-service:mtls-bridge + + - + mw:mtls-bridge-auth - -mtls-bridge-auth + +mtls-bridge-auth router:mtls-bridge->mw:mtls-bridge-auth - - + + - + mw:mtls-bridge-cors - -mtls-bridge-cors + +mtls-bridge-cors router:mtls-bridge->mw:mtls-bridge-cors - - + + + + + +traefik-service:mtls-bridge->svc:mtls-bridge + + dns:service-8.<internal-domain>->router:mtls-bridge - - + + dns:service-8.<internal-domain>->router:mtls-bridge-preflight - - + + - + -router:mtls-bridge-preflight->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge-preflight->traefik-service:mtls-bridge + + router:mtls-bridge-preflight->mw:mtls-bridge-cors - - - - - -lb:mtls-bridge:mtls-bridge - - - -lb:mtls-bridge -port:8080 - - - -lb:mtls-bridge:mtls-bridge->svc:mtls-bridge - - + + - + svc:nextcloud-db - -nextcloud-db + +nextcloud-db svc:nextcloud-db->net:nextcloud - - + + - + svc:nextcloud-redis - -nextcloud-redis + +nextcloud-redis svc:nextcloud-redis->net:nextcloud - - + + - + svc:nextcloud-webapp - -nextcloud-webapp + +nextcloud-webapp svc:nextcloud-webapp->net:nextcloud - - + + svc:nextcloud-webapp->net:traefik - - + + - + + +traefik-service:nextcloud-webapp + + + +service:nextcloud-webapp + + -router:nextcloud->svc:nextcloud-webapp - - -service:nextcloud-webapp +router:nextcloud->traefik-service:nextcloud-webapp + + - + mw:nextcloud-dav - -nextcloud-dav + +nextcloud-dav router:nextcloud->mw:nextcloud-dav - - + + - + mw:nextcloud-webfinger - -nextcloud-webfinger + +nextcloud-webfinger router:nextcloud->mw:nextcloud-webfinger - - + + dns:service-9.<internal-domain>->router:nextcloud - - + + - + svc:node-exporter - -node-exporter + +node-exporter svc:node-exporter->net:monitor - - + + - + svc:node-red - -node-red + +node-red svc:node-red->net:monitor - - + + svc:node-red->net:traefik - - + + router:node-red->mw:authelia - - + + - + + +traefik-service:node-red + + + +service:node-red +port:1880 + + -router:node-red->svc:node-red - - -service:node-red +router:node-red->traefik-service:node-red + + + + + +traefik-service:node-red->svc:node-red + + dns:service-10.<internal-domain>->router:node-red - - - - - -lb:node-red:node-red - - - -lb:node-red -port:1880 - - - -lb:node-red:node-red->svc:node-red - - + + - + svc:passbolt-db - -passbolt-db + +passbolt-db svc:passbolt-db->net:passbolt - - + + - + svc:passbolt-webapp - -passbolt-webapp + +passbolt-webapp svc:passbolt-webapp->net:passbolt - - + + svc:passbolt-webapp->net:traefik - - + + - + + +traefik-service:passbolt-webapp + + + +service:passbolt-webapp + + -router:passbolt->svc:passbolt-webapp - - -service:passbolt-webapp +router:passbolt->traefik-service:passbolt-webapp + + dns:service-11.<internal-domain>->router:passbolt - - + + - + svc:pihole-exporter - -pihole-exporter + +pihole-exporter svc:pihole-exporter->net:monitor - - + + - + svc:portainer - -portainer + +portainer svc:portainer->net:traefik - - + + - + + +traefik-service:portainer + + + +service:portainer +port:9000 + + -router:portainer->svc:portainer - - -service:portainer +router:portainer->traefik-service:portainer + + + + + +traefik-service:portainer->svc:portainer + + dns:service-12.<internal-domain>->router:portainer - - - - - -lb:portainer:portainer - - - -lb:portainer -port:9000 - - - -lb:portainer:portainer->svc:portainer - - + + - + svc:prometheus - -prometheus + +prometheus svc:prometheus->net:monitor - - + + svc:prometheus->net:traefik - - + + router:prometheus->mw:authelia - - + + - + + +traefik-service:prometheus + + + +service:prometheus +port:9090 + + -router:prometheus->svc:prometheus - - -service:prometheus +router:prometheus->traefik-service:prometheus + + + + + +traefik-service:prometheus->svc:prometheus + + dns:service-13.<internal-domain>->router:prometheus - - - - - -lb:prometheus:prometheus - - - -lb:prometheus -port:9090 - - - -lb:prometheus:prometheus->svc:prometheus - - + + - + svc:searxng-webapp - -searxng-webapp + +searxng-webapp svc:searxng-webapp->net:traefik - - + + - + + +traefik-service:searxng-webapp + + + +service:searxng-webapp + + -router:searxng->svc:searxng-webapp - - -service:searxng-webapp +router:searxng->traefik-service:searxng-webapp + + dns:service-14.<internal-domain>->router:searxng - - + + - - -lb:searxng-webapp:searxng - - - -lb:searxng -port:8080 + + +traefik-service:searxng + + + +service:searxng +port:8080 - + -lb:searxng-webapp:searxng->svc:searxng-webapp - - +traefik-service:searxng->svc:searxng-webapp + + - + svc:shift-recorder-web - -shift-recorder-web + +shift-recorder-web svc:shift-recorder-web->net:traefik - - + + - + + +traefik-service:shift-recorder-web + + + +service:shift-recorder-web + + -router:shifts->svc:shift-recorder-web - - -service:shift-recorder-web +router:shifts->traefik-service:shift-recorder-web + + dns:service-15.<internal-domain>->router:shifts - - + + - - -lb:shift-recorder-web:shifts - - - -lb:shifts -port:80 + + +traefik-service:shifts + + + +service:shifts +port:80 - + -lb:shift-recorder-web:shifts->svc:shift-recorder-web - - +traefik-service:shifts->svc:shift-recorder-web + + - + svc:stockfill - -stockfill + +stockfill svc:stockfill->net:traefik - - + + - + + +traefik-service:stockfill + + + +service:stockfill +port:80 + + -router:stockfill->svc:stockfill - - -service:stockfill +router:stockfill->traefik-service:stockfill + + + + + +traefik-service:stockfill->svc:stockfill + + dns:service-16.<internal-domain>->router:stockfill - - - - - -lb:stockfill:stockfill - - - -lb:stockfill -port:80 - - - -lb:stockfill:stockfill->svc:stockfill - - + + - + svc:telegraf - -telegraf + +telegraf svc:telegraf->net:monitor - - - - - -router:traefik->svc:traefik - - -service:api@internal + + router:traefik->mw:authelia - - + + + + + +traefik-service:api@internal + + + +service:api@internal + + + +router:traefik->traefik-service:api@internal + + dns:service-17.<internal-domain>->router:traefik - - + + diff --git a/docs/public/docker-traefik-dynu.svg b/docs/public/docker-traefik-dynu.svg index 9ba6e9e..3011e6a 100644 --- a/docs/public/docker-traefik-dynu.svg +++ b/docs/public/docker-traefik-dynu.svg @@ -4,1504 +4,1557 @@ - - + + DockerTraefikDynu - + ext:dynu - -Dynu / Public DNS + +Dynu / Public DNS - + dns:service-1.<internal-domain> - - - -service-1.<internal-domain> + + + +service-1.<internal-domain> ext:dynu->dns:service-1.<internal-domain> - - + + - + dns:service-2.<internal-domain> - - - -service-2.<internal-domain> + + + +service-2.<internal-domain> ext:dynu->dns:service-2.<internal-domain> - - + + - + dns:service-3.<internal-domain> - - - -service-3.<internal-domain> + + + +service-3.<internal-domain> ext:dynu->dns:service-3.<internal-domain> - - + + - + dns:service-4.<internal-domain> - - - -service-4.<internal-domain> + + + +service-4.<internal-domain> ext:dynu->dns:service-4.<internal-domain> - - + + - + dns:service-5.<internal-domain> - - - -service-5.<internal-domain> + + + +service-5.<internal-domain> ext:dynu->dns:service-5.<internal-domain> - - + + - + dns:service-6.<internal-domain> - - - -service-6.<internal-domain> + + + +service-6.<internal-domain> ext:dynu->dns:service-6.<internal-domain> - - + + - + dns:service-7.<internal-domain> - - - -service-7.<internal-domain> + + + +service-7.<internal-domain> ext:dynu->dns:service-7.<internal-domain> - - + + - + dns:service-8.<internal-domain> - - - -service-8.<internal-domain> + + + +service-8.<internal-domain> ext:dynu->dns:service-8.<internal-domain> - - + + ext:dynu->dns:service-8.<internal-domain> - - + + - + dns:service-9.<internal-domain> - - - -service-9.<internal-domain> + + + +service-9.<internal-domain> ext:dynu->dns:service-9.<internal-domain> - - + + - + dns:service-10.<internal-domain> - - - -service-10.<internal-domain> + + + +service-10.<internal-domain> ext:dynu->dns:service-10.<internal-domain> - - + + - + dns:service-11.<internal-domain> - - - -service-11.<internal-domain> + + + +service-11.<internal-domain> ext:dynu->dns:service-11.<internal-domain> - - + + - + dns:service-12.<internal-domain> - - - -service-12.<internal-domain> + + + +service-12.<internal-domain> ext:dynu->dns:service-12.<internal-domain> - - + + - + dns:service-13.<internal-domain> - - - -service-13.<internal-domain> + + + +service-13.<internal-domain> ext:dynu->dns:service-13.<internal-domain> - - + + - + dns:service-14.<internal-domain> - - - -service-14.<internal-domain> + + + +service-14.<internal-domain> ext:dynu->dns:service-14.<internal-domain> - - + + - + dns:service-15.<internal-domain> - - - -service-15.<internal-domain> + + + +service-15.<internal-domain> ext:dynu->dns:service-15.<internal-domain> - - + + - + dns:service-16.<internal-domain> - - - -service-16.<internal-domain> + + + +service-16.<internal-domain> ext:dynu->dns:service-16.<internal-domain> - - + + - + dns:service-17.<internal-domain> - - - -service-17.<internal-domain> + + + +service-17.<internal-domain> ext:dynu->dns:service-17.<internal-domain> - - + + svc:traefik - -traefik + +traefik net:traefik - -traefik + +traefik svc:traefik->net:traefik - - + + router:authelia - -router:authelia -entry:websecure tls:true + +router:authelia +entry:websecure tls:true svc:traefik->router:authelia - - + + - + router:error-pages-router - -router:error-pages-router -entry:web tls:false + +router:error-pages-router +entry:web tls:false svc:traefik->router:error-pages-router - - + + - + router:gitea - -router:gitea -entry:websecure tls:true + +router:gitea +entry:websecure tls:true svc:traefik->router:gitea - - + + - + router:gotify - -router:gotify -entry:websecure tls:false + +router:gotify +entry:websecure tls:false svc:traefik->router:gotify - - + + - + router:grafana - -router:grafana -entry:websecure tls:false + +router:grafana +entry:websecure tls:false svc:traefik->router:grafana - - + + - + router:gramps - -router:gramps -entry:websecure tls:false + +router:gramps +entry:websecure tls:false svc:traefik->router:gramps - - + + - + router:influxdb - -router:influxdb -entry:websecure tls:false + +router:influxdb +entry:websecure tls:false svc:traefik->router:influxdb - - + + - + router:monitor - -router:monitor -entry:websecure tls:true + +router:monitor +entry:websecure tls:true svc:traefik->router:monitor - - + + - + router:mtls-bridge - -router:mtls-bridge -entry:websecure tls:false + +router:mtls-bridge +entry:websecure tls:false svc:traefik->router:mtls-bridge - - + + - + router:mtls-bridge-preflight - -router:mtls-bridge-preflight -entry:websecure tls:false + +router:mtls-bridge-preflight +entry:websecure tls:false svc:traefik->router:mtls-bridge-preflight - - + + - + router:nextcloud - -router:nextcloud -entry:websecure tls:false + +router:nextcloud +entry:websecure tls:false svc:traefik->router:nextcloud - - + + - + router:node-red - -router:node-red -entry:websecure tls:false + +router:node-red +entry:websecure tls:false svc:traefik->router:node-red - - + + - + router:passbolt - -router:passbolt -entry:websecure tls:false + +router:passbolt +entry:websecure tls:false svc:traefik->router:passbolt - - + + - + router:portainer - -router:portainer -entry:websecure tls:true + +router:portainer +entry:websecure tls:true svc:traefik->router:portainer - - + + - + router:prometheus - -router:prometheus -entry:websecure tls:false + +router:prometheus +entry:websecure tls:false svc:traefik->router:prometheus - - + + - + router:searxng - -router:searxng -entry:websecure tls:false + +router:searxng +entry:websecure tls:false svc:traefik->router:searxng - - + + - + router:shifts - -router:shifts -entry:websecure tls:true + +router:shifts +entry:websecure tls:true svc:traefik->router:shifts - - + + - + router:stockfill - -router:stockfill -entry:websecure tls:true + +router:stockfill +entry:websecure tls:true svc:traefik->router:stockfill - - + + - + router:traefik - -router:traefik -entry:websecure tls:false + +router:traefik +entry:websecure tls:false svc:traefik->router:traefik - - + + net:gramps - -gramps + +gramps net:monitor - -monitor + +monitor net:nextcloud - -nextcloud + +nextcloud net:passbolt - -passbolt + +passbolt svc:authelia - -authelia + +authelia svc:authelia->net:traefik - - + + - + + +traefik-service:authelia + + + +service:authelia + + -router:authelia->svc:authelia - - -service:authelia +router:authelia->traefik-service:authelia + + dns:service-1.<internal-domain>->router:authelia - - + + - + svc:crowdsec - -crowdsec + +crowdsec svc:crowdsec->net:traefik - - + + - + svc:docker-socket-proxy - -docker-socket-proxy + +docker-socket-proxy svc:docker-socket-proxy->net:monitor - - + + svc:docker-socket-proxy->net:traefik - - + + - + svc:docker-update-exporter - -docker-update-exporter + +docker-update-exporter svc:docker-update-exporter->net:monitor - - + + - + svc:error-pages - -error-pages + +error-pages svc:error-pages->net:traefik - - + + - + + +traefik-service:error-pages + + + +service:error-pages + + -router:error-pages-router->svc:error-pages - - -service:error-pages +router:error-pages-router->traefik-service:error-pages + + - + mw:error-pages-middleware - -error-pages-middleware + +error-pages-middleware router:error-pages-router->mw:error-pages-middleware - - + + - - -lb:error-pages:error-pages-service - - - -lb:error-pages-service -port:8080 + + +traefik-service:error-pages-service + + + +service:error-pages-service +port:8080 - + -lb:error-pages:error-pages-service->svc:error-pages - - +traefik-service:error-pages-service->svc:error-pages + + - + svc:gitea - -gitea + +gitea svc:gitea->net:traefik - - + + - + + +traefik-service:gitea + + + +service:gitea +port:3000 + + -router:gitea->svc:gitea - - -service:gitea +router:gitea->traefik-service:gitea + + + + + +traefik-service:gitea->svc:gitea + + dns:service-2.<internal-domain>->router:gitea - - - - - -lb:gitea:gitea - - - -lb:gitea -port:3000 - - - -lb:gitea:gitea->svc:gitea - - + + - + svc:gitea-runner - -gitea-runner + +gitea-runner svc:gitea-runner->net:traefik - - + + - + svc:gotify - -gotify + +gotify svc:gotify->net:traefik - - + + - + + +traefik-service:gotify + + + +service:gotify +port:80 + + -router:gotify->svc:gotify - - -service:gotify +router:gotify->traefik-service:gotify + + + + + +traefik-service:gotify->svc:gotify + + dns:service-3.<internal-domain>->router:gotify - - - - - -lb:gotify:gotify - - - -lb:gotify -port:80 - - - -lb:gotify:gotify->svc:gotify - - + + - + svc:grafana - -grafana + +grafana svc:grafana->net:monitor - - + + svc:grafana->net:traefik - - + + - + + +traefik-service:grafana + + + +service:grafana +port:3000 + + -router:grafana->svc:grafana - - -service:grafana +router:grafana->traefik-service:grafana + + + + + +traefik-service:grafana->svc:grafana + + dns:service-4.<internal-domain>->router:grafana - - - - - -lb:grafana:grafana - - - -lb:grafana -port:3000 - - - -lb:grafana:grafana->svc:grafana - - + + - + svc:gramps-redis - -gramps-redis + +gramps-redis svc:gramps-redis->net:gramps - - + + - + svc:grampsweb - -grampsweb + +grampsweb svc:grampsweb->net:gramps - - + + svc:grampsweb->net:traefik - - + + - + + +traefik-service:grampsweb + + + +service:grampsweb + + -router:gramps->svc:grampsweb - - -service:grampsweb +router:gramps->traefik-service:grampsweb + + dns:service-5.<internal-domain>->router:gramps - - + + - - -lb:grampsweb:gramps - - - -lb:gramps -port:5000 + + +traefik-service:gramps + + + +service:gramps +port:5000 - + -lb:grampsweb:gramps->svc:grampsweb - - +traefik-service:gramps->svc:grampsweb + + - + svc:grampsweb_celery - -grampsweb_celery + +grampsweb_celery svc:grampsweb_celery->net:gramps - - + + - + svc:influxdb - -influxdb + +influxdb svc:influxdb->net:monitor - - + + svc:influxdb->net:traefik - - + + - + + +traefik-service:influxdb + + + +service:influxdb +port:8086 + + -router:influxdb->svc:influxdb - - -service:influxdb +router:influxdb->traefik-service:influxdb + + - + mw:authelia - -authelia + +authelia router:influxdb->mw:authelia - - + + + + + +traefik-service:influxdb->svc:influxdb + + dns:service-6.<internal-domain>->router:influxdb - - - - - -lb:influxdb:influxdb - - - -lb:influxdb -port:8086 - - - -lb:influxdb:influxdb->svc:influxdb - - + + - + svc:monitor-kuma - -monitor-kuma + +monitor-kuma svc:monitor-kuma->net:monitor - - + + svc:monitor-kuma->net:traefik - - + + - + + +traefik-service:monitor-kuma + + + +service:monitor-kuma + + -router:monitor->svc:monitor-kuma - - -service:monitor-kuma +router:monitor->traefik-service:monitor-kuma + + dns:service-7.<internal-domain>->router:monitor - - + + - - -lb:monitor-kuma:monitor - - - -lb:monitor -port:3001 + + +traefik-service:monitor + + + +service:monitor +port:3001 - + -lb:monitor-kuma:monitor->svc:monitor-kuma - - +traefik-service:monitor->svc:monitor-kuma + + - + svc:mtls-bridge - -mtls-bridge + +mtls-bridge svc:mtls-bridge->net:monitor - - + + svc:mtls-bridge->net:traefik - - + + - + + +traefik-service:mtls-bridge + + + +service:mtls-bridge +port:8080 + + -router:mtls-bridge->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge->traefik-service:mtls-bridge + + - + mw:mtls-bridge-auth - -mtls-bridge-auth + +mtls-bridge-auth router:mtls-bridge->mw:mtls-bridge-auth - - + + - + mw:mtls-bridge-cors - -mtls-bridge-cors + +mtls-bridge-cors router:mtls-bridge->mw:mtls-bridge-cors - - + + + + + +traefik-service:mtls-bridge->svc:mtls-bridge + + dns:service-8.<internal-domain>->router:mtls-bridge - - + + dns:service-8.<internal-domain>->router:mtls-bridge-preflight - - + + - + -router:mtls-bridge-preflight->svc:mtls-bridge - - -service:mtls-bridge +router:mtls-bridge-preflight->traefik-service:mtls-bridge + + router:mtls-bridge-preflight->mw:mtls-bridge-cors - - - - - -lb:mtls-bridge:mtls-bridge - - - -lb:mtls-bridge -port:8080 - - - -lb:mtls-bridge:mtls-bridge->svc:mtls-bridge - - + + - + svc:nextcloud-db - -nextcloud-db + +nextcloud-db svc:nextcloud-db->net:nextcloud - - + + - + svc:nextcloud-redis - -nextcloud-redis + +nextcloud-redis svc:nextcloud-redis->net:nextcloud - - + + - + svc:nextcloud-webapp - -nextcloud-webapp + +nextcloud-webapp svc:nextcloud-webapp->net:nextcloud - - + + svc:nextcloud-webapp->net:traefik - - + + - + + +traefik-service:nextcloud-webapp + + + +service:nextcloud-webapp + + -router:nextcloud->svc:nextcloud-webapp - - -service:nextcloud-webapp +router:nextcloud->traefik-service:nextcloud-webapp + + - + mw:nextcloud-dav - -nextcloud-dav + +nextcloud-dav router:nextcloud->mw:nextcloud-dav - - + + - + mw:nextcloud-webfinger - -nextcloud-webfinger + +nextcloud-webfinger router:nextcloud->mw:nextcloud-webfinger - - + + dns:service-9.<internal-domain>->router:nextcloud - - + + - + svc:node-exporter - -node-exporter + +node-exporter svc:node-exporter->net:monitor - - + + - + svc:node-red - -node-red + +node-red svc:node-red->net:monitor - - + + svc:node-red->net:traefik - - + + router:node-red->mw:authelia - - + + - + + +traefik-service:node-red + + + +service:node-red +port:1880 + + -router:node-red->svc:node-red - - -service:node-red +router:node-red->traefik-service:node-red + + + + + +traefik-service:node-red->svc:node-red + + dns:service-10.<internal-domain>->router:node-red - - - - - -lb:node-red:node-red - - - -lb:node-red -port:1880 - - - -lb:node-red:node-red->svc:node-red - - + + - + svc:passbolt-db - -passbolt-db + +passbolt-db svc:passbolt-db->net:passbolt - - + + - + svc:passbolt-webapp - -passbolt-webapp + +passbolt-webapp svc:passbolt-webapp->net:passbolt - - + + svc:passbolt-webapp->net:traefik - - + + - + + +traefik-service:passbolt-webapp + + + +service:passbolt-webapp + + -router:passbolt->svc:passbolt-webapp - - -service:passbolt-webapp +router:passbolt->traefik-service:passbolt-webapp + + dns:service-11.<internal-domain>->router:passbolt - - + + - + svc:pihole-exporter - -pihole-exporter + +pihole-exporter svc:pihole-exporter->net:monitor - - + + - + svc:portainer - -portainer + +portainer svc:portainer->net:traefik - - + + - + + +traefik-service:portainer + + + +service:portainer +port:9000 + + -router:portainer->svc:portainer - - -service:portainer +router:portainer->traefik-service:portainer + + + + + +traefik-service:portainer->svc:portainer + + dns:service-12.<internal-domain>->router:portainer - - - - - -lb:portainer:portainer - - - -lb:portainer -port:9000 - - - -lb:portainer:portainer->svc:portainer - - + + - + svc:prometheus - -prometheus + +prometheus svc:prometheus->net:monitor - - + + svc:prometheus->net:traefik - - + + router:prometheus->mw:authelia - - + + - + + +traefik-service:prometheus + + + +service:prometheus +port:9090 + + -router:prometheus->svc:prometheus - - -service:prometheus +router:prometheus->traefik-service:prometheus + + + + + +traefik-service:prometheus->svc:prometheus + + dns:service-13.<internal-domain>->router:prometheus - - - - - -lb:prometheus:prometheus - - - -lb:prometheus -port:9090 - - - -lb:prometheus:prometheus->svc:prometheus - - + + - + svc:searxng-webapp - -searxng-webapp + +searxng-webapp svc:searxng-webapp->net:traefik - - + + - + + +traefik-service:searxng-webapp + + + +service:searxng-webapp + + -router:searxng->svc:searxng-webapp - - -service:searxng-webapp +router:searxng->traefik-service:searxng-webapp + + dns:service-14.<internal-domain>->router:searxng - - + + - - -lb:searxng-webapp:searxng - - - -lb:searxng -port:8080 + + +traefik-service:searxng + + + +service:searxng +port:8080 - + -lb:searxng-webapp:searxng->svc:searxng-webapp - - +traefik-service:searxng->svc:searxng-webapp + + - + svc:shift-recorder-web - -shift-recorder-web + +shift-recorder-web svc:shift-recorder-web->net:traefik - - + + - + + +traefik-service:shift-recorder-web + + + +service:shift-recorder-web + + -router:shifts->svc:shift-recorder-web - - -service:shift-recorder-web +router:shifts->traefik-service:shift-recorder-web + + dns:service-15.<internal-domain>->router:shifts - - + + - - -lb:shift-recorder-web:shifts - - - -lb:shifts -port:80 + + +traefik-service:shifts + + + +service:shifts +port:80 - + -lb:shift-recorder-web:shifts->svc:shift-recorder-web - - +traefik-service:shifts->svc:shift-recorder-web + + - + svc:stockfill - -stockfill + +stockfill svc:stockfill->net:traefik - - + + - + + +traefik-service:stockfill + + + +service:stockfill +port:80 + + -router:stockfill->svc:stockfill - - -service:stockfill +router:stockfill->traefik-service:stockfill + + + + + +traefik-service:stockfill->svc:stockfill + + dns:service-16.<internal-domain>->router:stockfill - - - - - -lb:stockfill:stockfill - - - -lb:stockfill -port:80 - - - -lb:stockfill:stockfill->svc:stockfill - - + + - + svc:telegraf - -telegraf + +telegraf svc:telegraf->net:monitor - - - - - -router:traefik->svc:traefik - - -service:api@internal + + router:traefik->mw:authelia - - + + + + + +traefik-service:api@internal + + + +service:api@internal + + + +router:traefik->traefik-service:api@internal + + dns:service-17.<internal-domain>->router:traefik - - + + diff --git a/scripts/docs/generate-diagrams.py b/scripts/docs/generate-diagrams.py index d3b0e5f..0fb8f27 100644 --- a/scripts/docs/generate-diagrams.py +++ b/scripts/docs/generate-diagrams.py @@ -120,7 +120,7 @@ def generate_docker_traefik_dynu(compose: dict, out_dot: Path, out_svg: Path) -> lines = [ "digraph DockerTraefikDynu {", - " graph [rankdir=LR, compound=true, splines=ortho, nodesep=0.5, ranksep=1.0, fontname=\"Helvetica\"];", + " graph [rankdir=LR, compound=true, splines=true, nodesep=0.5, ranksep=1.0, fontname=\"Helvetica\"];", " node [fontname=\"Helvetica\", fontsize=10, style=\"rounded,filled\"];", " edge [fontname=\"Helvetica\", fontsize=9];", ' "ext:dynu" [label="Dynu / Public DNS", shape=oval, fillcolor="#fde68a"];', @@ -151,7 +151,9 @@ def generate_docker_traefik_dynu(compose: dict, out_dot: Path, out_svg: Path) -> tls = labels.get(f"{router_prefix}{router}.tls", "false") lines.append(f' "router:{router}" [label="router:{router}\\nentry:{entrypoints} tls:{tls}", shape=diamond, fillcolor="#fbcfe8"];') lines.append(f' "svc:traefik" -> "router:{router}";') - lines.append(f' "router:{router}" -> "svc:{svc_name}" [label="service:{router_service}"];') + target_node = f"traefik-service:{router_service}" + lines.append(f' "{target_node}" [label="service:{router_service}", shape=component, fillcolor="#fecaca"];') + lines.append(f' "router:{router}" -> "{target_node}";') for host in extract_hosts(rule): clean = sanitize_domain(host, known_domains) @@ -166,8 +168,8 @@ def generate_docker_traefik_dynu(compose: dict, out_dot: Path, out_svg: Path) -> lb_services = sorted({k[len(service_prefix):].split(".", 1)[0] for k in labels if k.startswith(service_prefix)}) for lb in lb_services: port = labels.get(f"{service_prefix}{lb}.loadbalancer.server.port", "") - lines.append(f' "lb:{svc_name}:{lb}" [label="lb:{lb}\\nport:{port}", shape=component, fillcolor="#fecaca"];') - lines.append(f' "lb:{svc_name}:{lb}" -> "svc:{svc_name}";') + lines.append(f' "traefik-service:{lb}" [label="service:{lb}\\nport:{port}", shape=component, fillcolor="#fecaca"];') + lines.append(f' "traefik-service:{lb}" -> "svc:{svc_name}";') lines.append("}") write_dot(out_dot, lines)