3.9 KiB
3.9 KiB
Enterprise Private Cloud & IaC Homelab (v3)
A fully automated private cloud environment deployed from bare metal. This project manages the lifecycle of network and server resources, from hardware preparation to multi-tenant container deployments, using Infrastructure as Code (IaC) and configuration management.
🗺️ System Architecture
Ingress & Traffic Routing
This diagram traces how external users connect to the various VM workloads hosted on the physical hypervisor without any port-forwarding or open inbound firewall rules on the local router.
graph LR
%% My Color Palette
classDef extNode fill:#212c2a,stroke:#9580ff,color:#f8f8f2,stroke-width:2px;
classDef tunnelNode fill:#212c2a,stroke:#ffca80,color:#ffca80,stroke-width:1px,stroke-dasharray: 5 5;
classDef vmNode fill:#2b3b38,stroke:#70a99f,color:#f8f8f2,stroke-width:1px;
classDef hostNode fill:#161d1c,stroke:#415854,color:#f8f8f2,stroke-width:2px;
%% Public Clients & Cloud Services
PublicUsers["🌐 Web Users"]:::extNode
Gamers["🎮 Minecraft Players"]:::extNode
GDrive["☁️ Google Drive (Cloud)"]:::extNode
%% Inbound Tunnels
subgraph Tunnels ["Secure Tunnels (Outbound-Only Ingress)"]
CF["☁️ Cloudflared Tunnel"]:::tunnelNode
PI["🔌 Playit.gg Tunnel"]:::tunnelNode
end
%% Physical Host & VMs
subgraph Host ["Physical Host: hypervisor.lab.local"]
subgraph Bridge ["Virtual Bridge Network (br0)"]
VM2["📄 portfolio (172.30.1.93)<br>Nginx Web Server"]:::vmNode
VM3["⚔️ minecraft (172.30.1.91)<br>Fabric Server"]:::vmNode
VM4["🎵 navidrome (172.30.1.92)<br>Music Streamer"]:::vmNode
end
end
%% Traffic Routing Paths
PublicUsers -->|HTTPS| CF
Gamers -->|Port 25565| PI
CF -->|Forward Port 80| VM2
PI -->|Forward Port 25565| VM3
%% Storage Mounting Path
VM4 -->|rclone FUSE Mount| GDrive
%% Subgraph Colors
style Host fill:#161d1c,stroke:#415854,stroke-width:2px;
style Bridge fill:#212c2a,stroke:#70a99f,stroke-width:1px;
style Tunnels fill:#212c2a,stroke:#ffca80,stroke-width:1px,stroke-dasharray: 5 5;
System Administration & Observability
This diagram details the internal control plane, showing how client VMs authenticate via FreeIPA (LDAP/Kerberos/DNS) and how Prometheus scrapes host metrics via Node Exporters across all nodes.
graph TD
%% My Color Palette
classDef hostNode fill:#161d1c,stroke:#415854,color:#f8f8f2,stroke-width:2px;
classDef ipdNode fill:#2b3b38,stroke:#ff9580,color:#ff9580,stroke-width:1.5px;
classDef vmNode fill:#2b3b38,stroke:#70a99f,color:#f8f8f2,stroke-width:1px;
classDef obsNode fill:#2b3b38,stroke:#8aff80,color:#8aff80,stroke-width:1.5px;
%% Core Services
VM1["🔑 freeipa.lab.local (172.30.1.85)<br>LDAP / Kerberos / BIND DNS"]:::ipdNode
%% Monitored VMs (Nodes)
subgraph Nodes ["Monitored Nodes (Port: 9100)"]
HostOS["🖥️ Hypervisor Host (172.30.1.200)"]:::hostNode
VM2["📄 portfolio VM (172.30.1.93)"]:::vmNode
VM3["⚔️ minecraft VM (172.30.1.91)"]:::vmNode
VM4["🎵 navidrome VM (172.30.1.92)"]:::vmNode
end
%% Monitoring Stack
subgraph PortfolioServices ["portfolio VM Services"]
Prom["📈 Prometheus TSDB"]:::obsNode
Grafana["📊 Grafana Dashboard"]:::obsNode
end
%% Telemetry Connections (Clean node-to-node routing)
HostOS & VM1 & VM2 & VM3 & VM4 -.->|Node Exporter Scrape| Prom
Prom -->|Data Source| Grafana
%% DNS Registry Connections
Nodes --->|DNS Lookups| VM1
%% Subgraph Colors
style Nodes fill:#212c2a,stroke:#70a99f,stroke-width:1px;
style PortfolioServices fill:#161d1c,stroke:#415854,stroke-width:2px;