Journal — J. Choo Portfolio Ed.
in progress planned shipped > migrated

Jocelyn Choo

Solutions Engineer DevOps

runs a family media platform and a DevOps lab off three machines in the same rack.

Building a 3-node Proxmox homelab, GitOps pipelines, and infrastructure-as-code. Solutions Engineer by day, DevOps by night.

family-prod · uptime 99.9%
Jocelyn Choo pg. 01 — profile

Collection · pg. 02

Great things are yet to be done

Journal Entry

Currently a Solutions Engineer in Hong Kong, building homelab-infra on the side — a 3-node Proxmox cluster that's both my family's private cloud and a production-grade DevOps playground: Terraform, Ansible, K3s, ArgoCD, and CI/CD, all as code.

"Live like no one else today, so that you can live like no one else tomorrow." — Dave Ramsey

Experience 2+ yrs System Engineering 1+ yr Backend Development
Education B.Sc. Internet & Multimedia Technologies Associate of Arts in Computer Science

Collection · pg. 03

The toolchain

DevOps Tools

Core stack

  • Linux — experienced
  • Shell & Bash scripting — intermediate
  • Build tools — intermediate
  • Python — experienced
  • Docker — experienced
  • GitOps · ArgoCD — basic
CI/CD Automation

Pipeline & cloud

  • Jenkins — intermediate
  • AWS Cloud — intermediate
  • AWS EKS — basic
  • Kubernetes — basic
  • Terraform — experienced
  • Ansible + Vault — experienced
  • Prometheus · Grafana · Loki — proficient
  • GitLab (self-hosted CE) — intermediate
  • Networking — DNS (AdGuard) · reverse proxy (NPM) · managed VLANs (in progress)

Collection · pg. 04

homelab-infra

A 3-node Proxmox cluster, built in public — a family media platform and a DevOps playground, everything as code. Phases 1–2 are live: the family tier (Jellyfin, Nextcloud, media automation) after a zero-downtime cutover, and the core-infra tier — self-hosted DNS, reverse proxy, Prometheus/Grafana/Loki observability, and GitLab CE. Managed VLAN segmentation is in progress; the disposable K3s lab — torn down and rebuilt monthly — is next. If it isn't in git, it doesn't exist.

Proxmox VE 9 (3-node cluster) Terraform Ansible + Vault Docker Compose Cloudflare Tunnel Tailscale Prometheus · Grafana · Loki AdGuard DNS Nginx Proxy Manager GitLab CE PBS backups MikroTik managed VLANs K3s ArgoCD Jenkins · JCasC GitLab CI
GitHub Repo Design Decisions (ADRs)
Diagram

Architecture pg. 05

Homelab architecture diagram

Traffic enters through a Cloudflare Tunnel (no open ports) to Jellyfin and Nextcloud — the only public services; every admin plane is Tailscale-only. All three nodes are clustered: k8plus (family-prod), g11 (core-infra — DNS, reverse proxy, Prometheus/Grafana/Loki, GitLab), and the MacBook (disposable K3s lab — next). A MikroTik managed switch is in place for VLAN segmentation, with a JetKVM for out-of-band console.

○ planned

5-Minute Demo Video pg. 06

One git push travels through CI, security scanning (Trivy), and ArgoCD to a live Kubernetes rollout — recorded end to end.

✕ shipped

Live Proof pg. 07

Grafana Fleet Overview (system health) and a public Uptime Kuma status page (service uptime) are both live — real infra, watchable in real time.

Grafana Fleet Overview dashboard showing CPU, memory, filesystem, and network metrics across all six homelab hosts
Jellyfin status Nextcloud status Grafana status
View live status →
○ phase 5

The AWS Party Trick pg. 08

./demo.sh up stands up a mini k3s lab on AWS spot in ~4 minutes and prints a live URL; ./demo.sh down tears it down — a few cents per run, nothing left behind.

Collection · pg. 10

Let's build something

Index jocelyn_cys@jchoo.me LinkedIn GitHub