From 36c5f2b1e3aee10e467a5c820d71a3992c33f94c Mon Sep 17 00:00:00 2001 From: beatz174-bit Date: Wed, 13 May 2026 09:17:47 +1000 Subject: [PATCH] Restore legacy docker-compose diagram semantics --- docs/diagrams/docker-compose.dot | 337 ++---- docs/diagrams/docker-compose.svg | 1591 +++++------------------------ docs/public/docker-compose.svg | 1591 +++++------------------------ scripts/docs/generate-diagrams.py | 27 +- 4 files changed, 598 insertions(+), 2948 deletions(-) diff --git a/docs/diagrams/docker-compose.dot b/docs/diagrams/docker-compose.dot index d8ce9bf..9c78dfa 100644 --- a/docs/diagrams/docker-compose.dot +++ b/docs/diagrams/docker-compose.dot @@ -1,260 +1,79 @@ -digraph DockerTraefikDynu { - 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"]; - "svc:traefik" [label="traefik", shape=box, fillcolor="#bfdbfe"]; - "net:gramps" [label="gramps", shape=ellipse, fillcolor="#f3f4f6"]; - "net:monitor" [label="monitor", shape=ellipse, fillcolor="#f3f4f6"]; - "net:nextcloud" [label="nextcloud", shape=ellipse, fillcolor="#f3f4f6"]; - "net:passbolt" [label="passbolt", shape=ellipse, fillcolor="#f3f4f6"]; - "net:traefik" [label="traefik", shape=ellipse, fillcolor="#f3f4f6"]; - "svc:authelia" [label="authelia", shape=box, fillcolor="#dcfce7"]; - "svc:authelia" -> "net:traefik" [color="#6b7280"]; - "router:authelia" [label="router:authelia\nentry:websecure tls:true", shape=diamond, fillcolor="#fbcfe8"]; - "svc:traefik" -> "router: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"; - "svc:crowdsec" [label="crowdsec", shape=box, fillcolor="#dcfce7"]; - "svc:crowdsec" -> "net:traefik" [color="#6b7280"]; - "svc:docker-socket-proxy" [label="docker-socket-proxy", shape=box, fillcolor="#dcfce7"]; - "svc:docker-socket-proxy" -> "net:monitor" [color="#6b7280"]; - "svc:docker-socket-proxy" -> "net:traefik" [color="#6b7280"]; - "svc:docker-update-exporter" [label="docker-update-exporter", shape=box, fillcolor="#dcfce7"]; - "svc:docker-update-exporter" -> "net:monitor" [color="#6b7280"]; - "svc:error-pages" [label="error-pages", shape=box, fillcolor="#dcfce7"]; - "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"; - "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]; - "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"; - "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"; - "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"; - "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"; - "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"; - "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"; - "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"]; - "svc:grampsweb" -> "net:gramps" [color="#6b7280"]; - "svc:grampsweb" -> "net:traefik" [color="#6b7280"]; - "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." [label="service-5.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-5."; - "dns:service-5." -> "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." [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]; - "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." [label="service-7.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-7."; - "dns:service-7." -> "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." [label="service-8.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-8."; - "dns:service-8." -> "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." [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]; - "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." [label="service-9.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-9."; - "dns:service-9." -> "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." [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]; - "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." [label="service-11.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-11."; - "dns:service-11." -> "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." [label="service-12.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-12."; - "dns:service-12." -> "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." [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]; - "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." [label="service-14.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-14."; - "dns:service-14." -> "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." [label="service-15.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-15."; - "dns:service-15." -> "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." [label="service-16.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-16."; - "dns:service-16." -> "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." [label="service-17.", shape=note, fillcolor="#fde68a"]; - "ext:dynu" -> "dns:service-17."; - "dns:service-17." -> "router:traefik"; - "mw:authelia" [label="authelia", shape=hexagon, fillcolor="#ddd6fe"]; - "router:traefik" -> "mw:authelia" [style=dashed]; +digraph Compose { + rankdir=LR; + node [fontname="Helvetica"]; + "svc:authelia" [label="authelia", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:crowdsec" [label="crowdsec", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:docker-socket-proxy" [label="docker-socket-proxy", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:docker-update-exporter" [label="docker-update-exporter", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:error-pages" [label="error-pages", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:gitea" [label="gitea", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:gitea-runner" [label="gitea-runner", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:gotify" [label="gotify", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:grafana" [label="grafana", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:gramps-redis" [label="gramps-redis", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:grampsweb" [label="grampsweb", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:grampsweb_celery" [label="grampsweb_celery", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:influxdb" [label="influxdb", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:monitor-kuma" [label="monitor-kuma", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:mtls-bridge" [label="mtls-bridge", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:nextcloud-db" [label="nextcloud-db", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:nextcloud-redis" [label="nextcloud-redis", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:nextcloud-webapp" [label="nextcloud-webapp", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:node-exporter" [label="node-exporter", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:node-red" [label="node-red", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:passbolt-db" [label="passbolt-db", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:passbolt-webapp" [label="passbolt-webapp", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:pihole-exporter" [label="pihole-exporter", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:portainer" [label="portainer", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:prometheus" [label="prometheus", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:searxng-webapp" [label="searxng-webapp", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:shift-recorder-web" [label="shift-recorder-web", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:stockfill" [label="stockfill", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:telegraf" [label="telegraf", shape=box, style=filled, fillcolor="#dfefff"]; + "svc:traefik" [label="traefik", shape=box, style=filled, fillcolor="#dfefff"]; + "net:gramps" [label="gramps", shape=ellipse, style=filled, fillcolor="#f4f4f4"]; + "net:monitor" [label="monitor", shape=ellipse, style=filled, fillcolor="#f4f4f4"]; + "net:nextcloud" [label="nextcloud", shape=ellipse, style=filled, fillcolor="#f4f4f4"]; + "net:passbolt" [label="passbolt", shape=ellipse, style=filled, fillcolor="#f4f4f4"]; + "net:traefik" [label="traefik", shape=ellipse, style=filled, fillcolor="#f4f4f4"]; + "svc:authelia" -> "net:traefik"; + "svc:crowdsec" -> "net:traefik"; + "svc:docker-socket-proxy" -> "net:monitor"; + "svc:docker-socket-proxy" -> "net:traefik"; + "svc:docker-update-exporter" -> "net:monitor"; + "svc:error-pages" -> "net:traefik"; + "svc:gitea" -> "net:traefik"; + "svc:gitea-runner" -> "net:traefik"; + "svc:gotify" -> "net:traefik"; + "svc:grafana" -> "net:monitor"; + "svc:grafana" -> "net:traefik"; + "svc:gramps-redis" -> "net:gramps"; + "svc:grampsweb" -> "net:gramps"; + "svc:grampsweb" -> "net:traefik"; + "svc:grampsweb_celery" -> "net:gramps"; + "svc:influxdb" -> "net:monitor"; + "svc:influxdb" -> "net:traefik"; + "svc:monitor-kuma" -> "net:monitor"; + "svc:monitor-kuma" -> "net:traefik"; + "svc:mtls-bridge" -> "net:monitor"; + "svc:mtls-bridge" -> "net:traefik"; + "svc:nextcloud-db" -> "net:nextcloud"; + "svc:nextcloud-redis" -> "net:nextcloud"; + "svc:nextcloud-webapp" -> "net:nextcloud"; + "svc:nextcloud-webapp" -> "net:traefik"; + "svc:node-exporter" -> "net:monitor"; + "svc:node-red" -> "net:monitor"; + "svc:node-red" -> "net:traefik"; + "svc:passbolt-db" -> "net:passbolt"; + "svc:passbolt-webapp" -> "net:passbolt"; + "svc:passbolt-webapp" -> "net:traefik"; + "svc:pihole-exporter" -> "net:monitor"; + "svc:portainer" -> "net:traefik"; + "svc:prometheus" -> "net:monitor"; + "svc:prometheus" -> "net:traefik"; + "svc:searxng-webapp" -> "net:traefik"; + "svc:shift-recorder-web" -> "net:traefik"; + "svc:stockfill" -> "net:traefik"; + "svc:telegraf" -> "net:monitor"; + "svc:traefik" -> "net:traefik"; } diff --git a/docs/diagrams/docker-compose.svg b/docs/diagrams/docker-compose.svg index 3011e6a..1991277 100644 --- a/docs/diagrams/docker-compose.svg +++ b/docs/diagrams/docker-compose.svg @@ -3,1558 +3,461 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> - - - -DockerTraefikDynu - - + + + +Compose + + -ext:dynu - -Dynu / Public DNS - - - -dns:service-1.<internal-domain> - - - -service-1.<internal-domain> - - - -ext:dynu->dns:service-1.<internal-domain> - - - - - -dns:service-2.<internal-domain> - - - -service-2.<internal-domain> - - - -ext:dynu->dns:service-2.<internal-domain> - - - - - -dns:service-3.<internal-domain> - - - -service-3.<internal-domain> - - - -ext:dynu->dns:service-3.<internal-domain> - - - - - -dns:service-4.<internal-domain> - - - -service-4.<internal-domain> - - - -ext:dynu->dns:service-4.<internal-domain> - - - - - -dns:service-5.<internal-domain> - - - -service-5.<internal-domain> - - - -ext:dynu->dns:service-5.<internal-domain> - - - - - -dns:service-6.<internal-domain> - - - -service-6.<internal-domain> - - - -ext:dynu->dns:service-6.<internal-domain> - - - - - -dns:service-7.<internal-domain> - - - -service-7.<internal-domain> - - - -ext:dynu->dns:service-7.<internal-domain> - - - - - -dns: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> - - - -ext:dynu->dns:service-9.<internal-domain> - - - - - -dns:service-10.<internal-domain> - - - -service-10.<internal-domain> - - - -ext:dynu->dns:service-10.<internal-domain> - - - - - -dns:service-11.<internal-domain> - - - -service-11.<internal-domain> - - - -ext:dynu->dns:service-11.<internal-domain> - - - - - -dns:service-12.<internal-domain> - - - -service-12.<internal-domain> - - - -ext:dynu->dns:service-12.<internal-domain> - - - - - -dns:service-13.<internal-domain> - - - -service-13.<internal-domain> - - - -ext:dynu->dns:service-13.<internal-domain> - - - - - -dns:service-14.<internal-domain> - - - -service-14.<internal-domain> - - - -ext:dynu->dns:service-14.<internal-domain> - - - - - -dns:service-15.<internal-domain> - - - -service-15.<internal-domain> - - - -ext:dynu->dns:service-15.<internal-domain> - - - - - -dns:service-16.<internal-domain> - - - -service-16.<internal-domain> - - - -ext:dynu->dns:service-16.<internal-domain> - - - - - -dns:service-17.<internal-domain> - - - -service-17.<internal-domain> - - - -ext:dynu->dns:service-17.<internal-domain> - - - - - -svc:traefik - -traefik +svc:authelia + +authelia - -net:traefik - -traefik - - - -svc:traefik->net:traefik - - - - - -router:authelia - -router:authelia -entry:websecure tls:true - - - -svc:traefik->router:authelia - - - - - -router:error-pages-router - -router:error-pages-router -entry:web tls:false - - - -svc:traefik->router:error-pages-router - - - - - -router:gitea - -router:gitea -entry:websecure tls:true - - - -svc:traefik->router:gitea - - - - - -router:gotify - -router:gotify -entry:websecure tls:false - - - -svc:traefik->router:gotify - - - - - -router:grafana - -router:grafana -entry:websecure tls:false - - - -svc:traefik->router:grafana - - - - -router:gramps - -router:gramps -entry:websecure tls:false - - - -svc:traefik->router:gramps - - - - - -router:influxdb - -router:influxdb -entry:websecure tls:false - - - -svc:traefik->router:influxdb - - - - - -router:monitor - -router:monitor -entry:websecure tls:true - - - -svc:traefik->router:monitor - - - - - -router:mtls-bridge - -router:mtls-bridge -entry:websecure tls:false - - - -svc:traefik->router:mtls-bridge - - - - - -router:mtls-bridge-preflight - -router:mtls-bridge-preflight -entry:websecure tls:false - - - -svc:traefik->router:mtls-bridge-preflight - - - - - -router:nextcloud - -router:nextcloud -entry:websecure tls:false - - - -svc:traefik->router:nextcloud - - - - - -router:node-red - -router:node-red -entry:websecure tls:false - - - -svc:traefik->router:node-red - - - - - -router:passbolt - -router:passbolt -entry:websecure tls:false - - - -svc:traefik->router:passbolt - - - - - -router:portainer - -router:portainer -entry:websecure tls:true - - - -svc:traefik->router:portainer - - - - - -router:prometheus - -router:prometheus -entry:websecure tls:false - - - -svc:traefik->router:prometheus - - - - - -router:searxng - -router:searxng -entry:websecure tls:false - - - -svc:traefik->router:searxng - - - - - -router:shifts - -router:shifts -entry:websecure tls:true - - - -svc:traefik->router:shifts - - - - - -router:stockfill - -router:stockfill -entry:websecure tls:true - - - -svc:traefik->router:stockfill - - - - - -router:traefik - -router:traefik -entry:websecure tls:false - - - -svc:traefik->router:traefik - - - - - -net:gramps - -gramps - - - -net:monitor - -monitor - - - -net:nextcloud - -nextcloud - - - -net:passbolt - -passbolt - - - -svc:authelia - -authelia +net:traefik + +traefik svc:authelia->net:traefik - - - - - -traefik-service: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 + + + +net:monitor + +monitor - + 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->traefik-service:error-pages - - - - - -mw:error-pages-middleware - -error-pages-middleware - - - -router:error-pages-router->mw:error-pages-middleware - - - - - -traefik-service:error-pages-service - - - -service:error-pages-service -port:8080 - - - -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->traefik-service:gitea - - - - - -traefik-service:gitea->svc:gitea - - - - - -dns:service-2.<internal-domain>->router: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->traefik-service:gotify - - - - - -traefik-service:gotify->svc:gotify - - - - - -dns:service-3.<internal-domain>->router:gotify - - + + - + svc:grafana - -grafana + +grafana - + svc:grafana->net:monitor - - + + - + svc:grafana->net:traefik - - - - - -traefik-service:grafana - - - -service:grafana -port:3000 - - - -router:grafana->traefik-service:grafana - - - - - -traefik-service:grafana->svc:grafana - - - - - -dns:service-4.<internal-domain>->router:grafana - - + + - + svc:gramps-redis - -gramps-redis + +gramps-redis + + + +net:gramps + +gramps - + svc:gramps-redis->net:gramps - - + + - + svc:grampsweb - -grampsweb + +grampsweb - + svc:grampsweb->net:gramps - - + + - + svc:grampsweb->net:traefik - - - - - -traefik-service:grampsweb - - - -service:grampsweb - - - -router:gramps->traefik-service:grampsweb - - - - - -dns:service-5.<internal-domain>->router:gramps - - - - - -traefik-service:gramps - - - -service:gramps -port:5000 - - - -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->traefik-service:influxdb - - - - - -mw:authelia - -authelia - - - -router:influxdb->mw:authelia - - - - - -traefik-service:influxdb->svc:influxdb - - - - - -dns:service-6.<internal-domain>->router: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->traefik-service:monitor-kuma - - - - - -dns:service-7.<internal-domain>->router:monitor - - - - - -traefik-service:monitor - - - -service:monitor -port:3001 - - - -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->traefik-service:mtls-bridge - - - - - -mw:mtls-bridge-auth - -mtls-bridge-auth - - - -router:mtls-bridge->mw:mtls-bridge-auth - - - - - -mw: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->traefik-service:mtls-bridge - - - - - -router:mtls-bridge-preflight->mw:mtls-bridge-cors - - + + - + svc:nextcloud-db - -nextcloud-db + +nextcloud-db + + + +net:nextcloud + +nextcloud - + 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->traefik-service:nextcloud-webapp - - - - - -mw:nextcloud-dav - -nextcloud-dav - - - -router:nextcloud->mw:nextcloud-dav - - - - - -mw: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->traefik-service:node-red - - - - - -traefik-service:node-red->svc:node-red - - - - - -dns:service-10.<internal-domain>->router:node-red - - + + - + svc:passbolt-db - -passbolt-db + +passbolt-db + + + +net:passbolt + +passbolt - + 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->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->traefik-service:portainer - - - - - -traefik-service:portainer->svc:portainer - - - - - -dns:service-12.<internal-domain>->router: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->traefik-service:prometheus - - - - - -traefik-service:prometheus->svc:prometheus - - - - - -dns:service-13.<internal-domain>->router:prometheus - - + + - + svc:searxng-webapp - -searxng-webapp + +searxng-webapp - + svc:searxng-webapp->net:traefik - - - - - -traefik-service:searxng-webapp - - - -service:searxng-webapp - - - -router:searxng->traefik-service:searxng-webapp - - - - - -dns:service-14.<internal-domain>->router:searxng - - - - - -traefik-service:searxng - - - -service:searxng -port:8080 - - - -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->traefik-service:shift-recorder-web - - - - - -dns:service-15.<internal-domain>->router:shifts - - - - - -traefik-service:shifts - - - -service:shifts -port:80 - - - -traefik-service:shifts->svc:shift-recorder-web - - + + - + svc:stockfill - -stockfill + +stockfill - + svc:stockfill->net:traefik - - - - - -traefik-service:stockfill - - - -service:stockfill -port:80 - - - -router:stockfill->traefik-service:stockfill - - - - - -traefik-service:stockfill->svc:stockfill - - - - - -dns:service-16.<internal-domain>->router:stockfill - - + + - + svc:telegraf - -telegraf + +telegraf - + svc:telegraf->net:monitor - - + + - - -router:traefik->mw:authelia - - + + +svc:traefik + +traefik - - -traefik-service:api@internal - - - -service:api@internal - - - -router:traefik->traefik-service:api@internal - - - - - -dns:service-17.<internal-domain>->router:traefik - - + + +svc:traefik->net:traefik + + diff --git a/docs/public/docker-compose.svg b/docs/public/docker-compose.svg index 3011e6a..1991277 100644 --- a/docs/public/docker-compose.svg +++ b/docs/public/docker-compose.svg @@ -3,1558 +3,461 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> - - - -DockerTraefikDynu - - + + + +Compose + + -ext:dynu - -Dynu / Public DNS - - - -dns:service-1.<internal-domain> - - - -service-1.<internal-domain> - - - -ext:dynu->dns:service-1.<internal-domain> - - - - - -dns:service-2.<internal-domain> - - - -service-2.<internal-domain> - - - -ext:dynu->dns:service-2.<internal-domain> - - - - - -dns:service-3.<internal-domain> - - - -service-3.<internal-domain> - - - -ext:dynu->dns:service-3.<internal-domain> - - - - - -dns:service-4.<internal-domain> - - - -service-4.<internal-domain> - - - -ext:dynu->dns:service-4.<internal-domain> - - - - - -dns:service-5.<internal-domain> - - - -service-5.<internal-domain> - - - -ext:dynu->dns:service-5.<internal-domain> - - - - - -dns:service-6.<internal-domain> - - - -service-6.<internal-domain> - - - -ext:dynu->dns:service-6.<internal-domain> - - - - - -dns:service-7.<internal-domain> - - - -service-7.<internal-domain> - - - -ext:dynu->dns:service-7.<internal-domain> - - - - - -dns: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> - - - -ext:dynu->dns:service-9.<internal-domain> - - - - - -dns:service-10.<internal-domain> - - - -service-10.<internal-domain> - - - -ext:dynu->dns:service-10.<internal-domain> - - - - - -dns:service-11.<internal-domain> - - - -service-11.<internal-domain> - - - -ext:dynu->dns:service-11.<internal-domain> - - - - - -dns:service-12.<internal-domain> - - - -service-12.<internal-domain> - - - -ext:dynu->dns:service-12.<internal-domain> - - - - - -dns:service-13.<internal-domain> - - - -service-13.<internal-domain> - - - -ext:dynu->dns:service-13.<internal-domain> - - - - - -dns:service-14.<internal-domain> - - - -service-14.<internal-domain> - - - -ext:dynu->dns:service-14.<internal-domain> - - - - - -dns:service-15.<internal-domain> - - - -service-15.<internal-domain> - - - -ext:dynu->dns:service-15.<internal-domain> - - - - - -dns:service-16.<internal-domain> - - - -service-16.<internal-domain> - - - -ext:dynu->dns:service-16.<internal-domain> - - - - - -dns:service-17.<internal-domain> - - - -service-17.<internal-domain> - - - -ext:dynu->dns:service-17.<internal-domain> - - - - - -svc:traefik - -traefik +svc:authelia + +authelia - -net:traefik - -traefik - - - -svc:traefik->net:traefik - - - - - -router:authelia - -router:authelia -entry:websecure tls:true - - - -svc:traefik->router:authelia - - - - - -router:error-pages-router - -router:error-pages-router -entry:web tls:false - - - -svc:traefik->router:error-pages-router - - - - - -router:gitea - -router:gitea -entry:websecure tls:true - - - -svc:traefik->router:gitea - - - - - -router:gotify - -router:gotify -entry:websecure tls:false - - - -svc:traefik->router:gotify - - - - - -router:grafana - -router:grafana -entry:websecure tls:false - - - -svc:traefik->router:grafana - - - - -router:gramps - -router:gramps -entry:websecure tls:false - - - -svc:traefik->router:gramps - - - - - -router:influxdb - -router:influxdb -entry:websecure tls:false - - - -svc:traefik->router:influxdb - - - - - -router:monitor - -router:monitor -entry:websecure tls:true - - - -svc:traefik->router:monitor - - - - - -router:mtls-bridge - -router:mtls-bridge -entry:websecure tls:false - - - -svc:traefik->router:mtls-bridge - - - - - -router:mtls-bridge-preflight - -router:mtls-bridge-preflight -entry:websecure tls:false - - - -svc:traefik->router:mtls-bridge-preflight - - - - - -router:nextcloud - -router:nextcloud -entry:websecure tls:false - - - -svc:traefik->router:nextcloud - - - - - -router:node-red - -router:node-red -entry:websecure tls:false - - - -svc:traefik->router:node-red - - - - - -router:passbolt - -router:passbolt -entry:websecure tls:false - - - -svc:traefik->router:passbolt - - - - - -router:portainer - -router:portainer -entry:websecure tls:true - - - -svc:traefik->router:portainer - - - - - -router:prometheus - -router:prometheus -entry:websecure tls:false - - - -svc:traefik->router:prometheus - - - - - -router:searxng - -router:searxng -entry:websecure tls:false - - - -svc:traefik->router:searxng - - - - - -router:shifts - -router:shifts -entry:websecure tls:true - - - -svc:traefik->router:shifts - - - - - -router:stockfill - -router:stockfill -entry:websecure tls:true - - - -svc:traefik->router:stockfill - - - - - -router:traefik - -router:traefik -entry:websecure tls:false - - - -svc:traefik->router:traefik - - - - - -net:gramps - -gramps - - - -net:monitor - -monitor - - - -net:nextcloud - -nextcloud - - - -net:passbolt - -passbolt - - - -svc:authelia - -authelia +net:traefik + +traefik svc:authelia->net:traefik - - - - - -traefik-service: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 + + + +net:monitor + +monitor - + 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->traefik-service:error-pages - - - - - -mw:error-pages-middleware - -error-pages-middleware - - - -router:error-pages-router->mw:error-pages-middleware - - - - - -traefik-service:error-pages-service - - - -service:error-pages-service -port:8080 - - - -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->traefik-service:gitea - - - - - -traefik-service:gitea->svc:gitea - - - - - -dns:service-2.<internal-domain>->router: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->traefik-service:gotify - - - - - -traefik-service:gotify->svc:gotify - - - - - -dns:service-3.<internal-domain>->router:gotify - - + + - + svc:grafana - -grafana + +grafana - + svc:grafana->net:monitor - - + + - + svc:grafana->net:traefik - - - - - -traefik-service:grafana - - - -service:grafana -port:3000 - - - -router:grafana->traefik-service:grafana - - - - - -traefik-service:grafana->svc:grafana - - - - - -dns:service-4.<internal-domain>->router:grafana - - + + - + svc:gramps-redis - -gramps-redis + +gramps-redis + + + +net:gramps + +gramps - + svc:gramps-redis->net:gramps - - + + - + svc:grampsweb - -grampsweb + +grampsweb - + svc:grampsweb->net:gramps - - + + - + svc:grampsweb->net:traefik - - - - - -traefik-service:grampsweb - - - -service:grampsweb - - - -router:gramps->traefik-service:grampsweb - - - - - -dns:service-5.<internal-domain>->router:gramps - - - - - -traefik-service:gramps - - - -service:gramps -port:5000 - - - -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->traefik-service:influxdb - - - - - -mw:authelia - -authelia - - - -router:influxdb->mw:authelia - - - - - -traefik-service:influxdb->svc:influxdb - - - - - -dns:service-6.<internal-domain>->router: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->traefik-service:monitor-kuma - - - - - -dns:service-7.<internal-domain>->router:monitor - - - - - -traefik-service:monitor - - - -service:monitor -port:3001 - - - -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->traefik-service:mtls-bridge - - - - - -mw:mtls-bridge-auth - -mtls-bridge-auth - - - -router:mtls-bridge->mw:mtls-bridge-auth - - - - - -mw: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->traefik-service:mtls-bridge - - - - - -router:mtls-bridge-preflight->mw:mtls-bridge-cors - - + + - + svc:nextcloud-db - -nextcloud-db + +nextcloud-db + + + +net:nextcloud + +nextcloud - + 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->traefik-service:nextcloud-webapp - - - - - -mw:nextcloud-dav - -nextcloud-dav - - - -router:nextcloud->mw:nextcloud-dav - - - - - -mw: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->traefik-service:node-red - - - - - -traefik-service:node-red->svc:node-red - - - - - -dns:service-10.<internal-domain>->router:node-red - - + + - + svc:passbolt-db - -passbolt-db + +passbolt-db + + + +net:passbolt + +passbolt - + 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->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->traefik-service:portainer - - - - - -traefik-service:portainer->svc:portainer - - - - - -dns:service-12.<internal-domain>->router: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->traefik-service:prometheus - - - - - -traefik-service:prometheus->svc:prometheus - - - - - -dns:service-13.<internal-domain>->router:prometheus - - + + - + svc:searxng-webapp - -searxng-webapp + +searxng-webapp - + svc:searxng-webapp->net:traefik - - - - - -traefik-service:searxng-webapp - - - -service:searxng-webapp - - - -router:searxng->traefik-service:searxng-webapp - - - - - -dns:service-14.<internal-domain>->router:searxng - - - - - -traefik-service:searxng - - - -service:searxng -port:8080 - - - -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->traefik-service:shift-recorder-web - - - - - -dns:service-15.<internal-domain>->router:shifts - - - - - -traefik-service:shifts - - - -service:shifts -port:80 - - - -traefik-service:shifts->svc:shift-recorder-web - - + + - + svc:stockfill - -stockfill + +stockfill - + svc:stockfill->net:traefik - - - - - -traefik-service:stockfill - - - -service:stockfill -port:80 - - - -router:stockfill->traefik-service:stockfill - - - - - -traefik-service:stockfill->svc:stockfill - - - - - -dns:service-16.<internal-domain>->router:stockfill - - + + - + svc:telegraf - -telegraf + +telegraf - + svc:telegraf->net:monitor - - + + - - -router:traefik->mw:authelia - - + + +svc:traefik + +traefik - - -traefik-service:api@internal - - - -service:api@internal - - - -router:traefik->traefik-service:api@internal - - - - - -dns:service-17.<internal-domain>->router:traefik - - + + +svc:traefik->net:traefik + + diff --git a/scripts/docs/generate-diagrams.py b/scripts/docs/generate-diagrams.py index 0fb8f27..7945c71 100644 --- a/scripts/docs/generate-diagrams.py +++ b/scripts/docs/generate-diagrams.py @@ -176,6 +176,31 @@ def generate_docker_traefik_dynu(compose: dict, out_dot: Path, out_svg: Path) -> 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: parser = argparse.ArgumentParser() 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_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__":