Skip to content
🏠

My Homelab

This website runs on a self-hosted Kubernetes clusterI designed, built, and maintain. It's not hosted on Vercel or AWSβ€”it's running on enterprise-level hardware in my home, demonstrating real-world DevOps skills.

3
K8s Nodes
50+
Services
67
Releases
99.9%
Uptime
0
Exposed Ports
πŸ“‘

Live Infrastructure Status

Self-hosted monitoring powered by Uptime Kuma

Portfolio Site

OPERATIONAL
99.9%
7-Day Uptime

Overall Infrastructure

ALL SYSTEMS GO
50+
Services Running
View Full Status Dashboard
Monitored 24/7 β€’ 1-minute intervals β€’ self-hosted

If you're viewing this page, the infrastructure is running. For detailed uptime history and service-level monitoring, visit the live status dashboard above.

WHY HOMELAB

Why Homelab?

πŸ“š

Learning

You can't truly understand Kubernetes by reading docs. Breaking things at 2am and fixing them teaches more than any certification course.

🎯 Target: CKA certification by September 2026

πŸ”’

Data Privacy

Cloud providers have access to your data. Self-hosted means photos, documents, and services stay on hardware you physically control.

βœ“ No vendor lock-in, no surprise pricing changes

"If a company can host it on AWS, I can host it on three mini PCs in my closet β€” for a fraction of the cost and 100% of the learning."

PERFORMANCE

Performance Metrics

Real-world performance benchmarks from production deployment

⚑

Lighthouse Scores

98
Performance
First Contentful Paint: 0.9s
βœ…
100
Accessibility
WCAG 2.1 AA compliant
βœ…
100
Best Practices
Security & standards
βœ…
100
SEO
Search engine optimized
βœ…

⭐ Average Score: 99.5 / 100

πŸ“Š

Core Web Vitals

Largest Contentful Paint (LCP)1.2s

Target: < 2.5s βœ… Good

First Input Delay (FID)8ms

Target: < 100ms βœ… Good

Cumulative Layout Shift (CLS)0.02

Target: < 0.1 βœ… Good

Time to First Byte (TTFB)180ms

Target: < 600ms βœ… Good

All metrics pass Google's "Good" thresholds
Measured on Cloudflare's global CDN network

146 kB
First Load JS
Next.js optimized bundle
< 1s
Page Load Time
With Cloudflare CDN caching
2
Static Pages
Home + Homelab
ARCHITECTURE

Architecture Overview

πŸ“Š

Network Flow

From your browser to my homelab

Public Access

Internet β†’ Cloudflare Tunnel β†’ Gateway API β†’ Services

Internet
↓
CloudflareTunnel
↓
GatewayAPI
↓
Ghost Blog
blog.rommelporras.com
Portfolio
www.rommelporras.com
Invoicetron
invoicetron.rommelporras.com
Status Page
status.rommelporras.com

Private Access

Tailscale VPN β†’ Internal Services

TailscaleVPN Mesh
↓
Grafana
Dashboards
ArgoCD
GitOps
Jellyfin
Media
AdGuard
DNS
Vault
Secrets
Homepage
Dashboard
Ollama
AI
ARR Stack
12 services
Monitoring
5 exporters
+20 more
via Tailscale

Infrastructure

3-node bare metal Kubernetes cluster

Lenovo M80q
k8s-cp1
10.10.30.11
Lenovo M80q
k8s-cp2
10.10.30.12
Lenovo M80q
k8s-cp3
10.10.30.13
Control Plane
kubeadm + stacked etcd
Networking
Cilium CNI (eBPF)
Storage
Longhorn NVMe, 2x replication
VIP
kube-vip 10.10.30.10
Public path (Cloudflare Tunnel)Private path (Tailscale)Infrastructure
SECURITY

Defense in Depth

Three layers of security protecting the infrastructure

🌐

Layer 1: Network Perimeter

Cloudflare Edge Protection

  • βœ“DDoS protection and WAF at Cloudflare edge
  • βœ“Zero exposed ports β€” all traffic through encrypted Cloudflare Tunnel
  • βœ“Zero-trust access model (no direct connections)
πŸ”₯

Layer 2: VLAN Segmentation

OPNsense Firewall

  • βœ“8 VLANs with strict inter-VLAN firewall rules
  • βœ“IoT and Guest networks isolated from server VLAN
  • βœ“Stateful inspection with IDS/IPS (Suricata)
🐝

Layer 3: Cilium Micro-Segmentation

eBPF Network Policies

  • βœ“CiliumNetworkPolicy controls pod-to-pod traffic
  • βœ“L3/L4/L7 filtering (IP, port, HTTP path)
  • βœ“eBPF enforcement at kernel level (faster than iptables)
CI/CD PIPELINE

CI/CD Pipeline

Two delivery workflows: GitLab CI/CD for app code, ArgoCD GitOps for infrastructure

🦊 GitLab CI/CD β€” Application Delivery

Portfolio and Invoicetron use GitFlow branching with 3-environment promotion.

feature/*→develop→[build]→deploy:dev→deploy:staging→main→deploy:prod
EnvironmentNamespaceTriggerURL
Devportfolio-devPush to develop(internal only)
Stagingportfolio-stagingManual triggerbeta.rommelporras.com
Prodportfolio-prodMerge to mainwww.rommelporras.com

πŸ”„ ArgoCD GitOps β€” Infrastructure Delivery

50+ services delivered via GitOps. Git is the single source of truth β€” manual changes are automatically reverted.

git push main→ArgoCD detects→auto-sync→cluster reconciled

Pattern

  • βœ“App-of-apps (single root Application)
  • βœ“Helm multi-source + Kustomize
  • βœ“Trunk-based (direct to main)

Behavior

  • βœ“Auto-sync within ~3 minutes
  • βœ“Self-heal (manual kubectl reverted)
  • βœ“50+ services across 30+ namespaces
HARDWARE

Hardware Stack

☸️

Kubernetes Nodes (x3)

Lenovo ThinkCentre M80q

i5-10400T
6 cores / 12 threads
16GB
DDR4 RAM
512GB
NVMe SSD

Why M80q? Enterprise-grade reliability, uniform cores (important for K8s scheduling), low power (~35W TDP), excellent value on the used market.

πŸ›‘οΈ

Topton N100

Intel N100, 16GB RAM

Proxmox + OPNsense

πŸ’Ύ

Dell OptiPlex 3090

i5-10500T, 32GB RAM

Proxmox + OMV NAS

πŸ“‘

LIANGUO LG-SG5T1

5x 2.5GbE + 10G SFP+

Managed, VLAN support

⚑

CyberPower UPS

1600VA / 1000W

~45 min runtime

SERVICES

Services Running

50+ services across 30+ namespaces β€” all real, all running

βš™οΈ

Platform Infrastructure

18 services
Kubernetesv1.35.0

3-node HA control plane with stacked etcd

Ciliumv1.19.2

eBPF-based CNI replacing kube-proxy

Longhornv1.11.1

Distributed block storage (2x replication on NVMe)

kube-vipv1.0.4

HA virtual IP for API server (ARP mode)

Gateway APIv1.4.1

Kubernetes-native ingress with Cilium

cert-managerv1.19.2

Automated Let's Encrypt wildcard TLS certificates

Metrics Serverv0.8.1

Resource metrics for HPA and kubectl top

ArgoCDv3.3.6

GitOps continuous delivery (app-of-apps pattern)

HashiCorp Vaultv1.21.4

Secrets management (Raft storage, auto-unseal)

External Secrets Operatorv2.1.0

Syncs K8s Secrets from Vault

Vault Auto-Unsealercustom

Automatic Vault unsealing deployment

Velerov1.18.0

Cluster backup and restore

Garage S3v2.2.0

Self-hosted S3-compatible object store (Velero backend)

version-checkerv0.10.0

Container/K8s version drift detection

Node Feature Discoveryv0.18.3

Auto-labels GPU nodes

Intel Device Pluginsv0.35.0

GPU plugin for Intel QSV transcoding

kube-benchCronJob

Weekly CIS Kubernetes benchmark scans

Cluster Janitorcustom

Automated failed pod + stopped replica cleanup

🌐

Networking & Access

3 services
Cloudflare Tunnel2026.3.0

HA tunnel (2 replicas) β€” zero exposed ports

Tailscale Operatorv1.94.2

WireGuard subnet router for private remote access

AdGuard Homev0.107.73

Primary DNS server for all VLANs (10.10.30.53)

πŸ“Š

Observability Stack

13 services
Prometheusv0.89.0

Metrics collection with 177+ default alerting rules

Grafanav11.6.0

Dashboards for every service + infrastructure

Lokiv3.6.7

Log aggregation (paired with Grafana)

Alloyv1.15.0

Log collector (Grafana agent, replaces Promtail)

Alertmanagerv0.31.1

Alert routing to Discord + Email

Blackbox Exporterv0.28.0

HTTP/TCP probes for endpoint monitoring

Uptime Kumav2.2.1

Public status page at status.rommelporras.com

NUT Exporter3.2.5

UPS monitoring (CyberPower CP1600EPFCLCD)

OTel Collectorcustom

OpenTelemetry data collection (Claude Code metrics)

smartctl-exporterv0.14.0

NVMe S.M.A.R.T. disk monitoring (DaemonSet)

Scraparr3.0.3

Prometheus metrics for ARR apps

tdarr-exporter1.4.3

Prometheus metrics for Tdarr

qbittorrent-exporterv1.6.0

Prometheus metrics for qBittorrent

GitLab CEv18.8.2

Self-hosted DevOps platform (web, sidekiq, gitaly)

GitLab Runnerv18.8.0

Kubernetes executor for CI/CD jobs

Container Registryvia GitLab

Docker image registry at registry.k8s.rommelporras.com

Ghost Blog6.26.0

Blog with MySQL + Tinybird analytics

blog.rommelporras.com
Ghost Blog (dev)6.26.0

Theme development environment

PortfolioNext.js 16.1.0

This website (3-env CI/CD: dev/staging/prod)

www.rommelporras.com
InvoicetronNext.js 16.1.0

Invoice processing (Bun + Prisma + PostgreSQL)

invoicetron.rommelporras.com
Ollama0.20.2

Local LLM inference (CPU): qwen2.5:3b, qwen3:1.7b, moondream, gemma3:1b

Karakeep0.31.0

AI bookmark manager (Chrome crawler + Meilisearch + Ollama)

Homepagev1.11.0

Internal dashboard (2 replicas)

MySpeed1.0.9

Internet speed test tracker (historical)

Firefox Browser139.0

Persistent browser via KasmVNC

Atuin18.12.0

Self-hosted shell history sync (E2E encrypted)

TrafficAnalytics1.0.175

Ghost analytics proxy (browser to Tinybird)

15-service media automation pipeline with Intel QSV hardware transcoding.

Prowlarr
Indexers
↓
Sonarr / Radarr
TV & Movies
↓
qBittorrent
Downloads
↓
Unpackerr
Extraction
↓
Tdarr
Transcode
Intel QSV
↓
Jellyfin
Streaming
Intel QSV
Seerr→RequestsBazarr→SubtitlesConfigarr→Quality profilesRecommendarr→AI recommendationsByparr→CF bypass
Jellyfin10.11.8

Media server with Intel QSV hardware transcoding

Sonarr4.0.16

TV show management and automation

Radarr6.0.4

Movie management and automation

Prowlarr2.3.0

Indexer manager for Sonarr/Radarr

qBittorrent5.1.4

Download client

Bazarrv1.5.5

Subtitle management for Sonarr/Radarr

Seerrv3.1.0

Media requests and discovery

Tdarr2.64.02

Library transcoding (Intel QSV hardware acceleration)

Recommendarrv1.4.4

AI media recommendations (powered by Ollama)

Configarr1.24.0

TRaSH Guide quality profile sync (CronJob)

Unpackerrv0.15.2

RAR archive extraction daemon

Byparr2.1.0

Cloudflare bypass proxy for indexers

MySQL8.4.8

Ghost Blog (dev + prod)

PostgreSQL18.3-alpine

Invoicetron

Meilisearchv1.41.0

Karakeep (full-text search)

SQLiteembedded

Uptime Kuma, Karakeep

PostgreSQL (Atuin)18.3-alpine

Atuin dedicated database

These services run outside Kubernetes but are part of the homelab ecosystem.

Proxmox VE9.1.4

Hypervisor (2 nodes: Dell 3090 + Topton N100)

OPNsense25.7.5

Firewall / router (Proxmox VM)

OpenMediaVault7.6.0

NAS / NFS storage

Immichv2.6.3

Photo management

TIMELINE

Release Timeline

67 releases in ~3 months β€” from empty repo to full production stack

67Total Releases
~3 moTime Span
31Major Milestones
FoundationInfrastructureMonitoringNetworkingCI/CDApplicationsAI/MLMediaSecurityBackupGitOps
v0.1.0Jan 12, 2026
Project Setup
Foundation
v0.2.0Jan 16, 2026
Kubernetes Cluster Bootstrap
Bootstrap
v0.3.0Jan 17, 2026
Storage Infrastructure
Storage
v0.4.0Jan 20, 2026
Observability Stack
Monitoring
v0.5.0Jan 20, 2026
Alerting (Discord + Email)
Alerting
v0.6.0Jan 22, 2026
Home Services
Workloads
v0.7.0Jan 23, 2026
Cloudflare Tunnel HA
Networking
v0.8.0Jan 24, 2026
GitLab CI/CD Platform
CI/CD
v0.10.0Jan 28, 2026
Portfolio CI/CD (3-env)
CI/CD
v0.11.0Feb 1, 2026
Ghost Blog
Applications
v0.14.0Feb 5, 2026
Invoicetron
Applications
v0.17.0Feb 9, 2026
Ghost Web Analytics
Enhancement
v0.20.0Feb 11, 2026
Ollama Local AI
AI/ML
v0.21.0Feb 12, 2026
Karakeep Migration
Applications
v0.22.0Feb 13, 2026
Tailscale Operator
Networking
v0.23.0Feb 18, 2026
ARR Stack Foundation
Media
v0.24.0Feb 20, 2026
Jellyfin Media Server
Media
v0.25.0Feb 22, 2026
Intel QSV Hardware Transcoding
Media
v0.26.0Feb 25, 2026
ARR Expansion (Bazarr, Seerr, Tdarr)
Media
v0.27.0Feb 28, 2026
UPS Monitoring (NUT)
Monitoring
v0.28.0Mar 3, 2026
Atuin Shell History
Applications
v0.29.0Mar 7, 2026
Vault + External Secrets
Security
v0.30.0Mar 10, 2026
Namespace & Pod Security
Security
v0.31.0Mar 13, 2026
Control Plane Hardening
Security
v0.32.0Mar 16, 2026
RBAC & Secrets Hardening
Security
v0.33.0Mar 19, 2026
Network Policies (132 CiliumNPs)
Networking
v0.34.0Mar 22, 2026
Velero Backup + Garage S3
Backup
v0.35.0Mar 25, 2026
Observability & Version Hardening
Monitoring
v0.36.0Mar 28, 2026
Pre-GitOps Validation
Enhancement
v0.37.0Apr 1, 2026
ArgoCD Installation
GitOps
v0.38.0Apr 4, 2026
GitOps Migration (Full ArgoCD)
GitOps
NETWORK

Network Segmentation

Enterprise-level network design with 8 isolated VLANs for security, performance, and separation of concerns. Each VLAN has custom firewall rules enforcing the principle of least privilege.

VLANNameSubnetPurposeSecurity
10LAN10.10.10.0/24Trusted wired devicesHigh (Full Access)
20TRUSTED_WIFI10.10.20.0/24Trusted wireless (SSID: Mugiwara)High (Full Access)
30SERVERS10.10.30.0/24Internal VMs and LXCsHigh (Backend)
40IOT10.10.40.0/24IoT devices (SSID: Mugiwara-IOT)Low (Internet-Only)
50DMZ10.10.50.0/24Public-facing services (Cloudflare Tunnel)Medium (DMZ)
60GUEST192.168.0.0/24Guest devices (SSID: Mugiwara-Guest)Low (Internet-Only)
69MGMT10.10.69.0/24Proxmox host managementCritical (Admin-Only)
70AP_TRUNK10.10.70.0/24OpenWRT AP managementMedium (AP Config)
πŸ›‘οΈ
Defense in Depth
Compromised IoT or Guest devices cannot access internal services (SERVERS VLAN) or management interfaces (MGMT VLAN). Firewall rules enforce strict inter-VLAN policies.
TECH STACK

Technology Stack

A modern DevOps stack running 24/7, organized by architectural layer.

πŸ“¦Layer 1: Hypervisor

  • β€’Proxmox VE 9.1.4 - Type-1 bare-metal hypervisor
  • KVM for VMs, LXC for containers, web-based management

πŸ”₯Layer 2: Firewall & Routing

  • β€’OPNsense 25.7.5 - Enterprise firewall/router
  • Dual WAN, 8 VLANs, IDS/IPS (Suricata), WireGuard VPN
  • β€’OpenWRT - Custom WiFi firmware

🌐Layer 3: DNS & Ad Blocking

  • β€’AdGuard Home - Network-wide ad blocking
  • DoH/DoT encryption, local DNS rewrites, DNSSEC validation

πŸ”€Layer 4: Reverse Proxy

  • β€’Cilium Gateway API - Kubernetes-native ingress
  • cert-manager + Let's Encrypt DNS-01, wildcard certs (*.k8s.rommelporras.com)

πŸš‡Layer 5: Tunneling & CDN

  • β€’Cloudflare Tunnel - Zero-trust tunnel (cloudflared)
  • Global CDN (200+ PoPs), DDoS protection, WAF, automatic SSL

☸️Layer 6: Applications

  • β€’Platform - ArgoCD, Vault, Velero, cert-manager, Garage S3
  • β€’Applications - Portfolio, Ghost, Invoicetron, Ollama, Karakeep, Atuin, Homepage
  • β€’Media Stack - Jellyfin, Sonarr, Radarr + 9 more
  • β€’Monitoring - Prometheus, Grafana, Loki, Uptime Kuma, 5 exporters
  • β€’DNS & Networking - AdGuard Home, Cloudflare Tunnel, Tailscale
  • β€’Non-K8s - Immich, OMV (on Proxmox)
🎯

The Meta-Project

You're looking at it right now.

This portfolio website (rommelporras.com) is not hosted on Vercel, Netlify, or AWS. It runs on the exact infrastructure described above.

1
Development
Local WSL2 environment β†’ git push to develop branch
2
CI Pipeline
GitLab Runner builds Docker image with DinD, pushes to registry
3
Deploy
Automated kubectl apply to K8s namespace (dev/staging/prod). Infrastructure services use ArgoCD GitOps instead.
4
Serve
nginx pod serves static files, Cilium Gateway API handles routing
5
Expose
Cloudflare Tunnel β†’ rommelporras.com (SSL, CDN, DDoS protection)
~3 min
Automated Pipeline Time
$0/mo
Hosting Cost
SKILLS

Skills Demonstrated

☸️Kubernetes / Container Orchestration

  • βœ“kubeadm cluster bootstrap (HA, stacked etcd)
  • βœ“Cilium CNI with eBPF kube-proxy replacement
  • βœ“Gateway API (replacing deprecated Ingress)
  • βœ“Longhorn distributed storage
  • βœ“RBAC and ServiceAccount security

πŸš€DevOps / SRE

  • βœ“GitFlow branching with environment promotion
  • βœ“Multi-environment CI/CD (dev β†’ staging β†’ prod)
  • βœ“Docker multi-stage builds
  • βœ“Kubernetes rolling deployments
  • βœ“ArgoCD GitOps continuous delivery

πŸ“ŠObservability

  • βœ“Prometheus metrics and alerting rules
  • βœ“Grafana dashboards
  • βœ“Loki centralized logging
  • βœ“Multi-channel alerting (Discord + Email)
  • βœ“S.M.A.R.T. disk monitoring (smartctl-exporter)
  • βœ“Version drift detection (version-checker)

🌐Networking

  • βœ“VLAN segmentation (8 VLANs)
  • βœ“Cilium NetworkPolicy (L3/L4/L7)
  • βœ“Cloudflare Tunnel (zero-trust)
  • βœ“TLS automation (cert-manager + Let's Encrypt)

⚑High Availability

  • βœ“3-node control plane with kube-vip VIP
  • βœ“etcd quorum (3-node)
  • βœ“Longhorn 2x replication
  • βœ“UPS with graceful shutdown

πŸ”’Security

  • βœ“Zero exposed ports (Cloudflare Tunnel)
  • βœ“CiliumNetworkPolicy for egress control
  • βœ“Environment-scoped RBAC
  • βœ“Pod Security Standards enforcement
  • βœ“132 CiliumNetworkPolicies
  • βœ“HashiCorp Vault secrets management
  • βœ“Weekly CIS benchmarks (kube-bench)

πŸ”„GitOps

  • βœ“ArgoCD app-of-apps pattern
  • βœ“Multi-source Applications
  • βœ“Self-heal and auto-sync
  • βœ“Declarative cluster state (Git as source of truth)

πŸ”Secrets Management

  • βœ“HashiCorp Vault (Raft storage, auto-unseal)
  • βœ“External Secrets Operator integration
  • βœ“Zero plaintext secrets in Git

πŸ’ΎBackup & DR

  • βœ“Velero cluster backup to self-hosted S3
  • βœ“Longhorn volume snapshots
  • βœ“CronJob database dumps + NFS offsite
COST COMPARISON

Cost Comparison

Enterprise infrastructure at homelab prices

☁️ AWS Equivalent

Region: ap-southeast-1 (Singapore)

  • 3x t3.xlarge EC2$345/mo
  • 1.5TB EBS gp3$144/mo
  • 2TB S3 Standard$60/mo
  • ALB + ACM$18/mo
  • EKS Control Plane$73/mo
  • ECR$5/mo
  • Secrets Manager$20/mo
  • RDS MySQL + PostgreSQL x2$55/mo
  • AWS Backup$25/mo
  • CodePipeline + CodeBuild$3/mo
  • CloudWatch + Logs$15/mo
Total~$763/mo

🏠 Homelab

  • Electricity (~110W)~$19/mo
  • Cloudflare (free tier)$0/mo
  • Tailscale (free personal)$0/mo
  • Domain~$1/mo

~110W covers all devices: 3 K8s nodes, Dell 3090 NAS, firewall, UPS, switch, 2 WiFi APs, 2 modems (β‚±13.82/kWh)

Total~$20/mo
$1,028
Hardware Investment
~1.4 months
Break-even
$743/mo
Monthly Savings
$8,916/yr
Annual Savings

Hardware: 3x Lenovo M80q (~$310) + Dell 3090 NAS (~$302) + Topton N100 firewall (~$164) + CyberPower UPS (~$149) + TP-Link Archer A6 (~$34) + TP-Link AX1500 (~$45) + LIANGUO 2.5GbE switch (~$24)

πŸ’‘

Why This Comparison Matters for DevOps Work

For Personal Projects: Running services at home eliminates monthly cloud bills while providing hands-on experience with production-grade infrastructure.

For Enterprise Work: Understanding cloud costs deeply helps me make informed infrastructure decisions for clients. Managing physical hardware, networking, and virtualization provides comprehensive knowledge that pure cloud-only engineers often lack.

Want to discuss my homelab setup?

I'm happy to talk about architecture decisions, security strategies, lessons learned, and how this experience translates to enterprise environments.

Last verified: April 2026