[OK] loading post: setup-vps-5-dollar.html
[OK] language: id · read: ~7 min
~/blog/setup-vps-5-dollar.md ● ID
~ / blog / setup-vps-5-dollar

Setup VPS $5 untuk Eksperimen Pribadi

Box kecil bukan halangan. Dengan disiplin dan beberapa alat yang tepat, Anda bisa dapat server pribadi untuk main-main, nulis, dan experiment.

14 JUN 2026 by hendra 7 min baca tags: ops tutorial server id

Umumnya saya menyebut VPS saya bangundwir@medan. Bukan karena Medannya beneran, tapi karena saya sering merasa sedang menyambungkan diri ke terminal dengan suara kipas kecil di kamar. Box-nya 1 vCPU, 1 GB RAM, 25 GB SSD. Harganya sekitar 5 USD per bulan. Cukup untuk hampir semua yang saya perlukan di luar kerja kantoran.

1. Pilih provider, lalu pakai SSH key dari hari pertama

Saya pakai provider yang punya datacenter di Asia Tenggara — latency ke Indonesia penting buat saya. Tapi provider mana pun sebenarnya sama saja, yang penting: matikan password login di hari pertama.

# di mesin lokal
ssh-keygen -t ed25519 -C "hendra@bangun"
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<IP-VPS>

# di VPS: edit /etc/ssh/sshd_config
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes

systemctl restart sshd

Setelah ini, jangan pernah izinkan login password lagi. Bruteforce akan datang dalam hitungan jam, dan Anda tidak akan mau berurusan dengan itu.

2. Firewall: hanya izinkan yang perlu

Default policy DROP, lalu buka 22, 80, dan 443 saja. Itu saja cukup untuk 90% kasus.

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose

3. fail2ban: kurir pos yang ngeh

Setelah dua minggu VPS saya online, log SSH menunjukkan ratusan ribu percobaan login dari berbagai negara. fail2ban membaca log itu, dan kalau ada IP yang gagal 5 kali dalam 10 menit, IP itu dibanned 1 jam. Tidak sempurna, tapi cukup untuk membuat bot pindah ke target lain.

apt install -y fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl enable --now fail2ban
fail2ban-client status sshd

4. Docker, tapi pakai image kecil

Untuk 1 GB RAM, saya hampir tidak pernah install apa pun di host secara langsung. Semuanya via container, dan saya selalu pilih image Alpine atau distroless kalau ada. Image nginx:alpine cuma 40 MB. Image node default 350 MB — itu musuh kita di box kecil.

# docker-compose.yml yang saya pakai untuk blog
version: "3.8"
services:
  web:
    image: nginx:alpine
    ports: ["80:80", "443:443"]
    volumes:
      - ./site:/usr/share/nginx/html:ro
      - ./conf:/etc/nginx/conf.d:ro
    restart: unless-stopped

5. Monitoring: cukup dua hal

Saya tidak pasang Prometheus di box 1 GB — itu bunuh diri. Sebagai gantinya:

  • btop di sesi SSH, real-time.
  • Cron job yang kirim ping ke healthchecks.io setiap 5 menit. Kalau ping putus 3x berturut, saya dapat notifikasi Telegram.

Itu sudah lebih dari cukup. Sisanya, kalau Anda butuh, berarti VPS Anda sudah harus upgrade ke 10 USD.

6. Backup: yang penting bukan cadangannya, tapi restorability-nya

Backup yang tidak pernah Anda coba restore adalah backup palsu. Setiap bulan saya download snapshot VPS ke laptop, lalu saya spin up di VirtualBox untuk memastikan isinya masih bisa diboot. Kalau tidak bisa, saya perbaiki prosesnya sebelum hal buruk terjadi.


Cheat sheet urutan eksekusi

  1. Setup SSH key, disable password login.
  2. Update OS, set timezone, set hostname.
  3. Install ufw + fail2ban.
  4. Install docker + docker-compose.
  5. Pasang monitoring minimal (btop + healthchecks.io).
  6. Backup mingguan + test restore bulanan.

Selamat bereksperimen. Kalau VPS Anda kena hack, jangan panik — itu bagian dari kurikulum.

— hendra, dengan kipas laptop berputar lebih kencang dari biasanya.

EOF // EOF // copied, deployed, hope it boots