UPS untuk Homelab: Kenapa Server Lama Mat karena Listrik Mati
Kenapa UPS Penting untuk Homelab?
Listrik padam adalah kejadian paling sering di daerah Indonesia. Padam 5-30 detik saja sudah cukup untuk merusak dua hal:
- Filesystem yang sedang ditulis tidak selesai, sehingga container atau database rusak.
- Supply daya mini PC atau server langsung mati, sehingga tidak ada proses graceful shutdown.
Efeknya bukan cuma downtime. SQLite yang rusak di Nextcloud berarti database foto keluarga harus dibangun ulang. Itu berjam-jam kerja kalau backup tidak jalan.
UPS menyelesaikan dua masalah sekaligus: memberi waktu untuk shutdown dengan rapi, dan menunda mati kalau padamannya cuma sebentar.
Hitung Kebutuhan Daya
Ukur dulu, jangan menebak. Semua service yang jalan bersamaan, lalu cari consumption di docker:
# total consumption semua container yang jalan
docker stats --no-stream --format '{{.Name}}\t{{.MemUsage}}'
Untuk daya, cara paling akurat adalah baca dari UPS itu sendiri lewat upsc. Tapi untuk estimasi awal, pakai aturan ini:
| Beban | Kebutuhan kontinu |
|---|---|
| Mini PC N100 + 2 SSD + 1 HDD idle | 25-35 W |
| Mini PC + Docker 8 container aktif | 40-55 W |
| Raspberry Pi 5 + NVMe + 1 HDD | 12-18 W |
| NAS 2 bay idle | 25-30 W |
| NAS 2 bay full aktif + 2 HDD | 45-60 W |
Jumlahkan, lalu kalikan dengan 1.5 untuk headroom saat HDD nyala atau proses ramai. Contoh: mini PC dengan 8 container = 55 W, dikali 1.5 = 82 W. UPS 600-800 VA sudah aman, karena VA itu berbasis faktor daya (PF 0.6-0.8 di UPS murah).
Rumus sederhana:
# watt yang dibutuhkan
NEED=$(echo "55 * 1.5" | bc)
# VA minimum = watt / power factor
echo "scale=0; $NEED / 0.7" | bc
Dengan PF 0.7, 82 W butuh sekitar 117 VA. Bulatkan ke kelipatan 100, jadi pilih 300-500 VA. Untuk mini PC, UPS 600 VA sudah tidak berlebihan.
Pilih Tipe UPS
Ada dua kategori yang lazim:
| Tipe | Cara kerja | Kelebihan | Kekurangan |
|---|---|---|---|
| Standby (offline) | Switch ke baterai saat padam | Murah, pindah cepat | Tidak ada regulate tegangan normal |
| Line interactive | Regulasi tegangan selalu aktif | Tegangan lebih stabil, cocok PLN naik-turun | Sedikit lebih mahal |
| Double conversion | Selalu lewat inverter | Paling bersih | Mahal, panas besar |
Untuk Indonesia, line interactive hampir selalu pilihan terbaik. PLN sering naik-turun tegangan (brownout) sebelum benar-benar padam, dan UPS line interactive sudah menanganinya sebelum baterai ikut aktif. Standby butuh baterai ikut bekerja untuk tegangan yang fluktuatif, jadi batterainya habis lebih cepat.
Yang Perlu Dicek Saat Beli
- Runtime nyata, bukan angka marketing. Pabrikan menulis “60 menit” dengan beban 10 W. Untuk beban 80 W, realistisnya 10-15 menit. Cukup untuk shutdown, tidak cukup untuk menunggu PLN kembali.
- Jumlah outlet. UPS murah sering cuma 2-3 outlet. Kalau kamu butuh 5 colokan untuk router, switch, mini PC, dan NAS, cari yang punya 6 atau 8.
- Komunikasi USB atau network. UPS tanpa komunikasi tidak bisa shutdown otomatis. Port USB sudah cukup untuk setup rumahan, tidak perlu network card.
- Baterai bisa diganti. UPS apa pun akan mati dalam 2-4 tahun karena baterai Li-ion atau SLA mengendap. Kalau baterainya bisa diganti, biaya hanya sekitar $30-60, bukan Rp700rb untuk unit baru.
Contoh merk yang umum di Indonesia dan mudah didapat: APC BX950MI, Prolink PRO700, ICA UPS3100. Semua line interactive dengan port USB.
Konfigurasi Shutdown Otomatis dengan NUT
NUT (Network UPS Tools) adalah daemon Linux standar untuk berkomunikasi dengan UPS lewat USB. Fungsinya: saat baterai Low, UPS memberi perintah shutdown ke host sebelum habis.
# install NUT
sudo apt update && sudo apt install -y nut-client nut-server
# cek apakah UPS terdeteksi
sudo upsc -l
# contoh output:
# pdu
# ups@localhost
Cek status lengkap:
sudo upsc ups@localhost
# battery.charge: 100
# battery.runtime: 1800
# ups.status: OL # OL = on line, OB = on battery
Buat konfigurasi di /etc/nut/ups.conf:
[ups]
driver = usbhid-ups
port = auto
desc = "UPS rumah"
Lalu set mode server di /etc/nut/ups.conf bagian atas dengan MODE = standalone. Aktifkan service:
sudo systemctl enable --now nut-server
sudo systemctl enable --now nut-monitor
Terakhir, hook shutdown supaya UPS membaca status. Di /etc/ups/upsmon.conf:
MONITOR ups@localhost 1 master admin primary
POWERDOWNFLAG /etc/killpower
Buat file flag-nya (perlu executable, karena akan dipakai untuk halt):
sudo touch /etc/killpower && sudo chmod 755 /etc/killpower
sudo systemctl restart nut-client
Uji dengan Aman
Jangan tunggu PLN padam sungguhan untuk menguji. Pakai upsdrvctl atau simulator:
# simulasi padam (baterai mulai dipakai)
sudo upsdrvctl -t # trim
# atau paksa on battery sementara
sudo upscmd ups@localhost test.battery.start
Untuk uji shutdown end-to-end dengan aman, jalankan di server yang tidak kritis dulu. Pastikan service Docker ikut berhenti dengan rapi:
# tambahkan pre-shutdown agar container berhenti bersih
sudo systemctl edit docker
[Service]
ExecStopPre=/bin/systemctl stop docker
Dengan hook ini, urutan shutdown jadi: NUT memberi tahu → systemd stop Docker (container tutup dengan rapi) → systemd halt. Database punya waktu menutup file dengan benar.
Tips Lainnya
- Jauhkan dari panas. Baterai aus lebih cepat di ruang panas. Letakkan UPS di ruangan sejuk, bukan bersebelahan dengan server yang panas.
- Ganti baterai tepat waktu. Kalau runtime tiba-tiba turun drastis dari 30 menit ke 5 menit, baterai sudah drop. Ganti, jangan tunggu mati total.
- Tidak perlu UPS besar. Banyak orang membeli UPS 1500 VA untuk beban 80 W dan hanya membuang Rp500rb. Yang penting ada komunikasi USB dan runtime minimal 5 menit untuk semua beban penuh.
- Backup tetap wajib. UPS melindungi dari padamnya listrik, bukan dari kebakaran, banjir, atau gangguan listrik lain. Tetap punya backup terjadwal.
Ringkasan
- Hitung kebutuhan daya dari container yang jalan, kalikan 1.5 untuk headroom.
- Pilih line interactive, bukan standby, untuk kondisi PLN Indonesia.
- Pastikan ada port USB supaya bisa shutdown otomatis.
- Pakai NUT dengan flag ExecStopPre di Docker supaya container tutup rapi.
- Uji dengan simulasi, jangan menunggu PLN padam.
Kalau sudah terpasang,Artikel berikutnya yang menarik adalah mengukur consumption per container dari grafik, supaya bisa tahu service mana yang boros listrik.