· Teknologi

Sulap STB IndiHome Bekas Menjadi Home Server: Hosting Go, React, dan PostgreSQL dengan Armbian, Docker, dan Cloudflare

Panduan mengubah STB IndiHome HG680P dan B860H menjadi home server ARM64 untuk menjalankan aplikasi Go, React, PostgreSQL, Docker Compose, Cloudflare Tunnel, dan backup otomatis ke Cloudflare R2.

Sulap STB IndiHome Bekas Menjadi Home Server: Hosting Go, React, dan PostgreSQL dengan Armbian, Docker, dan Cloudflare

VPS bukan satu-satunya pilihan untuk menjalankan aplikasi web. Perangkat Android TV Box atau Set-Top Box (STB) bekas IndiHome ternyata bisa dimanfaatkan kembali sebagai server Linux yang mampu menjalankan aplikasi, database, dan berbagai layanan pendukung.

Dengan kombinasi Armbian, Docker Compose, Cloudflare Tunnel, dan Cloudflare R2, STB dapat berfungsi sebagai home server yang bisa diakses melalui domain publik tanpa membutuhkan IP publik, DDNS, maupun port forwarding pada router.

Pendekatan ini menarik untuk developer yang memiliki aplikasi berskala kecil, dashboard internal, API pribadi, website portofolio, atau lingkungan staging yang tidak membutuhkan infrastruktur VPS dengan spesifikasi tinggi.

Salah satu implementasi yang menarik menggunakan STB Fiberhome HG680P dan ZTE B860H dengan RAM 2 GB. Perangkat pertama menjalankan aplikasi production, sedangkan perangkat kedua berfungsi sebagai staging server.

Dalam pengalaman yang menjadi dasar pembahasan ini, aplikasi yang sebelumnya di-hosting pada VPS Rp45.000 per bulan berhasil dipindahkan ke STB. Biaya hosting tahunan Rp540.000 dapat dihemat, dengan estimasi biaya listrik sekitar Rp10.000 per bulan.

Artikel ini membahas konsep, persiapan perangkat, instalasi sistem operasi, konfigurasi Docker, deployment aplikasi, Cloudflare Tunnel, hingga mekanisme backup otomatis.

1. Fungsi dan Tujuan: Mengubah STB Menjadi Home Server

Home server adalah komputer yang digunakan untuk menjalankan layanan secara mandiri di lingkungan rumah atau jaringan pribadi.

Berbeda dengan Android TV Box yang digunakan untuk menonton televisi dan streaming, STB yang sudah dipasang sistem operasi Linux dapat menjalankan berbagai layanan server seperti komputer Linux pada umumnya.

Beberapa fungsi yang dapat dijalankan:

  • Web server: Menjalankan website dan aplikasi berbasis web.
  • Application server: Menjalankan backend menggunakan Go, Node.js, Python, atau bahasa pemrograman lainnya.
  • Database server: Menyimpan data menggunakan PostgreSQL, MariaDB, atau database lainnya.
  • File server: Menyimpan file upload, dokumen, gambar, dan aset aplikasi.
  • Development server: Menjadi lingkungan pengujian aplikasi sebelum dirilis ke production.
  • Backup server: Menyimpan salinan data dan mengirimkannya ke penyimpanan cloud.

Tujuan utamanya adalah mengurangi biaya infrastruktur sekaligus memanfaatkan kembali perangkat elektronik yang sudah tidak digunakan.

Contoh aplikasi yang dapat dijalankan

Dalam implementasi yang dibahas, server menjalankan aplikasi dengan teknologi berikut:

KomponenTeknologiFungsi
BackendGoAPI dan logika aplikasi
FrontendReactAntarmuka pengguna
DatabasePostgreSQLPenyimpanan data
ContainerDockerIsolasi aplikasi
OrkestrasiDocker ComposeMengelola beberapa layanan
Sistem operasiArmbianLingkungan Linux ARM64
Reverse tunnelCloudflare TunnelMenghubungkan server ke internet
Backup cloudCloudflare R2Menyimpan cadangan data

Contoh penggunaannya adalah dashboard internal, halaman publik untuk testimoni, undangan digital, dan aplikasi pribadi dengan jumlah pengguna terbatas.

Estimasi penghematan biaya

Perbandingan biaya berdasarkan pengalaman implementasi:

KomponenVPSSTB
Hosting per bulanRp45.000Rp0
Hosting per tahunRp540.000Rp0
Estimasi listrik per bulanTermasuk layanan VPS±Rp10.000
Estimasi listrik per tahunTermasuk layanan VPS±Rp120.000
Penghematan tahunan-±Rp420.000

Angka penghematan sekitar Rp415.000–Rp420.000 per tahun merupakan estimasi, bukan hasil pengukuran konsumsi listrik menggunakan wattmeter.

Biaya domain, internet rumah, perangkat tambahan, SSD, dan penyimpanan cloud belum termasuk perhitungan tersebut.

2. Mengenal Hardware STB IndiHome

Tidak semua STB Android memiliki kemampuan yang sama. Kompatibilitas sangat bergantung pada chipset, revisi motherboard, bootloader, RAM, dan konfigurasi penyimpanan.

Dua perangkat yang digunakan dalam implementasi ini adalah:

Fiberhome HG680P

HG680P merupakan Android TV Box berbasis chipset Amlogic S905X. Perangkat dengan RAM 2 GB dapat dimanfaatkan sebagai server aplikasi ringan setelah menjalankan sistem operasi Linux yang sesuai.

ZTE B860H

B860H merupakan STB Android yang memiliki beberapa revisi hardware. Varian berbasis Amlogic S905X juga dapat menjalankan Armbian melalui image komunitas yang sesuai.

Kedua perangkat tersebut tidak boleh dianggap identik hanya berdasarkan nama model. Pastikan chipset dan revisi perangkat sebelum memilih firmware.

Spesifikasi yang perlu diperiksa

KomponenHal yang perlu diperhatikan
SoCJenis chipset Amlogic
RAMKapasitas dan kompatibilitas DTB
eMMCKapasitas dan kondisi penyimpanan
USBDukungan boot dari USB
EthernetKestabilan koneksi LAN
AdaptorTegangan, arus, dan kondisi daya

RAM 2 GB tergolong terbatas untuk menjalankan beberapa container sekaligus. Karena itu, proses build aplikasi sebaiknya dilakukan di komputer pengembang atau CI/CD, bukan langsung pada STB.

Untuk database, batasi penggunaan memori dan perhatikan kebutuhan penyimpanan.

3. Memahami Arsitektur Home Server

Arsitektur Home Server STB Bekas

Sebelum melakukan instalasi, penting untuk memahami bagaimana komponen-komponen tersebut saling terhubung.

Arsitektur ini menggunakan Cloudflare Tunnel sebagai penghubung antara aplikasi di rumah dan pengunjung dari internet.

Alur koneksi

  1. Pengunjung membuka domain aplikasi, misalnya app.example.com.
  2. Permintaan diterima oleh jaringan Cloudflare.
  3. Cloudflare meneruskan permintaan melalui koneksi Tunnel yang sudah dibuat oleh STB.
  4. cloudflared menerima permintaan tersebut.
  5. Permintaan diteruskan ke container aplikasi Go.
  6. Aplikasi Go berkomunikasi dengan PostgreSQL melalui jaringan internal Docker.
  7. File upload disimpan pada penyimpanan lokal STB.
  8. Backup database dan file dikirim secara berkala ke Cloudflare R2.

Dengan arsitektur ini, aplikasi tidak perlu membuka port secara langsung ke internet.

Mengapa tidak membutuhkan IP publik?

Pada hosting konvensional, server biasanya menerima koneksi dari internet melalui alamat IP publik.

Cloudflare Tunnel bekerja dengan mekanisme berbeda. Server di rumah membuat koneksi keluar menuju jaringan Cloudflare. Koneksi tersebut dipertahankan agar Cloudflare dapat meneruskan permintaan pengunjung ke layanan internal.

Konsekuensinya:

  • Tidak membutuhkan IP publik.
  • Tidak membutuhkan DDNS.
  • Tidak membutuhkan port forwarding.
  • Tidak perlu mempublikasikan port aplikasi ke LAN.
  • Domain tetap dapat menggunakan HTTPS melalui Cloudflare.

Dokumentasi: https://developers.cloudflare.com/tunnel/

4. Persiapan Perangkat dan Software

Sebelum instalasi, siapkan kebutuhan berikut.

Hardware

  1. STB HG680P atau B860H.
  2. Adaptor daya yang sesuai.
  3. Komputer atau laptop Windows untuk proses flashing jika diperlukan.
  4. Kabel USB Male-to-Male yang kompatibel dengan perangkat.
  5. Flashdisk atau microSD minimal 16–32 GB.
  6. Kabel Ethernet LAN.
  7. Monitor HDMI untuk pemeriksaan awal.
  8. Koneksi internet.

SSD eksternal juga disarankan untuk penggunaan jangka panjang, khususnya jika database dan file upload terus bertambah.

Software

SoftwareFungsi
Amlogic USB Burning ToolFlashing firmware
ArmbianSistem operasi Linux
Rufus / Balena EtcherMembuat media bootable
SSH ClientMengakses server
Docker EngineMenjalankan container
Docker ComposeMengelola aplikasi
Cloudflare DashboardKonfigurasi domain dan Tunnel
rcloneBackup ke Cloudflare R2

Persiapan akun

Siapkan akun Cloudflare yang sudah mengelola domain.

Buat rencana subdomain:

  • app.example.com untuk production.
  • staging.example.com untuk staging.

Siapkan juga bucket Cloudflare R2 untuk menyimpan backup.

Gunakan kredensial khusus dengan hak akses terbatas pada bucket backup.

5. Instalasi Armbian pada STB

Armbian adalah distribusi Linux berbasis Debian atau Ubuntu yang dirancang untuk perangkat ARM dan berbagai single-board computer.

Dengan Armbian, STB dapat menjalankan lingkungan Linux tanpa antarmuka Android TV.

Namun, perlu diperhatikan bahwa banyak STB Android bukan perangkat yang didukung secara resmi oleh Armbian. Dukungan untuk model tertentu berasal dari komunitas dan dapat berbeda menurut versi image serta revisi hardware.

Referensi:

5.1 Identifikasi chipset

Periksa tipe STB dan chipset yang digunakan.

HG680P dan sebagian B860H menggunakan Amlogic S905X, tetapi revisi perangkat harus tetap diperiksa.

Jangan mengunduh firmware atau DTB hanya berdasarkan nama casing.

5.2 Mengganti firmware bawaan

Pada implementasi HG680P dan B860H yang dibahas, firmware IndiHome bawaan tidak dapat langsung digunakan untuk boot Armbian.

Diperlukan firmware yang sesuai agar perangkat dapat menjalankan sistem operasi Linux dari media eksternal.

Proses umumnya:

  1. Identifikasi revisi motherboard.
  2. Cari firmware unlock yang sesuai.
  3. Unduh dan instal Amlogic USB Burning Tool pada Windows.
  4. Instal driver USB Amlogic.
  5. Siapkan file firmware.
  6. Hubungkan STB ke komputer menggunakan koneksi USB yang sesuai.
  7. Masukkan perangkat ke mode flashing.
  8. Pilih firmware yang sudah disiapkan.
  9. Jalankan proses flashing.
  10. Tunggu sampai proses selesai.

Pada beberapa perangkat, mode flashing memerlukan kombinasi tombol power dan koneksi USB. Ada pula perangkat yang membutuhkan metode khusus pada motherboard.

Peringatan: Flashing memiliki risiko membuat perangkat tidak dapat boot. Jangan melakukan short pin berdasarkan tebakan dan jangan menghapus bootloader tanpa panduan yang sesuai dengan revisi perangkat.

5.3 Membuat bootable Armbian

Setelah firmware siap:

  1. Unduh image Armbian untuk chipset yang sesuai.
  2. Ekstrak file image jika masih berupa arsip.
  3. Masukkan flashdisk atau microSD ke komputer.
  4. Buka Rufus atau Balena Etcher.
  5. Pilih image Armbian.
  6. Pilih media penyimpanan.
  7. Mulai proses flashing.
  8. Tunggu hingga selesai.

Jika image komunitas membutuhkan DTB khusus, salin file DTB yang benar ke direktori yang ditentukan oleh petunjuk image.

DTB atau Device Tree Blob berisi informasi perangkat keras yang digunakan kernel Linux untuk mengenali komponen STB.

Salah memilih DTB dapat menyebabkan Ethernet, Wi-Fi, USB, atau bahkan proses boot tidak berfungsi.

5.4 Boot pertama

Masukkan media bootable ke STB, hubungkan Ethernet, kemudian nyalakan perangkat.

Setelah berhasil boot, lakukan konfigurasi awal:

  • Buat password baru.
  • Atur hostname.
  • Konfigurasikan jaringan.
  • Aktifkan SSH.
  • Atur zona waktu.

Untuk konfigurasi sistem yang mendukung Armbian:

Terminal window
sudo armbian-config

Atur zona waktu Indonesia:

Terminal window
sudo timedatectl set-timezone Asia/Jakarta

Periksa arsitektur:

Terminal window
uname -m

Hasil yang diharapkan:

aarch64

Periksa arsitektur paket:

Terminal window
dpkg --print-architecture

Hasil:

arm64

Periksa RAM:

Terminal window
free -h

Periksa media penyimpanan:

Terminal window
lsblk
df -h

Sebaiknya jalankan sistem dari flashdisk atau microSD terlebih dahulu. Jangan langsung memindahkan sistem ke eMMC sebelum memastikan seluruh perangkat berfungsi stabil.

6. Instalasi Docker Engine dan Docker Compose

Docker digunakan untuk menjalankan aplikasi dalam container. Setiap layanan dapat memiliki dependensi dan konfigurasi sendiri tanpa harus memasang semuanya langsung pada sistem operasi.

Docker Compose digunakan untuk mengelola beberapa container melalui satu file konfigurasi.

6.1 Memperbarui sistem

Terminal window
sudo apt update
sudo apt upgrade -y
sudo apt install -y ca-certificates curl

6.2 Menambahkan repository Docker

Untuk Armbian berbasis Debian, gunakan repository resmi Docker:

Terminal window
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL \
https://download.docker.com/linux/debian/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Tambahkan repository:

Terminal window
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Jika menggunakan Armbian berbasis Ubuntu, gunakan repository Docker untuk Ubuntu, bukan repository Debian.

6.3 Menginstal Docker

Terminal window
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

Aktifkan Docker:

Terminal window
sudo systemctl enable --now docker

Uji instalasi:

Terminal window
sudo docker run hello-world

Periksa versi:

Terminal window
docker --version
docker compose version

Dokumentasi resmi:

6.4 Memastikan kompatibilitas ARM64

Ini merupakan bagian penting dalam penggunaan STB sebagai server.

Komputer pengembang biasanya menggunakan prosesor AMD64 atau x86-64, sedangkan STB menggunakan ARM64.

Image Docker yang dibuat hanya untuk AMD64 tidak otomatis dapat berjalan secara native di STB.

Untuk memeriksa arsitektur image:

Terminal window
docker image inspect IMAGE_NAME \
--format '{{.Architecture}}'

Untuk aplikasi Go, proses kompilasi dapat dilakukan dengan target ARM64:

Terminal window
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 \
go build -o app ./cmd/server

Untuk aplikasi React:

Terminal window
npm ci
npm run build

Proses build React sebaiknya dilakukan di komputer pengembang atau GitHub Actions. Hasilnya kemudian dimasukkan ke image aplikasi.

Alternatif lainnya adalah menggunakan Docker Buildx:

Terminal window
docker buildx build \
--platform linux/arm64 \
-t username/myapp:latest \
--push .

Dengan cara tersebut, STB cukup mengunduh image yang sudah dikompilasi untuk ARM64.

7. Menyiapkan Aplikasi dengan Docker Compose

Setelah Docker aktif, siapkan direktori proyek.

Contoh:

home-server/
├── docker-compose.yml
├── .env
├── uploads/
├── postgres/
└── backup/

Keterangan:

  • docker-compose.yml: konfigurasi container.
  • .env: variabel environment.
  • uploads/: penyimpanan file aplikasi.
  • postgres/: penyimpanan database.
  • backup/: file backup sementara.

7.1 Membuat file environment

Buat file .env:

POSTGRES_DB=myapp
POSTGRES_USER=myappuser
POSTGRES_PASSWORD=GANTI_DENGAN_PASSWORD_KUAT
TUNNEL_TOKEN=GANTI_DENGAN_CLOUDFLARE_TUNNEL_TOKEN

Lindungi file:

Terminal window
chmod 600 .env

Jangan memasukkan file ini ke repositori GitHub.

7.2 Membuat Docker Compose

Contoh konfigurasi tiga layanan utama:

services:
app:
image: username/myapp:latest
container_name: myapp
restart: unless-stopped
environment:
DB_HOST: db
DB_PORT: 5432
DB_NAME: ${POSTGRES_DB}
DB_USER: ${POSTGRES_USER}
DB_PASSWORD: ${POSTGRES_PASSWORD}
UPLOAD_DIR: /app/uploads
volumes:
- ./uploads:/app/uploads
depends_on:
db:
condition: service_healthy
networks:
- internal
db:
image: postgres:16
container_name: myapp-db
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./postgres:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"
interval: 10s
timeout: 5s
retries: 5
networks:
- internal
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
TUNNEL_TOKEN: ${TUNNEL_TOKEN}
depends_on:
- app
networks:
- internal
networks:
internal:
driver: bridge

Ganti nama image dan konfigurasi environment sesuai aplikasi sebenarnya. Aplikasi Go harus mendengarkan koneksi pada alamat 0.0.0.0 di dalam container dan menggunakan port yang sesuai dengan konfigurasi Tunnel.

7.3 Memahami konfigurasi

Ada beberapa hal penting dalam konfigurasi tersebut.

Pertama: PostgreSQL tidak membuka port publik.

Tidak ada konfigurasi ports pada service database. Database hanya dapat diakses melalui jaringan internal Docker.

Kedua: aplikasi tidak membuka port ke LAN.

Service aplikasi juga tidak menggunakan ports. Cloudflared mengaksesnya melalui jaringan internal Docker.

Ketiga: file tetap tersimpan di STB.

Folder uploads dan postgres dipasang sebagai bind mount agar data tetap ada ketika container dibuat ulang.

Keempat: seluruh layanan dapat dikelola bersama.

Docker Compose memudahkan proses menjalankan, menghentikan, dan memperbarui aplikasi.

7.4 Menjalankan container

Dari direktori proyek:

Terminal window
docker compose pull
docker compose up -d

Periksa status:

Terminal window
docker compose ps

Periksa log:

Terminal window
docker compose logs -f

Log aplikasi:

Terminal window
docker compose logs app

Log database:

Terminal window
docker compose logs db

Untuk menghentikan layanan:

Terminal window
docker compose down

Hindari menjalankan docker compose down -v secara sembarangan karena opsi tersebut dapat menghapus volume yang menyimpan data.

8. Menghubungkan Server ke Internet dengan Cloudflare Tunnel

Cloudflare Tunnel menjadi komponen utama yang memungkinkan aplikasi di rumah diakses dari internet tanpa membuka port router.

8.1 Membuat Tunnel

Masuk ke Cloudflare Dashboard.

Buka menu Networking, kemudian Tunnels.

Buat Tunnel baru dan pilih konektor Cloudflared.

Berikan nama, misalnya:

home-production

Setelah Tunnel dibuat, Cloudflare menyediakan token untuk menghubungkan perangkat.

Simpan token tersebut sebagai rahasia dan jangan membagikannya.

8.2 Menambahkan domain aplikasi

Buat Published Application Route dengan konfigurasi:

PengaturanNilai
Subdomainapp
Domainexample.com
Service TypeHTTP
Service URLhttp://app:8080

Ganti port 8080 sesuai port yang digunakan backend Go.

Hostname app mengacu pada nama service Docker Compose, sehingga Cloudflared dapat mengakses aplikasi melalui jaringan internal.

8.3 Memahami alur HTTPS

Pengunjung mengakses:

https://app.example.com

Cloudflare menangani koneksi HTTPS pada sisi publik.

Sementara itu, komunikasi dari Cloudflared menuju aplikasi dapat menggunakan HTTP melalui jaringan internal Docker.

Pastikan aplikasi tetap menerapkan autentikasi, otorisasi, validasi input, dan pengamanan session. HTTPS dari Cloudflare bukan pengganti keamanan aplikasi.

8.4 Mengapa tidak membutuhkan port forwarding?

Pada server konvensional, router harus menerima koneksi dari luar dan meneruskannya ke perangkat server.

Cloudflare Tunnel menggunakan koneksi yang dimulai dari dalam jaringan rumah:

STB → Cloudflare

Koneksi tersebut dipertahankan sehingga Cloudflare dapat meneruskan permintaan pengunjung tanpa menghubungi IP publik STB.

Dengan demikian, tidak diperlukan:

  • IP publik.
  • DDNS.
  • Port forwarding.
  • Port aplikasi yang terbuka ke LAN.

Pastikan koneksi keluar dari jaringan rumah tidak memblokir koneksi yang dibutuhkan Cloudflare Tunnel.

Dokumentasi:

9. Penyimpanan Lokal dan Backup Cloudflare R2

Salah satu keputusan menarik dalam implementasi ini adalah tidak langsung memindahkan seluruh file upload ke object storage.

Awalnya, penyimpanan file direncanakan menggunakan Cloudflare R2 dengan mekanisme presigned URL.

Namun, setelah dilakukan pengukuran, jumlah file upload ternyata hanya 27 file dengan total ukuran sekitar 4 MB.

Untuk kapasitas sekecil itu, memindahkan seluruh mekanisme penyimpanan ke object storage berpotensi menambah kompleksitas kode tanpa manfaat yang sebanding.

Akhirnya, file tetap disimpan pada disk STB, sedangkan R2 digunakan untuk backup.

Pendekatan ini menunjukkan bahwa arsitektur penyimpanan sebaiknya mengikuti kebutuhan nyata aplikasi, bukan sekadar menggunakan teknologi yang sedang populer.

9.1 Membuat bucket R2

Masuk ke Cloudflare Dashboard dan buka R2 Object Storage.

Buat bucket:

home-server-backup

Buat API token khusus dengan izin yang diperlukan untuk mengelola objek pada bucket tersebut.

Catat:

  • Account ID.
  • Access Key ID.
  • Secret Access Key.

Endpoint R2 menggunakan format:

https://ACCOUNT_ID.r2.cloudflarestorage.com

Cloudflare R2 mendukung S3-compatible API sehingga dapat digunakan melalui berbagai aplikasi dan tool yang mendukung protokol S3.

Dokumentasi:

R2 Clodflare API (S3)

9.2 Instalasi rclone

rclone adalah aplikasi command-line untuk mengelola file pada berbagai layanan cloud storage.

Instalasi:

Terminal window
sudo apt install rclone -y

Periksa:

Terminal window
rclone version

Konfigurasikan:

Terminal window
rclone config

Buat remote baru dengan pengaturan:

Name: r2
Storage: Amazon S3
Provider: Cloudflare
Access Key ID: R2_ACCESS_KEY
Secret Access Key: R2_SECRET_KEY
Endpoint: https://ACCOUNT_ID.r2.cloudflarestorage.com

Untuk token dengan izin object-level tertentu, perhatikan konfigurasi tambahan no_check_bucket = true apabila diperlukan.

Dokumentasi:

rclone cloudflare

9.3 Backup PostgreSQL

Gunakan pg_dump untuk membuat salinan database.

Contoh:

Terminal window
docker compose exec -T db \
pg_dump -U myappuser -d myapp -Fc \
> backup/database.dump

Opsi -Fc menghasilkan arsip custom yang dapat dipulihkan menggunakan pg_restore.

9.4 Backup folder upload

Buat arsip folder upload:

Terminal window
tar -czf backup/uploads.tar.gz uploads/

Struktur backup:

backup/
├── database.dump
└── uploads.tar.gz

9.5 Mengirim backup ke R2

Jalankan:

Terminal window
rclone copy backup/ \
r2:home-server-backup/production/

Periksa hasilnya:

Terminal window
rclone ls r2:home-server-backup/production/

9.6 Menjadwalkan backup otomatis

Buat script:

Terminal window
sudo nano /usr/local/bin/backup-home-server.sh

Contoh:

#!/bin/bash
set -euo pipefail
cd /opt/home-server
mkdir -p backup
DATE=$(date +%Y-%m-%d_%H-%M-%S)
docker compose exec -T db \
pg_dump -U myappuser -d myapp -Fc \
> "backup/database-${DATE}.dump"
tar -czf "backup/uploads-${DATE}.tar.gz" uploads/
rclone copy backup/ \
r2:home-server-backup/production/

Aktifkan:

Terminal window
sudo chmod +x /usr/local/bin/backup-home-server.sh

Buka cron:

Terminal window
crontab -e

Tambahkan jadwal pukul 02.00 WIB:

0 2 * * * /usr/local/bin/backup-home-server.sh >> /var/log/home-backup.log 2>&1

Untuk production, tambahkan kebijakan retensi lokal dan cloud, enkripsi backup yang berisi data sensitif, serta notifikasi ketika proses backup gagal.

Jangan hanya memeriksa apakah file berhasil diunggah. Lakukan uji pemulihan database dan file secara berkala.

10. Menggunakan STB Kedua sebagai Staging Server

Dalam implementasi ini, STB kedua yaitu B860H digunakan sebagai staging server.

Staging adalah lingkungan pengujian yang dibuat menyerupai production, tetapi tidak digunakan oleh pengguna umum.

Tujuannya adalah memastikan perubahan aplikasi berjalan dengan baik sebelum diterapkan ke server utama.

Contoh pembagian:

Production – HG680P

HG680P
├── Armbian
├── Docker Engine
├── Docker Compose
├── Go Application
├── React Frontend
├── PostgreSQL
├── Cloudflare Tunnel
└── Backup Service

Domain:

app.example.com

Staging – B860H

B860H
├── Armbian
├── Docker Engine
├── Docker Compose
├── Go Application
├── React Frontend
├── PostgreSQL
└── Cloudflare Tunnel

Domain:

staging.example.com

Gunakan database, kredensial, dan konfigurasi yang terpisah. Jangan menggunakan database production langsung untuk pengujian.

11. CI/CD: Rencana Deployment dari GitHub ke STB

Setelah production dan staging berjalan, tahap berikutnya adalah mengotomatisasi proses deployment.

CI/CD merupakan singkatan dari Continuous Integration dan Continuous Delivery/Deployment.

Tujuannya adalah mengurangi pekerjaan manual ketika aplikasi mengalami pembaruan.

Alur yang dapat digunakan:

  1. Developer mengubah kode aplikasi.
  2. Perubahan dikirim ke GitHub.
  3. GitHub Actions menjalankan proses testing.
  4. Docker Buildx membangun image untuk ARM64.
  5. Image dikirim ke container registry.
  6. STB staging mengunduh image terbaru.
  7. Aplikasi diuji pada staging.
  8. Jika berhasil, image yang sama diterapkan pada production.

Dengan pendekatan ini, proses kompilasi tidak membebani CPU STB.

Image yang sudah diuji juga dapat digunakan kembali pada production sehingga mengurangi kemungkinan perbedaan lingkungan deployment.

Untuk sistem yang lebih matang, deployment perlu dilengkapi dengan health check, version tagging, rollback, dan pengamanan kredensial.

12. Monitoring dan Pemeliharaan Home Server

Home server tetap membutuhkan pemantauan secara berkala.

Beberapa perintah Linux yang berguna:

Memeriksa penggunaan RAM:

Terminal window
free -h

Memeriksa CPU:

Terminal window
htop

Memeriksa kapasitas disk:

Terminal window
df -h

Memeriksa perangkat penyimpanan:

Terminal window
lsblk

Memeriksa penggunaan resource container:

Terminal window
docker stats

Memeriksa log aplikasi:

Terminal window
docker compose logs --tail=100

Memeriksa temperatur CPU jika sensor tersedia:

Terminal window
cat /sys/class/thermal/thermal_zone0/temp

Sebagai contoh, nilai 65000 biasanya menunjukkan temperatur sekitar 65°C.

Perhatikan kapasitas RAM

Dengan RAM hanya 2 GB, STB tidak memiliki banyak ruang untuk menjalankan database dan aplikasi secara bersamaan.

Beberapa langkah optimasi:

  • Batasi penggunaan memori PostgreSQL.
  • Hindari menjalankan service yang tidak diperlukan.
  • Gunakan image aplikasi yang ringan.
  • Lakukan build di luar STB.
  • Atur rotasi log Docker.
  • Pantau penggunaan swap dan OOM killer.

Perhatikan umur eMMC

Penyimpanan internal STB umumnya menggunakan eMMC.

Database yang aktif dan file upload dapat menghasilkan aktivitas tulis secara terus-menerus. Dalam jangka panjang, kondisi ini dapat mempercepat keausan media penyimpanan.

Jika penggunaan meningkat, pertimbangkan memindahkan database dan file upload ke SSD eksternal.

Pastikan SSD memiliki koneksi dan suplai daya yang memadai.

13. Risiko dan Keterbatasan Home Server

Meskipun hemat biaya, home server tidak otomatis menjadi pengganti VPS untuk semua jenis aplikasi.

Ada beberapa risiko yang perlu diperhitungkan.

13.1 Ketergantungan pada listrik dan internet

Jika listrik padam, STB ikut mati.

Jika internet rumah terputus, aplikasi tidak dapat diakses dari luar.

Cloudflare Tunnel tidak dapat mengatasi kedua masalah tersebut.

Solusi tambahan dapat berupa UPS, koneksi internet cadangan, dan mekanisme pemulihan service otomatis.

13.2 Keamanan fisik

Server berada di lingkungan rumah sehingga perangkat dapat tersentuh, dipindahkan, atau dimatikan oleh orang lain.

Berbeda dengan data center yang memiliki pengamanan fisik dan kontrol akses khusus, pemilik home server bertanggung jawab atas keamanan perangkatnya sendiri.

13.3 Maintenance

Ketika perangkat mengalami kerusakan, pemilik harus menangani sendiri proses pemeriksaan, perbaikan, dan pemulihan.

Jika sedang bekerja, bepergian, atau tidak berada di rumah, gangguan server bisa berlangsung lebih lama.

13.4 Keterbatasan performa

CPU ARM dan RAM 2 GB cukup untuk aplikasi ringan, tetapi tidak ideal untuk beban besar, banyak pengguna bersamaan, atau pemrosesan data berat.

Skalabilitasnya juga lebih terbatas dibandingkan VPS yang dapat ditingkatkan spesifikasinya sesuai kebutuhan.

14. Home Server vs VPS: Mana yang Lebih Tepat?

Keduanya memiliki kelebihan dan kekurangan.

FaktorVPSHome Server STB
Biaya hostingBerlanggananMemanfaatkan perangkat bekas
UptimeBergantung SLA providerBergantung listrik dan internet
Keamanan jaringanInfrastruktur providerDikelola sendiri
Keamanan fisikData centerLingkungan rumah
Maintenance hardwareProviderPemilik
BackupSesuai layanan dan konfigurasiTanggung jawab pemilik
SkalabilitasLebih fleksibelTerbatas hardware
PerformaSesuai paketTerbatas CPU dan RAM
Akses publikUmumnya melalui IP publikDapat melalui Cloudflare Tunnel

Bagaimana dengan SLA uptime 99,9%?

Jika sebuah layanan memiliki SLA 99,9%, secara matematis toleransi downtime-nya sekitar:

  • 43,8 menit per bulan.
  • 8,76 jam per tahun.

Namun, SLA merupakan komitmen provider sesuai ketentuan kontrak. Hal itu tidak berarti seluruh komponen aplikasi dijamin selalu tersedia.

Gangguan aplikasi, database, konfigurasi, maupun jaringan tetap dapat menyebabkan downtime.

Home server tidak memiliki jaminan SLA seperti layanan VPS komersial.

Kapan menggunakan STB?

Home server cocok untuk:

  • Dashboard internal.
  • Aplikasi pribadi.
  • Website portofolio.
  • Staging dan development.
  • API dengan pengguna terbatas.
  • Aplikasi eksperimen.
  • Layanan yang masih dapat mentoleransi downtime.

VPS lebih tepat untuk:

  • E-commerce dengan transaksi aktif.
  • Sistem pembayaran.
  • Aplikasi bisnis yang membutuhkan ketersediaan tinggi.
  • Layanan dengan SLA.
  • Sistem yang membutuhkan redundansi dan skalabilitas.

Pilihan terbaik tidak selalu mengganti VPS sepenuhnya. Kombinasi VPS dan home server dapat menjadi pendekatan yang lebih realistis.

15. Kesimpulan

STB IndiHome bekas seperti HG680P dan B860H dapat dimanfaatkan menjadi home server berbasis ARM64 dengan menggunakan Armbian dan Docker.

Kombinasi Docker Compose, PostgreSQL, Cloudflare Tunnel, dan Cloudflare R2 memungkinkan developer menjalankan aplikasi web secara mandiri tanpa harus membuka port router atau menyewa VPS untuk setiap proyek kecil.

Penghematan biaya memang menjadi daya tarik utama, tetapi ada tanggung jawab tambahan yang harus diperhitungkan, terutama ketersediaan listrik, kestabilan internet, keamanan fisik, perawatan perangkat, dan backup.

Untuk aplikasi yang tidak terlalu kritis, home server dapat menjadi solusi ekonomis dan sekaligus sarana belajar infrastruktur Linux, container, jaringan, dan deployment.

Namun, untuk aplikasi production yang harus selalu tersedia, VPS atau infrastruktur cloud dengan redundansi tetap menjadi pilihan yang lebih masuk akal.

Intinya, STB bekas bukan sekadar perangkat televisi yang sudah tidak terpakai. Dengan konfigurasi yang tepat, perangkat tersebut bisa menjadi server Linux kecil yang cukup berguna untuk kebutuhan developer dan proyek self-hosting.

Referensi dan Dokumentasi

  1. Armbian – Official Documentation
  2. Armbian Amlogic TV Box Community Builds
  3. Ophub – Armbian for Amlogic TV Boxes
  4. HG680P dan B860H Armbian – GitHub
  5. Docker Engine Installation
  6. Docker Compose Documentation
  7. Cloudflare Tunnel Documentation
  8. Cloudflare R2 Documentation
  9. Cloudflare R2 – rclone Integration
  10. PostgreSQL – pg_dump
  11. PostgreSQL – pg_restore

Artikel ini merupakan panduan implementasi berdasarkan skenario home server HG680P dan B860H. Firmware, DTB, konfigurasi boot, serta kompatibilitas hardware dapat berbeda menurut revisi perangkat. Selalu lakukan pengujian sebelum menerapkan konfigurasi pada server production.

Artikel terkait

Lihat semua »