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.
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:
| Komponen | Teknologi | Fungsi |
|---|---|---|
| Backend | Go | API dan logika aplikasi |
| Frontend | React | Antarmuka pengguna |
| Database | PostgreSQL | Penyimpanan data |
| Container | Docker | Isolasi aplikasi |
| Orkestrasi | Docker Compose | Mengelola beberapa layanan |
| Sistem operasi | Armbian | Lingkungan Linux ARM64 |
| Reverse tunnel | Cloudflare Tunnel | Menghubungkan server ke internet |
| Backup cloud | Cloudflare R2 | Menyimpan 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:
| Komponen | VPS | STB |
|---|---|---|
| Hosting per bulan | Rp45.000 | Rp0 |
| Hosting per tahun | Rp540.000 | Rp0 |
| Estimasi listrik per bulan | Termasuk layanan VPS | ±Rp10.000 |
| Estimasi listrik per tahun | Termasuk 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
| Komponen | Hal yang perlu diperhatikan |
|---|---|
| SoC | Jenis chipset Amlogic |
| RAM | Kapasitas dan kompatibilitas DTB |
| eMMC | Kapasitas dan kondisi penyimpanan |
| USB | Dukungan boot dari USB |
| Ethernet | Kestabilan koneksi LAN |
| Adaptor | Tegangan, 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

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
- Pengunjung membuka domain aplikasi, misalnya
app.example.com. - Permintaan diterima oleh jaringan Cloudflare.
- Cloudflare meneruskan permintaan melalui koneksi Tunnel yang sudah dibuat oleh STB.
cloudflaredmenerima permintaan tersebut.- Permintaan diteruskan ke container aplikasi Go.
- Aplikasi Go berkomunikasi dengan PostgreSQL melalui jaringan internal Docker.
- File upload disimpan pada penyimpanan lokal STB.
- 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
- STB HG680P atau B860H.
- Adaptor daya yang sesuai.
- Komputer atau laptop Windows untuk proses flashing jika diperlukan.
- Kabel USB Male-to-Male yang kompatibel dengan perangkat.
- Flashdisk atau microSD minimal 16–32 GB.
- Kabel Ethernet LAN.
- Monitor HDMI untuk pemeriksaan awal.
- Koneksi internet.
SSD eksternal juga disarankan untuk penggunaan jangka panjang, khususnya jika database dan file upload terus bertambah.
Software
| Software | Fungsi |
|---|---|
| Amlogic USB Burning Tool | Flashing firmware |
| Armbian | Sistem operasi Linux |
| Rufus / Balena Etcher | Membuat media bootable |
| SSH Client | Mengakses server |
| Docker Engine | Menjalankan container |
| Docker Compose | Mengelola aplikasi |
| Cloudflare Dashboard | Konfigurasi domain dan Tunnel |
| rclone | Backup ke Cloudflare R2 |
Persiapan akun
Siapkan akun Cloudflare yang sudah mengelola domain.
Buat rencana subdomain:
app.example.comuntuk production.staging.example.comuntuk 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:
- Identifikasi revisi motherboard.
- Cari firmware unlock yang sesuai.
- Unduh dan instal Amlogic USB Burning Tool pada Windows.
- Instal driver USB Amlogic.
- Siapkan file firmware.
- Hubungkan STB ke komputer menggunakan koneksi USB yang sesuai.
- Masukkan perangkat ke mode flashing.
- Pilih firmware yang sudah disiapkan.
- Jalankan proses flashing.
- 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:
- Unduh image Armbian untuk chipset yang sesuai.
- Ekstrak file image jika masih berupa arsip.
- Masukkan flashdisk atau microSD ke komputer.
- Buka Rufus atau Balena Etcher.
- Pilih image Armbian.
- Pilih media penyimpanan.
- Mulai proses flashing.
- 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:
sudo armbian-configAtur zona waktu Indonesia:
sudo timedatectl set-timezone Asia/JakartaPeriksa arsitektur:
uname -mHasil yang diharapkan:
aarch64Periksa arsitektur paket:
dpkg --print-architectureHasil:
arm64Periksa RAM:
free -hPeriksa media penyimpanan:
lsblkdf -hSebaiknya 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
sudo apt updatesudo apt upgrade -y
sudo apt install -y ca-certificates curl6.2 Menambahkan repository Docker
Untuk Armbian berbasis Debian, gunakan repository resmi Docker:
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.ascTambahkan repository:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOFTypes: debURIs: https://download.docker.com/linux/debianSuites: $(. /etc/os-release && echo "$VERSION_CODENAME")Components: stableArchitectures: $(dpkg --print-architecture)Signed-By: /etc/apt/keyrings/docker.ascEOFJika menggunakan Armbian berbasis Ubuntu, gunakan repository Docker untuk Ubuntu, bukan repository Debian.
6.3 Menginstal Docker
sudo apt update
sudo apt install -y \docker-ce \docker-ce-cli \containerd.io \docker-buildx-plugin \docker-compose-pluginAktifkan Docker:
sudo systemctl enable --now dockerUji instalasi:
sudo docker run hello-worldPeriksa versi:
docker --versiondocker compose versionDokumentasi 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:
docker image inspect IMAGE_NAME \--format '{{.Architecture}}'Untuk aplikasi Go, proses kompilasi dapat dilakukan dengan target ARM64:
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 \go build -o app ./cmd/serverUntuk aplikasi React:
npm cinpm run buildProses build React sebaiknya dilakukan di komputer pengembang atau GitHub Actions. Hasilnya kemudian dimasukkan ke image aplikasi.
Alternatif lainnya adalah menggunakan Docker Buildx:
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=myappPOSTGRES_USER=myappuserPOSTGRES_PASSWORD=GANTI_DENGAN_PASSWORD_KUAT
TUNNEL_TOKEN=GANTI_DENGAN_CLOUDFLARE_TUNNEL_TOKENLindungi file:
chmod 600 .envJangan 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: bridgeGanti 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:
docker compose pulldocker compose up -dPeriksa status:
docker compose psPeriksa log:
docker compose logs -fLog aplikasi:
docker compose logs appLog database:
docker compose logs dbUntuk menghentikan layanan:
docker compose downHindari 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-productionSetelah 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:
| Pengaturan | Nilai |
|---|---|
| Subdomain | app |
| Domain | example.com |
| Service Type | HTTP |
| Service URL | http://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.comCloudflare 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 → CloudflareKoneksi 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-backupBuat 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.comCloudflare R2 mendukung S3-compatible API sehingga dapat digunakan melalui berbagai aplikasi dan tool yang mendukung protokol S3.
Dokumentasi:
9.2 Instalasi rclone
rclone adalah aplikasi command-line untuk mengelola file pada berbagai layanan cloud storage.
Instalasi:
sudo apt install rclone -yPeriksa:
rclone versionKonfigurasikan:
rclone configBuat remote baru dengan pengaturan:
Name: r2Storage: Amazon S3Provider: CloudflareAccess Key ID: R2_ACCESS_KEYSecret Access Key: R2_SECRET_KEYEndpoint: https://ACCOUNT_ID.r2.cloudflarestorage.comUntuk token dengan izin object-level tertentu, perhatikan konfigurasi tambahan no_check_bucket = true apabila diperlukan.
Dokumentasi:
9.3 Backup PostgreSQL
Gunakan pg_dump untuk membuat salinan database.
Contoh:
docker compose exec -T db \pg_dump -U myappuser -d myapp -Fc \> backup/database.dumpOpsi -Fc menghasilkan arsip custom yang dapat dipulihkan menggunakan pg_restore.
9.4 Backup folder upload
Buat arsip folder upload:
tar -czf backup/uploads.tar.gz uploads/Struktur backup:
backup/├── database.dump└── uploads.tar.gz9.5 Mengirim backup ke R2
Jalankan:
rclone copy backup/ \r2:home-server-backup/production/Periksa hasilnya:
rclone ls r2:home-server-backup/production/9.6 Menjadwalkan backup otomatis
Buat script:
sudo nano /usr/local/bin/backup-home-server.shContoh:
#!/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:
sudo chmod +x /usr/local/bin/backup-home-server.shBuka cron:
crontab -eTambahkan jadwal pukul 02.00 WIB:
0 2 * * * /usr/local/bin/backup-home-server.sh >> /var/log/home-backup.log 2>&1Untuk 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 ServiceDomain:
app.example.comStaging – B860H
B860H├── Armbian├── Docker Engine├── Docker Compose├── Go Application├── React Frontend├── PostgreSQL└── Cloudflare TunnelDomain:
staging.example.comGunakan 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:
- Developer mengubah kode aplikasi.
- Perubahan dikirim ke GitHub.
- GitHub Actions menjalankan proses testing.
- Docker Buildx membangun image untuk ARM64.
- Image dikirim ke container registry.
- STB staging mengunduh image terbaru.
- Aplikasi diuji pada staging.
- 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:
free -hMemeriksa CPU:
htopMemeriksa kapasitas disk:
df -hMemeriksa perangkat penyimpanan:
lsblkMemeriksa penggunaan resource container:
docker statsMemeriksa log aplikasi:
docker compose logs --tail=100Memeriksa temperatur CPU jika sensor tersedia:
cat /sys/class/thermal/thermal_zone0/tempSebagai 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.
| Faktor | VPS | Home Server STB |
|---|---|---|
| Biaya hosting | Berlangganan | Memanfaatkan perangkat bekas |
| Uptime | Bergantung SLA provider | Bergantung listrik dan internet |
| Keamanan jaringan | Infrastruktur provider | Dikelola sendiri |
| Keamanan fisik | Data center | Lingkungan rumah |
| Maintenance hardware | Provider | Pemilik |
| Backup | Sesuai layanan dan konfigurasi | Tanggung jawab pemilik |
| Skalabilitas | Lebih fleksibel | Terbatas hardware |
| Performa | Sesuai paket | Terbatas CPU dan RAM |
| Akses publik | Umumnya melalui IP publik | Dapat 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
- Armbian – Official Documentation
- Armbian Amlogic TV Box Community Builds
- Ophub – Armbian for Amlogic TV Boxes
- HG680P dan B860H Armbian – GitHub
- Docker Engine Installation
- Docker Compose Documentation
- Cloudflare Tunnel Documentation
- Cloudflare R2 Documentation
- Cloudflare R2 – rclone Integration
- PostgreSQL – pg_dump
- 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.