122 lines
4.5 KiB
Python
122 lines
4.5 KiB
Python
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
|