🧠 Homelab Overview
A local-first infrastructure built for privacy and performance. Production and development environments are fully isolated on separate nodes, each with independent Traefik routing for maximum resilience.
Infrastructure Overview
- 4 nodes with reserved internal IPs
- Ubuntu 24.04 LTS (Noble Numbat) on all nodes
- Docker Engine 28.3.x in standalone mode
- Portainer CE 2.24.1 for centralized management
- Tailscale VPN for secure remote access
- Local network isolation - no public ports exposed
Hardware Fleet
The cluster consists of 4 nodes with varied capabilities:
johnsen-ci-01
Portainer Manager
AZW MINI S • Intel N100 • 4 cores • 16GB DDR4
johnsen-ci-02
Development / Previews
AZW MINI S • Intel N100 • 4 cores • 16GB DDR4
johnsen-ci-03
Production
AZW MINI S • Intel N100 • 4 cores • 16GB DDR4
johnsen-ci-04
CI Runners
HP Elite SFF 600 G9 • Intel i9-12900K • 24 threads • 64GB DDR5
GitHub Actions
Self-hosted runners for CI/CD workflows:
- 6 runners on ci-04 only (mini PCs host services)
- Organization-level runners (johnsenai org)
- Ephemeral containers for security
- Playwright pre-installed with browser cache
- Labels:
self-hosted, johnsen-ci-04, linux, x64 - Image:
myoung34/github-runner:ubuntu-noble
GitHub Actions
Docker
Playwright
Container Platform
- Docker Engine 28.3.x on all nodes
- Standalone mode (no Swarm orchestration)
- 28 containers running across the cluster
- Compose-based stack deployments via Portainer
- Registries: Docker Hub + GitHub Container Registry
Docker
Standalone
BuildKit
Management Platform
Portainer CE 2.24.1 provides centralized control:
- Server on ci-01, agents on ci-02/03/04
- Web UI on port 9443 (HTTPS)
- Agent communication on port 9001
- Compose stack deployment (standalone mode)
- Container logs, stats, and monitoring
Portainer CE
TLS
Agents
Cluster Resources
Aggregate capacity across the cluster:
- Total CPU: 28 cores / 36 threads
- Total RAM: 112 GB
- Total Storage: 3.8 TB
- GitHub Runners: 6 concurrent
- Network: 1 Gbps per node
High Performance
Key Services
Isolated environments with independent routing:
- Traefik - Reverse proxy (ci-02 + ci-03)
- Production Site - johnsen.ai (ci-03)
- Preview Dashboard - dev.johnsen.ai (ci-02)
- Stats Agents - Metrics collection (all nodes)
- Tailscale - VPN access (ci-01, ci-02, ci-03)
- BuildKit - Docker image builds (ci-04)
Traefik
Tailscale
Network & Access
- Tailscale VPN required for all access
- No public ports exposed to internet
johnsen.ai→ ci-03 (production)dev.johnsen.ai→ ci-02 (previews)- Firewall: UFW with SSH/Docker ports only
Tailscale
UFW