Situs ini dikemudikan dua tombol, seperti mesin pemiliknya. Membaca: j dan k menggulir, d dan u setengah layar, gg ke atas, G ke bawah, H dan L pindah jendela, ? membuka panduan. Spasi adalah kunci leader Neovim dan mengurus isi: Spasi lalu h beranda, r riset, p proyek, g gear, a tentang, / tag, atau Spasi lalu angka untuk melompat ke jendela bernomor itu. Home adalah prefix tmux dan mengurus jendela: Home lalu c membuka terminal, Home lalu & menutup jendela, Home lalu spasi ke jendela berikutnya. Saat fokus ada di papan ketik, h j k l memindahkan pilihan antar tombol dan Enter membukanya.

RisetR TentangA Gear — G untuk gear — papan ketik, terminal, editor, homelab.G
    ProyekP Tag — / seperti di vim: cari./
    ×
    Menu

    Homelab: GitOps yang Men-deploy Situs Ini

    Kubernetes k3d di rumah, dipapar ke internet lewat VPS dan terowongan WireGuard, dengan ArgoCD yang menarik perubahan dari Git. Termasuk halaman yang sedang Anda baca.

    Homelab ini menjalankan stack observability lengkap di atas Kubernetes (k3d), dengan paparan publik yang diperantarai VPS lewat WireGuard. Halaman yang sedang Anda baca ini di-deploy oleh mesin yang sama.

    Arsitektur

    Jalur request dirancang supaya homelab tidak pernah terhubung langsung ke internet publik. Cloudflare menangani TLS di edge, sebuah VPS jadi reverse proxy, dan terowongan WireGuard membawa trafiknya masuk:

    Internet → Cloudflare → VPS (Caddy) → terowongan WireGuard → Caddy homelab → NodePort k3d → Pod

    Yang perlu digarisbawahi: tidak ada port masuk yang dibuka di rumah. Terowongannya dibangun dari dalam ke luar. Yang punya alamat publik hanya VPS-nya, dan yang bisa dijangkau dari VPS hanya apa yang sengaja diarahkan ke sana.

    Seluruh trafik lewat proxy Caddy di level host, bukan DNAT. Ini bukan pilihan estetis — isolasi bridge Docker membuat DNAT tidak berperilaku seperti yang diharapkan, dan menempatkan Caddy di host jauh lebih mudah dipahami saat ada yang salah jam dua pagi.

    Bukan kubectl apply

    Tidak ada yang di-deploy dengan tangan. Repo homelab-platform yang jadi sumber kebenaran, dan ArgoCD yang menariknya masuk. Manifes aplikasi disusun dengan Kustomize (base + overlays/production), infrastrukturnya lewat Helm values, dan argocd/ berisi Application CRD-nya.

    Rantai deploy untuk situs ini berjalan begini:

    1. Push ke master di repo situs.
    2. GitHub Actions membangun image dan mendorongnya ke GHCR sebagai ghcr.io/arisros/arisjirat-site:latest.
    3. ArgoCD Image Updater memantau tag itu, mendeteksi digest baru, lalu menulis digest itu kembali ke repo homelab-platform — langsung ke overlays/production/kustomization.yaml.
    4. ArgoCD melihat commit baru di repo GitOps-nya dan menyinkronkan cluster.
    argocd-image-updater.argoproj.io/image-list: site=ghcr.io/arisros/arisjirat-site:latest
    argocd-image-updater.argoproj.io/site.update-strategy: digest
    argocd-image-updater.argoproj.io/write-back-method: git
    argocd-image-updater.argoproj.io/write-back-target: kustomization

    Strateginya digest, bukan latest, dan ini bagian yang penting. Tag latest yang bergerak berarti Kubernetes bisa menjalankan image yang berbeda dari yang tertulis di Git, dan tidak ada yang bisa memberi tahu kita image mana yang sebenarnya sedang jalan. Dengan digest yang di-pin balik ke Git, isi cluster selalu bisa dibaca dari sebuah commit. Rollback jadi git revert, bukan mengingat-ingat tag mana yang tadi dipakai.

    syncPolicy menyalakan selfHeal dan prune. Artinya perubahan yang saya lakukan langsung ke cluster akan dikembalikan sendiri oleh ArgoCD — yang terasa menjengkelkan tepat sekali, lalu setelah itu terasa melegakan.

    Stack

    LapisanTool
    OrkestrasiKubernetes via k3d
    GitOpsArgoCD + ArgoCD Image Updater
    ManifestKustomize (base + overlays), Helm untuk infrastruktur
    MonitoringPrometheus + Grafana + Alertmanager
    LoggingLoki + Grafana Alloy
    TracingTempo (OpenTelemetry)
    SecretsHashiCorp Vault
    Reverse proxyCaddy, di VPS dan di homelab
    VPNTerowongan WireGuard
    DNS / CDNCloudflare (mode proxy campuran)
    CI/CDGitHub Actions → GHCR → GitOps

    Monitoring

    Seluruh service mengirim telemetri ke Grafana, yang jadi muka tunggal untuk ketiga sinyal observability:

    • Dashboard — 35+ panel mencakup kondisi cluster, aplikasi, dan infrastruktur.
    • Alerting — dirutekan lewat Alertmanager ke Telegram.
    • SLO — kebijakan burn-rate yang menentukan kapan harus dibangunkan, bukan threshold mentah.

    Bidang observability-nya sendiri tetap privat, hanya bisa dijangkau lewat WireGuard. Grafana tidak punya alamat publik, dan memang tidak butuh.

    Apa saja yang jalan di sini

    Selain situs ini: demo deteksi jalan berlubang, bot notifikasi WhatsApp, runner absensi terjadwal, beberapa aplikasi internal, dan Vault yang menyimpan kredensialnya. Semuanya di-deploy lewat jalur yang sama — satu direktori di apps/, satu Application CRD, dan tidak ada langkah manual.

    id en
    rss gh in