This commit is contained in:
2025-12-02 06:14:41 +01:00
commit 3d89a5245f
11 changed files with 1126 additions and 0 deletions

121
lan_architecture.py Normal file
View File

@@ -0,0 +1,121 @@
from diagrams import Diagram, Cluster, Edge
from diagrams.onprem.network import Internet
from diagrams.onprem.compute import Server
from diagrams.onprem.iac import Ansible
from diagrams.generic.network import Router, Switch
from diagrams.generic.device import Mobile, Tablet
from diagrams.generic.blank import Blank
from diagrams.onprem.client import Users
from diagrams.onprem.container import Docker
from diagrams.custom import Custom
# Tip: run this in a venv:
# pip install diagrams graphviz
with Diagram("Home Lab / Auction Stack Architecture", show=False, filename="home_lab_architecture", direction="LR"):
internet = Internet("Internet / Cloud")
dev = Users("Dev laptop(s)\nWindows / WSL")
# -------------------- LAN 192.168.1.x --------------------
with Cluster("LAN 192.168.1.0/24"):
router = Router("hub.lan\n192.168.1.1\nRouter / Gateway")
# -------- Core server / desktop (Tour / hephaestus / dokku / ollama) --------
with Cluster("Core server / desktop\nTour / hephaestus / dokku.lan / ollama.lan\n192.168.1.159"):
core_os = Server("Ubuntu host")
traefik = Docker("Traefik\nReverse Proxy")
gitea = Docker("Gitea\n git.appmodel.nl")
dokku = Docker("Dokku\nPaaS / app hosting")
auction_fe = Docker("Auction Frontend\n auction.appmodel.nl")
aupi_be = Docker("Aupi API Backend\n aupi.appmodel.nl")
mi50 = Server("MI50 GPU / Ollama\nAI workloads")
# -------- Infra & DNS (odroid / dns.lan) --------
with Cluster("Infra & DNS\nodroid / dns.lan\n192.168.1.163"):
dns_host = Server("Odroid host")
adguard = Docker("AdGuard Home\nDNS / *.lan / *.appmodel.nl")
artifactory = Docker("Artifactory (future)")
runner = Docker("CI / Build runner (future)")
# -------- Home Assistant --------
with Cluster("Home Automation\nha.lan\n192.168.1.193"):
ha_host = Server("HomeAssistant host")
hass = Docker("Home Assistant")
# -------- Extra node / worker --------
atlas = Server("atlas.lan\n192.168.1.100\n(extra node / worker)")
# -------- IoT / devices --------
with Cluster("IoT / Clients"):
iot_hof = Tablet("hof-E402NA\n192.168.1.214")
iot_s380 = Tablet("S380HB\n192.168.1.59")
iot_ecb5 = Tablet("ecb5faa56c90\n192.168.1.49")
iot_unknown = Tablet("Unknown\n192.168.1.240")
# -------------------- Tether subnet 192.168.137.x --------------------
with Cluster("Tether subnet 192.168.137.0/24"):
hermes = Server("hermes.lan\n192.168.137.239\nworker / node")
plato = Server("plato.lan\n192.168.137.163\nworker / node")
# -------------------- Edges / flows --------------------
# Internet naar router + DNS host
internet >> router
internet >> dns_host
# Dev naar Gitea / Traefik / Dokku
dev >> Edge(label="git / HTTPS") >> traefik
dev >> Edge(label="SSH / HTTPS") >> gitea
dev >> Edge(label="Dokku deploys") >> dokku
# Router naar alle LAN-nodes
router >> core_os
router >> dns_host
router >> ha_host
router >> atlas
router >> iot_hof
router >> iot_s380
router >> iot_ecb5
router >> iot_unknown
# Core server services
core_os >> traefik
core_os >> gitea
core_os >> dokku
core_os >> auction_fe
core_os >> aupi_be
core_os >> mi50
# Infra/DNS services
dns_host >> adguard
dns_host >> artifactory
dns_host >> runner
# Home Assistant
ha_host >> hass
# DNS-queries
core_os >> Edge(label="DNS") >> adguard
ha_host >> Edge(label="DNS") >> adguard
atlas >> Edge(label="DNS") >> adguard
hermes >> Edge(label="DNS") >> adguard
plato >> Edge(label="DNS") >> adguard
# Web traffic / reverse proxy flows
internet >> Edge(label="HTTP/HTTPS") >> traefik
traefik >> Edge(label="git.appmodel.nl") >> gitea
traefik >> Edge(label="auction.appmodel.nl") >> auction_fe
traefik >> Edge(label="aupi.appmodel.nl") >> aupi_be
traefik >> Edge(label="dokku.lan / apps") >> dokku
# App-level flow
auction_fe >> Edge(label="REST API") >> aupi_be
# AI workloads
dev >> Edge(label="LLM / Tuning / Inference") >> mi50
# Tether workers verbonden met core (bv. jobs / agents)
core_os >> Edge(label="jobs / ssh") >> hermes
core_os >> Edge(label="jobs / ssh") >> plato