align-items: center; justify-content: center; text-align: center; position: relative; overflow: hidden; transition: all 0.3s ease; } .diagram-node:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); z-index: 10; border-color: var(--primary, #3b82f6); } .diagram-node::before { content: ''; position: absolute; width: 150%; height: 150%; background: radial-gradient(circle, rgba(99, 102, 241, 0.3) 0%, transparent 70%); opacity: 0; transition: opacity 0.3s ease; } .diagram-node:hover::before { opacity: 1; } .diagram-node.gateway { grid-column: 1 / 2; grid-row: 1 / 2; border-color: var(--warning, #f59e0b); } .diagram-node.firewall { grid-column: 2 / 3; grid-row: 1 / 2; border-color: var(--error, #ef4444); } .diagram-node.proxmox { grid-column: 3 / 5; grid-row: 1 / 2; border-color: var(--primary, #3b82f6); } .diagram-node.kubernetes { grid-column: 2 / 4; grid-row: 2 / 3; border-color: var(--accent, #6366f1); } .diagram-node.storage { grid-column: 1 / 2; grid-row: 2 / 3; border-color: var(--success, #10b981); } .diagram-node.monitoring { grid-column: 4 / 5; grid-row: 2 / 3; border-color: var(--primary, #3b82f6); } .diagram-node.services { grid-column: 1 / 5; grid-row: 3 / 4; display: flex; flex-direction: row; justify-content: space-around; flex-wrap: wrap; background-color: rgba(15, 23, 42, 0.3); } .service-icon { display: flex; align-items: center; justify-content: center; flex-direction: column; width: 80px; height: 80px; margin: 0.5rem; transition: all 0.3s ease; } .service-icon:hover { transform: scale(1.1); } .service-icon i { font-size: 1.75rem; margin-bottom: 0.5rem; } .service-icon span { font-size: 0.75rem; color: var(--text-secondary); } /* Connection lines for architecture diagram */ .connection-line { position: absolute; background-color: var(--border, rgba(148, 163, 184, 0.1)); transition: all 0.3s ease; z-index: 5; } .connection-line.horizontal { height: 2px; } .connection-line.vertical { width: 2px; } .connection-line.active { background-color: var(--accent, #6366f1); box-shadow: 0 0 10px var(--accent, #6366f1); } /* Enhanced Service Items */ .service-item { position: relative; overflow: hidden; } .service-item::before { content: ''; position: absolute; left: 0; top: 0; height: 100%; width: 0; background: linear-gradient(90deg, var(--accent, #6366f1) 0%, transparent 100%); opacity: 0.1; transition: width 0.3s ease; } .service-item.available:hover::before { width: 100%; } /* Enhanced Card Hover Effects */ .tech-card { position: relative; overflow: hidden; } .tech-card::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, var(--primary, #3b82f6), var(--accent, #6366f1)); transform: scaleX(0); transform-origin: right; transition: transform 0.5s ease; } .tech-card:hover::after { transform: scaleX(1); transform-origin: left; } /* Enhanced Project Cards */ .project-card { position: relative; overflow: hidden; } .project-card::before { content: ''; position: absolute; top: -50px; right: -50px; width: 100px; height: 100px; background: linear-gradient(45deg, var(--primary, #3b82f6), var(--accent, #6366f1)); transform: rotate(45deg); opacity: 0; transition: all 0.5s ease; } .project-card:hover::before { opacity: 0.15; } /* Enhanced Dashboard Cards */ .dashboard-preview.infrastructure { background-image: linear-gradient(45deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.7)), url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNDAgMTIwIj48cmVjdCB4PSIxMCIgeT0iMTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSIxMDAiIGZpbGw9IiMyNTYzZWIiIGZpbGwtb3BhY2l0eT0iMC4yIiByeD0iNSIvPjxyZWN0IHg9IjgwIiB5PSIxMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iIzI1NjNlYiIgZmlsbC1vcGFjaXR5PSIwLjMiIHJ4PSI1Ii8+PHJlY3QgeD0iMTUwIiB5PSIxMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iIzI1NjNlYiIgZmlsbC1vcGFjaXR5PSIwLjQiIHJ4PSI1Ii8+PC9zdmc+'); } .dashboard-preview.kubernetes { background-image: linear-gradient(45deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.7)), url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNDAgMTIwIj48Y2lyY2xlIGN4PSIxMjAiIGN5PSI2MCIgcj0iNDAiIGZpbGw9IiM2MzY2ZjEiIGZpbGwtb3BhY2l0eT0iMC4yIi8+PGNpcmNsZSBjeD0iNTAiIGN5PSI0MCIgcj0iMjAiIGZpbGw9IiM2MzY2ZjEiIGZpbGwtb3BhY2l0eT0iMC4zIi8+PGNpcmNsZSBjeD0iNTAiIGN5PSI5MCIgcj0iMjAiIGZpbGw9IiM2MzY2ZjEiIGZpbGwtb3BhY2l0eT0iMC4zIi8+PGNpcmNsZSBjeD0iMTkwIiBjeT0iNDAiIHI9IjIwIiBmaWxsPSIjNjM2NmYxIiBmaWxsLW9wYWNpdHk9IjAuMyIvPjxjaXJjbGUgY3g9IjE5MCIgY3k9IjkwIiByPSIyMCIgZmlsbD0iIzYzNjZmMSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48bGluZSB4MT0iNTAiIHkxPSI0MCIgeDI9IjEyMCIgeTI9IjYwIiBzdHJva2U9IiM2MzY2ZjEiIHN0cm9rZS1vcGFjaXR5PSIwLjQiIHN0cm9rZS13aWR0aD0iMiIvPjxsaW5lIHgxPSI1MCIgeTE9IjkwIiB4Mj0iMTIwIiB5Mj0iNjAiIHN0cm9rZT0iIzYzNjZmMSIgc3Ryb2tlLW9wYWNpdHk9IjAuNCIgc3Ryb2tlLXdpZHRoPSIyIi8+PGxpbmUgeDE9IjE5MCIgeTE9IjQwIiB4Mj0iMTIwIiB5Mj0iNjAiIHN0cm9rZT0iIzYzNjZmMSIgc3Ryb2tlLW9wYWNpdHk9IjAuNCIgc3Ryb2tlLXdpZHRoPSIyIi8+PGxpbmUgeDE9IjE5MCIgeTE9IjkwIiB4Mj0iMTIwIiB5Mj0iNjAiIHN0cm9rZT0iIzYzNjZmMSIgc3Ryb2tlLW9wYWNpdHk9IjAuNCIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+'); } .dashboard-preview.network { background-image: linear-gradient(45deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.7)), url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNDAgMTIwIj48cGF0aCBkPSJNMTAgMTAgQzIzMCAxMCAyMzAgNTAgMTAgNTAgQzIzMCA1MCAyMzAgOTAgMTAgOTAgQzIzMCA5MCAyMzAgMTMwIDEwIDEzMCIgc3Ryb2tlPSIjMTBiOTgxIiBzdHJva2Utb3BhY2l0eT0iMC40IiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz48L3N2Zz4='); } .dashboard-preview.services { background-image: linear-gradient(45deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.7)), url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNDAgMTIwIj48cmVjdCB4PSIxMCIgeT0iMTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2VmNDQ0NCIgZmlsbC1vcGFjaXR5PSIwLjIiIHJ4PSI1Ii8+PHJlY3QgeD0iMTAiIHk9IjQwIiB3aWR0aD0iNzAiIGhlaWdodD0iMjAiIGZpbGw9IiNlZjQ0NDQiIGZpbGwtb3BhY2l0eT0iMC4zIiByeD0iNSIvPjxyZWN0IHg9IjEwIiB5PSI3MCIgd2lkdGg9IjMwIiBoZWlnaHQ9IjIwIiBmaWxsPSIjZWY0NDQ0IiBmaWxsLW9wYWNpdHk9IjAuNCIgcng9IjUiLz48cmVjdCB4PSIxMDAiIHk9IjEwIiB3aWR0aD0iODAiIGhlaWdodD0iMjAiIGZpbGw9IiM2MzY2ZjEiIGZpbGwtb3BhY2l0eT0iMC4yIiByeD0iNSIvPjxyZWN0IHg9IjEwMCIgeT0iNDAiIHdpZHRoPSI1MCIgaGVpZ2h0PSIyMCIgZmlsbD0iIzYzNjZmMSIgZmlsbC1vcGFjaXR5PSIwLjMiIHJ4PSI1Ii8+PHJlY3QgeD0iMTAwIiB5PSI3MCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIyMCIgZmlsbD0iIzYzNjZmMSIgZmlsbC1vcGFjaXR5PSIwLjQiIHJ4PSI1Ii8+PC9zdmc+'); } /* Enhanced Dashboard Overlay */ .dashboard-overlay .overlay-icon { transition: transform 0.3s ease; } .dashboard-card:hover .overlay-icon { transform: scale(1.2); } /* Keep your existing responsive styles */ @media (max-width: 1024px) { .architecture-diagram { grid-template-columns: repeat(2, 1fr); grid-template-rows: repeat(6, auto); gap: 1rem; } .diagram-node.gateway { grid-column: 1 / 2; grid-row: 1 / 2; } .diagram-node.firewall { grid-column: 2 / 3; grid-row: 1 / 2; } .diagram-node.proxmox { grid-column: 1 / 3; grid-row: 2 / 3; } .diagram-node.kubernetes { grid-column: 1 / 3; grid-row: 3 / 4; } .diagram-node.storage { grid-column: 1 / 2; grid-row: 4 / 5; } .diagram-node.monitoring { grid-column: 2 / 3; grid-row: 4 / 5; } .diagram-node.services { grid-column: 1 / 3; grid-row: 5 / 6; } } --- // src/pages/homelab.astro - Enhanced version import BaseLayout from '../layouts/BaseLayout.astro'; import Header from '../components/Header.astro'; import Footer from '../components/Footer.astro'; const title = "Home Lab | ArgoBox - ArgoBox Tech Hub"; const description = "ArgoBox - A production-grade Kubernetes homelab for DevOps experimentation, infrastructure automation, and containerized application deployment."; // Using your existing data structure const servicesData = { development: [ { name: "Gitea", description: "Self-hosted Git service", url: "https://git.argobox.com", status: "live", icon: "fas fa-code-branch", available: true }, { name: "VS Code Server", description: "Remote development environment", url: "https://code.argobox.com", status: "live", icon: "fas fa-terminal", available: true }, { name: "Drone CI", description: "Continuous Integration server", url: "https://drone.argobox.com", status: "live", icon: "fas fa-cogs", available: true }, ], media: [ { name: "Plex", description: "Media streaming server", url: "https://plex.argobox.com", status: "live", icon: "fas fa-play-circle", available: true }, { name: "Jellyfin", description: "Open source media system", url: "https://jellyfin.argobox.com", status: "live", icon: "fas fa-film", available: true }, { name: "Sonarr", description: "TV show management", url: "#", status: "restricted", icon: "fas fa-tv", available: false }, { name: "Radarr", description: "Movie management", url: "#", status: "restricted", icon: "fas fa-video", available: false }, { name: "Prowlarr", description: "Indexer management", url: "#", status: "restricted", icon: "fas fa-search", available: false }, ], utilities: [ { name: "File Browser", description: "Web file manager", url: "https://files.argobox.com", status: "live", icon: "fas fa-folder-open", available: true }, { name: "Vaultwarden", description: "Password manager", url: "#", status: "restricted", icon: "fas fa-key", available: false }, { name: "Homepage", description: "Service dashboard", url: "https://dash.argobox.com", status: "live", icon: "fas fa-tachometer-alt", available: true }, { name: "Uptime Kuma", description: "Status monitoring", url: "https://status.argobox.com", status: "live", icon: "fas fa-heartbeat", available: true }, ], infrastructure: [ { name: "Proxmox VE", description: "Virtualization platform", url: "#", status: "restricted", icon: "fas fa-server", available: false }, { name: "Kubernetes (K3s)", description: "Container orchestration", url: "#", status: "restricted", icon: "fas fa-dharmachakra", available: false }, { name: "Traefik", description: "Ingress controller", url: "#", status: "restricted", icon: "fas fa-route", available: false }, { name: "OPNsense", description: "Firewall/Router", url: "#", status: "restricted", icon: "fas fa-shield-alt", available: false }, ] }; // Use your existing project data const projectsData = [ { title: "Ansible Playbooks", description: "Collection of playbooks for automating system configuration and application deployment.", icon: "fab fa-ansible", tech: ["Ansible", "YAML", "Jinja2"], url: "/resources/iac" }, { title: "Kubernetes Manifests", description: "YAML definitions for deploying various applications and services on Kubernetes.", icon: "fas fa-dharmachakra", tech: ["Kubernetes", "YAML", "Helm"], url: "/resources/kubernetes" }, { title: "Monitoring Dashboards", description: "Grafana dashboards for visualizing infrastructure and application metrics.", icon: "fas fa-chart-line", tech: ["Grafana", "PromQL", "JSON"], url: "/resources/config-files" }, { title: "Cloudflare Tunnel Setup", description: "Securely exposing home lab services to the internet using Cloudflare Tunnels.", icon: "fas fa-cloud", tech: ["Cloudflare", "Networking", "Security"], url: "/posts/cloudflare-tunnel-setup" } ]; // Use your existing dashboards data const dashboardsData = [ { title: "Infrastructure Overview", description: "Key metrics for Proxmox hosts, network devices, and storage.", previewClass: "infrastructure", url: "https://dash.argobox.com/goto/...", icon: "fas fa-server" }, { title: "Kubernetes Cluster", description: "Detailed view of K3s cluster resources, node status, and pod health.", previewClass: "kubernetes", url: "https://dash.argobox.com/goto/...", icon: "fas fa-dharmachakra" }, { title: "Network Traffic", description: "Real-time and historical network usage, firewall logs, and connection tracking.", previewClass: "network", url: "https://dash.argobox.com/goto/...", icon: "fas fa-network-wired" }, { title: "Service Performance", description: "Application-specific metrics, request latency, and error rates.", previewClass: "services", url: "https://dash.argobox.com/goto/...", icon: "fas fa-cogs" } ]; ---

Enterprise-Grade Home Lab Environment

A production-ready infrastructure platform for DevOps experimentation, distributed systems, and automating everything with code.

argobox:~$ ls -la /services | wc -l
{Object.values(servicesData).flat().length}+
argobox:~$ nproc --all
32+
argobox:~$ free -h | grep Mem | awk '{print $2}'
64GB
argobox:~$ df -h /data | grep /data | awk '{print $2}'
12TB
argobox ~ k8s-status
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
argobox Ready control-plane,master 154d v1.25.16+k3s1
argobox-lite Ready worker 154d v1.25.16+k3s1
 
$ kubectl get pods -A | grep Running | wc -l
32
 
$ uptime
14:30:25 up 154 days, 23:12, 1 user, load average: 0.22, 0.18, 0.15
 
$ ansible-playbook status.yml
PLAY [Check system status] *******************************************
TASK [Gathering Facts] **********************************************
ok: [argobox]
ok: [argobox-lite]
TASK [Check service status] *****************************************
ok: [argobox]
ok: [argobox-lite]
PLAY RECAP **********************************************************
argobox : ok=2 changed=0 unreachable=0 failed=0 skipped=0
argobox-lite: ok=2 changed=0 unreachable=0 failed=0 skipped=0
$ |

Infrastructure Architecture

Enterprise-grade network topology with redundancy, virtualization, and secure segmentation.

Internet Gateway
Multiple WAN connections with failover
OPNsense Firewall
Advanced security & traffic management
Proxmox Cluster
Virtualization platform with HA capabilities
ZFS Storage
RAID10 configuration with snapshots
Kubernetes (K3s)
Container orchestration across multiple nodes
Monitoring Stack
Prometheus, Grafana, & AlertManager
Git
Code
Media
Vault
Web
CI/CD
ArgoBox Architecture Diagram

Network Security

Enterprise firewall with network segmentation using VLANs and strict access controls. Redundant routing with automatic failover between OPNsense and OpenWrt.

Virtualization

Proxmox virtualization platform with ZFS storage pools in RAID10 configuration. Optimized storage pools for VMs and containers with proper resource allocation.

High Availability

Full redundancy with failover routing, replicated storage, and resilient services. Automatic service recovery and load balancing across nodes.

Core Technologies

The ArgoBox lab leverages cutting-edge open source technologies to create a powerful, flexible infrastructure.

Kubernetes (K3s)

Lightweight Kubernetes distribution running across multiple nodes for container orchestration. Powers all microservices and applications.

Multi-node clusterPersistent volumesTraefik ingressAuto-healing

Proxmox

Enterprise-class virtualization platform running virtual machines and containers with ZFS storage backend for data integrity.

ZFS storageResource balancingLive migrationHardware passthrough

Zero Trust Security

Comprehensive security architecture with Cloudflare tunnels, network segmentation, and authentication at all service boundaries.

Cloudflare tunnelsOPNsense firewallVLAN segmentationWireGuard VPN

PostgreSQL

Enterprise database cluster for application data storage with automated backups, replication, and performance optimization.

Automated backupsConnection poolingOptimized for K8sMulti-app support

Monitoring Stack

Comprehensive monitoring with Prometheus, Grafana, and AlertManager for real-time visibility into all infrastructure components.

Prometheus metricsGrafana dashboardsAutomated alertsHistorical data

Available Services

Explore the various services and applications hosted in the ArgoBox environment.

Some services require authentication and are restricted. Available public services are highlighted and clickable.

{Object.entries(servicesData).map(([categoryKey, categoryServices]) => (

{categoryKey.charAt(0).toUpperCase() + categoryKey.slice(1)} Tools

))}

Related Projects & Code

Explore associated projects, configurations, and code repositories related to the ArgoBox lab.

Live Dashboards

Real-time monitoring dashboards providing insights into the lab's performance and status. (Authentication Required)

Access to live dashboards requires authentication via Cloudflare Access.