Restore legacy docker-compose diagram semantics
This commit is contained in:
@@ -1,260 +1,79 @@
|
|||||||
digraph DockerTraefikDynu {
|
digraph Compose {
|
||||||
graph [rankdir=LR, compound=true, splines=true, nodesep=0.5, ranksep=1.0, fontname="Helvetica"];
|
rankdir=LR;
|
||||||
node [fontname="Helvetica", fontsize=10, style="rounded,filled"];
|
node [fontname="Helvetica"];
|
||||||
edge [fontname="Helvetica", fontsize=9];
|
"svc:authelia" [label="authelia", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"ext:dynu" [label="Dynu / Public DNS", shape=oval, fillcolor="#fde68a"];
|
"svc:crowdsec" [label="crowdsec", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:traefik" [label="traefik", shape=box, fillcolor="#bfdbfe"];
|
"svc:docker-socket-proxy" [label="docker-socket-proxy", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"net:gramps" [label="gramps", shape=ellipse, fillcolor="#f3f4f6"];
|
"svc:docker-update-exporter" [label="docker-update-exporter", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"net:monitor" [label="monitor", shape=ellipse, fillcolor="#f3f4f6"];
|
"svc:error-pages" [label="error-pages", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"net:nextcloud" [label="nextcloud", shape=ellipse, fillcolor="#f3f4f6"];
|
"svc:gitea" [label="gitea", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"net:passbolt" [label="passbolt", shape=ellipse, fillcolor="#f3f4f6"];
|
"svc:gitea-runner" [label="gitea-runner", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"net:traefik" [label="traefik", shape=ellipse, fillcolor="#f3f4f6"];
|
"svc:gotify" [label="gotify", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:authelia" [label="authelia", shape=box, fillcolor="#dcfce7"];
|
"svc:grafana" [label="grafana", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:authelia" -> "net:traefik" [color="#6b7280"];
|
"svc:gramps-redis" [label="gramps-redis", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"router:authelia" [label="router:authelia\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"];
|
"svc:grampsweb" [label="grampsweb", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:traefik" -> "router:authelia";
|
"svc:grampsweb_celery" [label="grampsweb_celery", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"traefik-service:authelia" [label="service:authelia", shape=component, fillcolor="#fecaca"];
|
"svc:influxdb" [label="influxdb", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"router:authelia" -> "traefik-service:authelia";
|
"svc:monitor-kuma" [label="monitor-kuma", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"dns:service-1.<internal-domain>" [label="service-1.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
"svc:mtls-bridge" [label="mtls-bridge", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"ext:dynu" -> "dns:service-1.<internal-domain>";
|
"svc:nextcloud-db" [label="nextcloud-db", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"dns:service-1.<internal-domain>" -> "router:authelia";
|
"svc:nextcloud-redis" [label="nextcloud-redis", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:crowdsec" [label="crowdsec", shape=box, fillcolor="#dcfce7"];
|
"svc:nextcloud-webapp" [label="nextcloud-webapp", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:crowdsec" -> "net:traefik" [color="#6b7280"];
|
"svc:node-exporter" [label="node-exporter", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:docker-socket-proxy" [label="docker-socket-proxy", shape=box, fillcolor="#dcfce7"];
|
"svc:node-red" [label="node-red", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:docker-socket-proxy" -> "net:monitor" [color="#6b7280"];
|
"svc:passbolt-db" [label="passbolt-db", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:docker-socket-proxy" -> "net:traefik" [color="#6b7280"];
|
"svc:passbolt-webapp" [label="passbolt-webapp", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:docker-update-exporter" [label="docker-update-exporter", shape=box, fillcolor="#dcfce7"];
|
"svc:pihole-exporter" [label="pihole-exporter", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:docker-update-exporter" -> "net:monitor" [color="#6b7280"];
|
"svc:portainer" [label="portainer", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:error-pages" [label="error-pages", shape=box, fillcolor="#dcfce7"];
|
"svc:prometheus" [label="prometheus", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:error-pages" -> "net:traefik" [color="#6b7280"];
|
"svc:searxng-webapp" [label="searxng-webapp", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"router:error-pages-router" [label="router:error-pages-router\nentry:web tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
"svc:shift-recorder-web" [label="shift-recorder-web", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"svc:traefik" -> "router:error-pages-router";
|
"svc:stockfill" [label="stockfill", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"traefik-service:error-pages" [label="service:error-pages", shape=component, fillcolor="#fecaca"];
|
"svc:telegraf" [label="telegraf", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"router:error-pages-router" -> "traefik-service:error-pages";
|
"svc:traefik" [label="traefik", shape=box, style=filled, fillcolor="#dfefff"];
|
||||||
"mw:error-pages-middleware" [label="error-pages-middleware", shape=hexagon, fillcolor="#ddd6fe"];
|
"net:gramps" [label="gramps", shape=ellipse, style=filled, fillcolor="#f4f4f4"];
|
||||||
"router:error-pages-router" -> "mw:error-pages-middleware" [style=dashed];
|
"net:monitor" [label="monitor", shape=ellipse, style=filled, fillcolor="#f4f4f4"];
|
||||||
"traefik-service:error-pages-service" [label="service:error-pages-service\nport:8080", shape=component, fillcolor="#fecaca"];
|
"net:nextcloud" [label="nextcloud", shape=ellipse, style=filled, fillcolor="#f4f4f4"];
|
||||||
"traefik-service:error-pages-service" -> "svc:error-pages";
|
"net:passbolt" [label="passbolt", shape=ellipse, style=filled, fillcolor="#f4f4f4"];
|
||||||
"svc:gitea" [label="gitea", shape=box, fillcolor="#dcfce7"];
|
"net:traefik" [label="traefik", shape=ellipse, style=filled, fillcolor="#f4f4f4"];
|
||||||
"svc:gitea" -> "net:traefik" [color="#6b7280"];
|
"svc:authelia" -> "net:traefik";
|
||||||
"router:gitea" [label="router:gitea\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"];
|
"svc:crowdsec" -> "net:traefik";
|
||||||
"svc:traefik" -> "router:gitea";
|
"svc:docker-socket-proxy" -> "net:monitor";
|
||||||
"traefik-service:gitea" [label="service:gitea", shape=component, fillcolor="#fecaca"];
|
"svc:docker-socket-proxy" -> "net:traefik";
|
||||||
"router:gitea" -> "traefik-service:gitea";
|
"svc:docker-update-exporter" -> "net:monitor";
|
||||||
"dns:service-2.<internal-domain>" [label="service-2.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
"svc:error-pages" -> "net:traefik";
|
||||||
"ext:dynu" -> "dns:service-2.<internal-domain>";
|
"svc:gitea" -> "net:traefik";
|
||||||
"dns:service-2.<internal-domain>" -> "router:gitea";
|
"svc:gitea-runner" -> "net:traefik";
|
||||||
"traefik-service:gitea" [label="service:gitea\nport:3000", shape=component, fillcolor="#fecaca"];
|
"svc:gotify" -> "net:traefik";
|
||||||
"traefik-service:gitea" -> "svc:gitea";
|
"svc:grafana" -> "net:monitor";
|
||||||
"svc:gitea-runner" [label="gitea-runner", shape=box, fillcolor="#dcfce7"];
|
"svc:grafana" -> "net:traefik";
|
||||||
"svc:gitea-runner" -> "net:traefik" [color="#6b7280"];
|
"svc:gramps-redis" -> "net:gramps";
|
||||||
"svc:gotify" [label="gotify", shape=box, fillcolor="#dcfce7"];
|
"svc:grampsweb" -> "net:gramps";
|
||||||
"svc:gotify" -> "net:traefik" [color="#6b7280"];
|
"svc:grampsweb" -> "net:traefik";
|
||||||
"router:gotify" [label="router:gotify\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
"svc:grampsweb_celery" -> "net:gramps";
|
||||||
"svc:traefik" -> "router:gotify";
|
"svc:influxdb" -> "net:monitor";
|
||||||
"traefik-service:gotify" [label="service:gotify", shape=component, fillcolor="#fecaca"];
|
"svc:influxdb" -> "net:traefik";
|
||||||
"router:gotify" -> "traefik-service:gotify";
|
"svc:monitor-kuma" -> "net:monitor";
|
||||||
"dns:service-3.<internal-domain>" [label="service-3.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
"svc:monitor-kuma" -> "net:traefik";
|
||||||
"ext:dynu" -> "dns:service-3.<internal-domain>";
|
"svc:mtls-bridge" -> "net:monitor";
|
||||||
"dns:service-3.<internal-domain>" -> "router:gotify";
|
"svc:mtls-bridge" -> "net:traefik";
|
||||||
"traefik-service:gotify" [label="service:gotify\nport:80", shape=component, fillcolor="#fecaca"];
|
"svc:nextcloud-db" -> "net:nextcloud";
|
||||||
"traefik-service:gotify" -> "svc:gotify";
|
"svc:nextcloud-redis" -> "net:nextcloud";
|
||||||
"svc:grafana" [label="grafana", shape=box, fillcolor="#dcfce7"];
|
"svc:nextcloud-webapp" -> "net:nextcloud";
|
||||||
"svc:grafana" -> "net:monitor" [color="#6b7280"];
|
"svc:nextcloud-webapp" -> "net:traefik";
|
||||||
"svc:grafana" -> "net:traefik" [color="#6b7280"];
|
"svc:node-exporter" -> "net:monitor";
|
||||||
"router:grafana" [label="router:grafana\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
"svc:node-red" -> "net:monitor";
|
||||||
"svc:traefik" -> "router:grafana";
|
"svc:node-red" -> "net:traefik";
|
||||||
"traefik-service:grafana" [label="service:grafana", shape=component, fillcolor="#fecaca"];
|
"svc:passbolt-db" -> "net:passbolt";
|
||||||
"router:grafana" -> "traefik-service:grafana";
|
"svc:passbolt-webapp" -> "net:passbolt";
|
||||||
"dns:service-4.<internal-domain>" [label="service-4.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
"svc:passbolt-webapp" -> "net:traefik";
|
||||||
"ext:dynu" -> "dns:service-4.<internal-domain>";
|
"svc:pihole-exporter" -> "net:monitor";
|
||||||
"dns:service-4.<internal-domain>" -> "router:grafana";
|
"svc:portainer" -> "net:traefik";
|
||||||
"traefik-service:grafana" [label="service:grafana\nport:3000", shape=component, fillcolor="#fecaca"];
|
"svc:prometheus" -> "net:monitor";
|
||||||
"traefik-service:grafana" -> "svc:grafana";
|
"svc:prometheus" -> "net:traefik";
|
||||||
"svc:gramps-redis" [label="gramps-redis", shape=box, fillcolor="#dcfce7"];
|
"svc:searxng-webapp" -> "net:traefik";
|
||||||
"svc:gramps-redis" -> "net:gramps" [color="#6b7280"];
|
"svc:shift-recorder-web" -> "net:traefik";
|
||||||
"svc:grampsweb" [label="grampsweb", shape=box, fillcolor="#dcfce7"];
|
"svc:stockfill" -> "net:traefik";
|
||||||
"svc:grampsweb" -> "net:gramps" [color="#6b7280"];
|
"svc:telegraf" -> "net:monitor";
|
||||||
"svc:grampsweb" -> "net:traefik" [color="#6b7280"];
|
"svc:traefik" -> "net:traefik";
|
||||||
"router:gramps" [label="router:gramps\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
|
||||||
"svc:traefik" -> "router:gramps";
|
|
||||||
"traefik-service:grampsweb" [label="service:grampsweb", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:gramps" -> "traefik-service:grampsweb";
|
|
||||||
"dns:service-5.<internal-domain>" [label="service-5.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-5.<internal-domain>";
|
|
||||||
"dns:service-5.<internal-domain>" -> "router:gramps";
|
|
||||||
"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"];
|
|
||||||
"svc:influxdb" -> "net:monitor" [color="#6b7280"];
|
|
||||||
"svc:influxdb" -> "net:traefik" [color="#6b7280"];
|
|
||||||
"router:influxdb" [label="router:influxdb\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
|
||||||
"svc:traefik" -> "router:influxdb";
|
|
||||||
"traefik-service:influxdb" [label="service:influxdb", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:influxdb" -> "traefik-service:influxdb";
|
|
||||||
"dns:service-6.<internal-domain>" [label="service-6.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-6.<internal-domain>";
|
|
||||||
"dns:service-6.<internal-domain>" -> "router:influxdb";
|
|
||||||
"mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:influxdb" -> "mw:authelia" [style=dashed];
|
|
||||||
"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";
|
|
||||||
"traefik-service:monitor-kuma" [label="service:monitor-kuma", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:monitor" -> "traefik-service:monitor-kuma";
|
|
||||||
"dns:service-7.<internal-domain>" [label="service-7.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-7.<internal-domain>";
|
|
||||||
"dns:service-7.<internal-domain>" -> "router:monitor";
|
|
||||||
"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";
|
|
||||||
"traefik-service:mtls-bridge" [label="service:mtls-bridge", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:mtls-bridge" -> "traefik-service:mtls-bridge";
|
|
||||||
"dns:service-8.<internal-domain>" [label="service-8.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-8.<internal-domain>";
|
|
||||||
"dns:service-8.<internal-domain>" -> "router:mtls-bridge";
|
|
||||||
"mw:mtls-bridge-auth" [label="mtls-bridge-auth", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:mtls-bridge" -> "mw:mtls-bridge-auth" [style=dashed];
|
|
||||||
"mw:mtls-bridge-cors" [label="mtls-bridge-cors", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"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";
|
|
||||||
"traefik-service:mtls-bridge" [label="service:mtls-bridge", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:mtls-bridge-preflight" -> "traefik-service:mtls-bridge";
|
|
||||||
"dns:service-8.<internal-domain>" [label="service-8.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-8.<internal-domain>";
|
|
||||||
"dns:service-8.<internal-domain>" -> "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];
|
|
||||||
"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"];
|
|
||||||
"svc:nextcloud-redis" -> "net:nextcloud" [color="#6b7280"];
|
|
||||||
"svc:nextcloud-webapp" [label="nextcloud-webapp", shape=box, fillcolor="#dcfce7"];
|
|
||||||
"svc:nextcloud-webapp" -> "net:nextcloud" [color="#6b7280"];
|
|
||||||
"svc:nextcloud-webapp" -> "net:traefik" [color="#6b7280"];
|
|
||||||
"router:nextcloud" [label="router:nextcloud\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
|
||||||
"svc:traefik" -> "router:nextcloud";
|
|
||||||
"traefik-service:nextcloud-webapp" [label="service:nextcloud-webapp", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:nextcloud" -> "traefik-service:nextcloud-webapp";
|
|
||||||
"dns:service-9.<internal-domain>" [label="service-9.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-9.<internal-domain>";
|
|
||||||
"dns:service-9.<internal-domain>" -> "router:nextcloud";
|
|
||||||
"mw:nextcloud-dav" [label="nextcloud-dav", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:nextcloud" -> "mw:nextcloud-dav" [style=dashed];
|
|
||||||
"mw:nextcloud-webfinger" [label="nextcloud-webfinger", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:nextcloud" -> "mw:nextcloud-webfinger" [style=dashed];
|
|
||||||
"svc:node-exporter" [label="node-exporter", shape=box, fillcolor="#dcfce7"];
|
|
||||||
"svc:node-exporter" -> "net:monitor" [color="#6b7280"];
|
|
||||||
"svc:node-red" [label="node-red", shape=box, fillcolor="#dcfce7"];
|
|
||||||
"svc:node-red" -> "net:monitor" [color="#6b7280"];
|
|
||||||
"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";
|
|
||||||
"traefik-service:node-red" [label="service:node-red", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:node-red" -> "traefik-service:node-red";
|
|
||||||
"dns:service-10.<internal-domain>" [label="service-10.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-10.<internal-domain>";
|
|
||||||
"dns:service-10.<internal-domain>" -> "router:node-red";
|
|
||||||
"mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:node-red" -> "mw:authelia" [style=dashed];
|
|
||||||
"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"];
|
|
||||||
"svc:passbolt-webapp" -> "net:passbolt" [color="#6b7280"];
|
|
||||||
"svc:passbolt-webapp" -> "net:traefik" [color="#6b7280"];
|
|
||||||
"router:passbolt" [label="router:passbolt\nentry:websecure tls:false", shape=diamond, fillcolor="#fbcfe8"];
|
|
||||||
"svc:traefik" -> "router:passbolt";
|
|
||||||
"traefik-service:passbolt-webapp" [label="service:passbolt-webapp", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:passbolt" -> "traefik-service:passbolt-webapp";
|
|
||||||
"dns:service-11.<internal-domain>" [label="service-11.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-11.<internal-domain>";
|
|
||||||
"dns:service-11.<internal-domain>" -> "router:passbolt";
|
|
||||||
"svc:pihole-exporter" [label="pihole-exporter", shape=box, fillcolor="#dcfce7"];
|
|
||||||
"svc:pihole-exporter" -> "net:monitor" [color="#6b7280"];
|
|
||||||
"svc:portainer" [label="portainer", shape=box, fillcolor="#dcfce7"];
|
|
||||||
"svc:portainer" -> "net:traefik" [color="#6b7280"];
|
|
||||||
"router:portainer" [label="router:portainer\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"];
|
|
||||||
"svc:traefik" -> "router:portainer";
|
|
||||||
"traefik-service:portainer" [label="service:portainer", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:portainer" -> "traefik-service:portainer";
|
|
||||||
"dns:service-12.<internal-domain>" [label="service-12.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-12.<internal-domain>";
|
|
||||||
"dns:service-12.<internal-domain>" -> "router: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";
|
|
||||||
"traefik-service:prometheus" [label="service:prometheus", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:prometheus" -> "traefik-service:prometheus";
|
|
||||||
"dns:service-13.<internal-domain>" [label="service-13.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-13.<internal-domain>";
|
|
||||||
"dns:service-13.<internal-domain>" -> "router:prometheus";
|
|
||||||
"mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:prometheus" -> "mw:authelia" [style=dashed];
|
|
||||||
"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";
|
|
||||||
"traefik-service:searxng-webapp" [label="service:searxng-webapp", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:searxng" -> "traefik-service:searxng-webapp";
|
|
||||||
"dns:service-14.<internal-domain>" [label="service-14.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-14.<internal-domain>";
|
|
||||||
"dns:service-14.<internal-domain>" -> "router:searxng";
|
|
||||||
"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";
|
|
||||||
"traefik-service:shift-recorder-web" [label="service:shift-recorder-web", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:shifts" -> "traefik-service:shift-recorder-web";
|
|
||||||
"dns:service-15.<internal-domain>" [label="service-15.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-15.<internal-domain>";
|
|
||||||
"dns:service-15.<internal-domain>" -> "router:shifts";
|
|
||||||
"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";
|
|
||||||
"traefik-service:stockfill" [label="service:stockfill", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:stockfill" -> "traefik-service:stockfill";
|
|
||||||
"dns:service-16.<internal-domain>" [label="service-16.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-16.<internal-domain>";
|
|
||||||
"dns:service-16.<internal-domain>" -> "router: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";
|
|
||||||
"traefik-service:api@internal" [label="service:api@internal", shape=component, fillcolor="#fecaca"];
|
|
||||||
"router:traefik" -> "traefik-service:api@internal";
|
|
||||||
"dns:service-17.<internal-domain>" [label="service-17.<internal-domain>", shape=note, fillcolor="#fde68a"];
|
|
||||||
"ext:dynu" -> "dns:service-17.<internal-domain>";
|
|
||||||
"dns:service-17.<internal-domain>" -> "router:traefik";
|
|
||||||
"mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"];
|
|
||||||
"router:traefik" -> "mw:authelia" [style=dashed];
|
|
||||||
}
|
}
|
||||||
|
|||||||
+247
-1344
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 26 KiB |
+247
-1344
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 26 KiB |
@@ -176,6 +176,31 @@ def generate_docker_traefik_dynu(compose: dict, out_dot: Path, out_svg: Path) ->
|
|||||||
render_svg(out_dot, out_svg)
|
render_svg(out_dot, out_svg)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_compose_topology(compose: dict, out_dot: Path, out_svg: Path) -> None:
|
||||||
|
services = compose.get("services") or {}
|
||||||
|
networks = compose.get("networks") or {}
|
||||||
|
lines = [
|
||||||
|
"digraph Compose {",
|
||||||
|
" rankdir=LR;",
|
||||||
|
' node [fontname="Helvetica"];',
|
||||||
|
]
|
||||||
|
for service in sorted(services):
|
||||||
|
lines.append(f' "svc:{service}" [label="{service}", shape=box, style=filled, fillcolor="#dfefff"];')
|
||||||
|
for net in sorted(networks):
|
||||||
|
lines.append(f' "net:{net}" [label="{net}", shape=ellipse, style=filled, fillcolor="#f4f4f4"];')
|
||||||
|
|
||||||
|
for service, svc in sorted(services.items()):
|
||||||
|
svc_nets = svc.get("networks") or []
|
||||||
|
if isinstance(svc_nets, dict):
|
||||||
|
svc_nets = svc_nets.keys()
|
||||||
|
for net in svc_nets:
|
||||||
|
lines.append(f' "svc:{service}" -> "net:{net}";')
|
||||||
|
|
||||||
|
lines.append("}")
|
||||||
|
write_dot(out_dot, lines)
|
||||||
|
render_svg(out_dot, out_svg)
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("legacy", nargs="*")
|
parser.add_argument("legacy", nargs="*")
|
||||||
@@ -199,7 +224,7 @@ def main() -> None:
|
|||||||
|
|
||||||
generate_docker_traefik_dynu(compose, out_dir / "docker-traefik-dynu.dot", out_dir / "docker-traefik-dynu.svg")
|
generate_docker_traefik_dynu(compose, out_dir / "docker-traefik-dynu.dot", out_dir / "docker-traefik-dynu.svg")
|
||||||
generate_physical_topology(compose, out_dir / "physical-topology.dot", out_dir / "physical-topology.svg")
|
generate_physical_topology(compose, out_dir / "physical-topology.dot", out_dir / "physical-topology.svg")
|
||||||
generate_docker_traefik_dynu(compose, out_dir / "docker-compose.dot", out_dir / "docker-compose.svg")
|
generate_compose_topology(compose, out_dir / "docker-compose.dot", out_dir / "docker-compose.svg")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user