Self-Hosted Runner 24/7
Laptop yang tertutup mematikan agent-mu. Kalau kamu serius dengan pola "kerjakan segalanya via Telegram", ada satu mesin yang harus selalu hidup: runner β tempat bridge chat, cron agent, dan loop panjang tinggal. Pilihannya: VPS murah (region Singapura untuk latensi Indonesia), atau homelab (mini PC/NUC di rumah).
:::warning Ancaman utamanya bukan hacker canggih Ancaman utamanya adalah agent-mu sendiri yang salah paham instruksi di mesin yang punya akses ke semuanya. Desain runner dengan asumsi: suatu saat agent akan menjalankan perintah yang tidak kamu maksudkan. :::
# sebagai root di VPS baru (Ubuntu 24.04)
adduser agent --disabled-password
usermod -aG docker agent # hanya kalau perlu container
# JANGAN beri agent akses sudo
Semua proses agent berjalan sebagai user agent yang tidak bisa sudo. Kredensial deploy production TIDAK disimpan di user ini β deploy tetap lewat CI (lihat playbook deploy).
Checkpoint: sudo -u agent sudo whoami gagal dengan "not in the sudoers file".
Tailscale membuat jaringan privat antar perangkatmu (HP, laptop, VPS) tanpa membuka port publik:
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --ssh
# lalu matikan SSH publik:
# /etc/ssh/sshd_config β ListenAddress <IP_TAILSCALE_VPS>
Checkpoint: SSH dari HP/laptop via IP Tailscale berhasil; nmap dari internet publik tidak melihat port 22.
tmux cocok untuk eksperimen, systemd untuk produksi β restart otomatis saat crash dan boot:
[Unit]
Description=Telegram agent bridge
After=network-online.target
[Service]
User=agent
WorkingDirectory=/home/agent/bridge
ExecStart=/home/agent/bridge/start.sh
Restart=on-failure
RestartSec=10
# guardrail resource:
MemoryMax=4G
CPUQuota=200%
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now agent-bridge
Sesi kerja interaktif yang panjang tetap enak di tmux: tmux new -s kerja β jalankan agent CLI β detach β dan kamu bisa attach lagi dari HP via SSH kapan pun.
Checkpoint: systemctl status agent-bridge menunjukkan active (running); sudo reboot β service hidup lagi sendiri dan bridge merespons di Telegram.
Untuk agent yang berjalan tanpa pengawasan (cron, webhook), tambah satu lapisan: agent bekerja di dalam container yang hanya melihat repo dan tool yang dibutuhkan.
docker run --rm \
-v /home/agent/repos/proyek:/workspace \
-w /workspace \
-e ANTHROPIC_API_KEY \
--network bridge \
--memory 2g --pids-limit 256 \
node:22-bookworm \
npx -y @anthropic-ai/claude-code -p "jalankan triage harian sesuai AGENTS.md" \
--dangerously-skip-permissions
Prinsipnya: mode "skip permissions" yang membuat agent otonom benar-benar produktif hanya boleh dipakai di dalam sandbox β blast radius-nya dinding container, bukan seluruh server. (Pola sama berlaku untuk opencode run / omp -p.)
Checkpoint: dari dalam container, agent tidak bisa membaca /home/agent/.ssh maupun repo lain.
Runner yang mati diam-diam = agent yang "bolos" tanpa kabar. Minimum yang layak:
- Heartbeat: cron tiap jam kirim "β runner hidup, disk 62%, N job hari ini" ke channel Telegram khusus β atau pakai healthchecks.io yang justru alert saat ping TIDAK datang.
- Log terpusat: semua output agent ke file per-hari (
/var/log/agent/YYYY-MM-DD.log) supaya kamu bisa audit "apa saja yang dia lakukan semalam".
Checkpoint: matikan service secara sengaja β kamu menerima alert dalam beberapa menit tanpa membuka laptop.
VPS vs homelab, singkat sajaβ
| VPS ($5β10/bln) | Homelab (mini PC) | |
|---|---|---|
| Uptime & jaringan | β stabil | Tergantung listrik/ISP rumah |
| Data & privasi | Data di datacenter pihak ketiga | β semuanya di rumah |
| Biaya jangka panjang | Berulang selamanya | Sekali beli (Β± harga 1β2 tahun VPS) |
| Cocok untuk | Mulai hari ini, bridge + cron ringan | Build berat, model lokal, banyak container |
Mulai dari VPS; pindah ke homelab kalau kebutuhan compute atau privasi menuntut.
Lanjut keβ
Runner yang hidup 24/7 membuat biaya berjalan 24/7 juga β Kontrol Biaya.