Bikin Cloud Server pribadi dari STB bekas Indiho** untuk replace biaya bulanan Gdrive & iCloud: Bagian 2

Fachry Ansyah
9 min readDec 25, 2024

--

Setelah kita melewati proses pada bagian 1, di tahap ini kita bisa mulai melakukan instalasi untuk infrastruktur nya. Ada beberapa software yang nanti kita gunakan yaitu:
1. Docker
2. Nextcloud
3. openssh-server

1. Install openssh-server

Agar proses instalasi bisa dilakukan melalui laptop atau pc disini saya akan menginstall openssh-server terlebih dahulu dengan perintah “sudo apt install openssh-server”, kemudian kita bisa aktifkan daemon untuk openssh-server nya dengan perintah “sudo systemctl enable ssh”.

Jika openssh-server sudah terinstall kalian bisa remote melalui local network dengan cara pada umumnya “ssh root@<ip-lokal-dari-stb>”.

2. Instalasi Docker

Untuk melakukan instalasi docker mirip seperti ketika kita pakai ubuntu, kita bisa tambahkan GPG key dan update repository sebelum menginstall Docker dengan perintah berikut.

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Jika sudah dijalankan, kita bisa lanjut ke perintah selanjutnya untuk menginstall docker nya

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Jika sudah silahkan kalian running command “docker ps” untuk memastikan docker berhasil di install.

3. Mount HDD / SSD Dari external

Untuk mounting HDD / SSD kalian bisa langsung colok melalui port USB, dan jalankan perintah “lsblk” untuk mengecek apakah HDD / SSD External sudah masuk.

lsblk

Dari screenshot tersebut terlihat ada SSD saya yang sudah masuk di “sda7”, lalu kita membuat folder spesifik tempat dimana kita akan akses file dari HDD / SSD External yang kita mount. Disini saya taro di “/mnt/fahri-ssd”

sudo mkdir /mnt/fahri-ssd
sudo mount /dev/sda7 /mnt/fahri-ssd

Jika sudah, sekarang coba cek dengan “ls” ke folder tampat kalian mount HDD / SSD External.

4. Setup compose file nextcloud

Selanjutnya kita harus setup nextcloud, disini saya membuat path baru untuk menyimpan konfigurasi compose di ~/Infra/NextCloud dengan perintah “mkdir ~/Infra/NextCloud && cd ~/Infra/NextCloud”. Kemudian kita buat file docker-compose.yml di dalam folder tersebut. Kemudian berikut konfigurasi docker-compose.yml saya

version: '3.8'

services:
nextcloud:
image: nextcloud
container_name: nextcloud
restart: always
ports:
- 8080:80
environment:
- MYSQL_HOST=localhost
- MYSQL_PASSWORD=[PASSWORD ANDA]
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=[PASSWORD ANDA]
- REDIS_HOST=redis
volumes:
- nextcloud_data:/var/www/html
- /mnt/fahri-ssd:/mnt/fahri-ssd # Sesuaikan dengan path SSD / HDD External anda
depends_on:
- db
- redis

db:
image: mariadb
container_name: nextcloud-db
restart: always
environment:
- MYSQL_ROOT_PASSWORD=[PASSWORD ANDA]
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=[PASSWORD ANDA]
volumes:
- db_data:/var/lib/mysql

redis:
image: redis:alpine
container_name: nextcloud-redis
restart: always
command: redis-server --appendonly yes
volumes:
- redis_data:/data

traefik:
image: traefik
container_name: traefik
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=[EMAIL ANDA]"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_letsencrypt:/letsencrypt

volumes:
nextcloud_data:
db_data:
redis_data:
traefik_letsencrypt:

Jika sudah kita bisa jalankan perintah “docker compose up -d” agar container dibuat dan jalan di daemon.

5. Setting Trusted Domain di nextcloud

Sampai disini seharusnya kalian sudah bisa mengakses halaman nextcloud dari STB di port 8080

Error access untrusted domain

Namun jika kita akses akan menampilkan halaman error “Access through untrusted domain”. Disini kita harus atur konfigurasi trusted domain yang nantinya akan kita akses, dalam kasus ini saya ingin mengakses dari ip lokal 192.168.1.13 dan domain pribadi saya misalnya example.com.

Caranya kita akses ke dalam container nextcloud nya kemudian akses ke folder www/html/config/config.php, dengan perintah berikut.

# akses ke dalam container nextcloud
docker exec -it nextcloud /bin/bash

# masuk ke dalam folder config
cd config/

# lakukan edit ke file config.php
nano config.php

# jika terjadi error "bash: nano: command not found" lakukan ini
apt update && apt install nano -y

Kemudian cari array item dengan key “trusted_domains”, dan tambahkan ip lokal kalian dan domain yang ingin dipakai.

Trusted Domain config

Jika sudah, kembali ke browser lalu refresh halaman nextcloud. Seharusnya kalian sudah bisa login dengan akun admin yang sudah diatur di docker-compose.yml tadi.

6. Setting HDD / SSD External di nextcloud

Ada beberapa step untuk mounting HDD / SSD External kita ke nextcloud agar terbaca. Pertama colok HDD / SSD kalian ke STB lalu cek apakah HDD / SSD sudah masuk atau belum dengan perintah “lsblk”

Disk yang terkoneksi di STB

Disini terlihat sudah ada SSD saya yang berukuran 256gb dengan nama “sda”, disini saya akan mounting pada partisi “sda7”. Namun sebelum kita mounting kita harus membuat dulu mount pointnya.

Disini saya akan membuat mount point di “/mnt/fahri-ssd” caranya sederhana tinggal jalankan printah “mkdir /mnt/fahri-ssd”. Jika mount point sudah dibuat kita bisa langsung mounting SSD pada partisi “sda7” tadi dengan perintah “mount /dev/sda7 /mnt/fahri-ssd”

“sda7” adalah nama partisi yang saya miliki, tiap device mungkin bisa berbeda nama

Lalu kita coba “ls” pada folder “/mnt/fahri-ssd”, seharusnya akan menampilkan isi folder dan files yang ada di SSD tersebut.

Isi folder dan files yang berada pada ssd external

Sampai sini kita sudah berhasil mounting HDD / SSD External kita namun nextcloud belum bisa mengaksesnya, kita harus atur Permission, Mount volume pada docker dan mengatur di pengaturan nextcloud nya.

Pertama kita atur permission mount point tadi agar menjadi “www-data”, disini mount point saya adalah “/mnt/fahri-ssd” so kita atur permissionnya dengan perintah “sudo chown -R 33:33 /mnt/fahri-ssd”, pastikan sesuaikan dengan mount point kalian. Jika kita “ls /mnt/fahri-ssd” maka akan terlihat permissionnya menjadi www-data.

www-data

Langkah kedua kita pastikan mount volume pada “docker-compose.yml” sudah sesuai.

Mount volumes docker

Pastikan mount point yang tadi kalian buat sudah didefinisikan di volumes “docker-compose.yml”. Jika belum definisikan lalu restart container kalian dengan perintah “docker compose stop && docker compose up -d”.

Langkah ketiga kita bisa atur ke dashboard nextcloudnya, lakukan login lalu ke administration settings.

Administration settings

Kemudian cari menu disebelah kiri dengan nama “System” klik menu tersebut, lalu cari section dengan nama “Disks”, terlihat disini SSD saya belum terdeteksi hanya Sdcard yang terbaca di nextcloud.

Hanya SDCard yang terdeteksi

Agar HDD / SSD External kita terdeteksi nextcloud kita buka menu “Apps”, lalu navigasi ke “Disabled Apps”, Kemudian cari “External Storage” lalu klik “enable” disebelah kanan.

Menu Apps
Disabled apps
Enable External storage support

Jika sudah di enable maka kita bisa kembali lagi ke “Administration settings”. Di dalam menu Administration settings akan muncul menu baru yaitu “External Storage” klik menu tersebut, Lalu tambahkan SSD / HDD External kita seperti ini.

External Storage

Disini kita bisa menambahkan berbagai external storage selain dari Hard Drive kita bisa menambahkan juga dengan format lain seperti S3, FTP, WebDav, SFTP, dll. Untuk “Folder name” terserah kalian, itu adalah nama yang nantinya akan tampil di file manager nextcloud.

Jika sudah di simpan, coba cek kembali bagian menu ‘System” dan scroll ke section “Disks” apakah SSD / HDD External kalian sudah terdeteksi atau belum. Jika belum coba lakukan restart pada container kalian dengan perintah “docker compose stop && docker compose up -d”. Jika sudah refresh halaman tadi.

SSD Terdeteksi

Seharusnya SSD / HDD External kalian sudah terdeteksi seperti ini. dan kalian bisa navigasi ke File manager nextcloud untuk mulai upload atau melihat isi file didalam drive kalian.

Eitss disini saya mengalami masalah, dimana file yang ada di SSD External saya tidak muncul apapun di nextcloud, seharusnya ada 2 folder “Fahri” & “Najmi” tapi di nextcloud tidak tampil sama sekali.

Folder Fahri-SSD kosong

Jika kalian mengalami hal yang serupa seperti saya, coba jalankan perintah ini.

$ docker exec -u www-data nextcloud php /var/www/html/occ files:scan --all -vvv

Fungsi perintah itu untuk me-refresh atau me-scan ulang folder dan files yang ada didrive external kita.

Output running re-scan file

Jika sudah dirunning perintah tersebut lakukan refresh dihalaman nextcloud, dan seharusnya folder dan files kita sudah terbaca dan bisa diakses di nextcloud.

7. Setup Cloudflare Tunnel & Custom Domain

Langkah terakhir kita akan membuat STB Server ini agar bisa diakses di internet. Sebelum memulai pastikan kalian memiliki domain yang aktif dan memiliki akun cloudflare.

Langkah pertama kita setting nameserver pada domain kita menggunakan nameserver dari cloudflare. Klik “Add Domain” lalu masukkan nama domain kita, kemudian klik “Next” dan pilih “Free plan”.

Kemudian update nameservers kalian pada domain provider kalian menggunakan nameservers dari cloudflare.

Jika kita sudah setting nameservers nya biasanya membutuhkan waktu 1x24jam untuk perubahan nameservers, tunggu dan coba cek berkala pada cloudflare, pastikan statusnya sudah “Active”

Langkah selanjutnya kita setting tunneling dengan mengakses ke menu “Zero Trust” > “Networks” > “Tunnels”

Kemudian jika menu tersebut sudah terbuka kita bisa menambahkan tunnel baru dengan klik “Create a tunnel” > “Select Cloudflared” dan masukkan nama Tunnel kalian (bebas).

Selanjutnya kita install cloudflared pada STB dengan menjalankan perintah yang ditampilkan di website cloudflare, sebelumnya pilih OS Debian dengan arsitektur “arm64”

Perintah install cloudflared

Jika sudah diinstall kita “configure” kembali tunnel yang telah kita buat, lalu tambahkan “Public Hostname”, lalu kalian bisa masukkan subdomain, domain, path sesuai yang kalian inginkan. Untuk port pastikan “:8080” karena itu adalah port yang kita gunakan pada container nextcloud

Public Hostname

Sampai disini pastikan Tunnel yang kita buat sudah berstatus “Healthy”, terakhir silahkan akses subdomain kalian, Jika muncul error Untrusted domain silahkan ulangi langkah No. 5 dan masukkan ke daftar whitelist subdomain kalian.

Healthy Tunnel

Dan berikut STB Server saya yang sudah online 😁😁

Online STB Server

Dengan mengikuti langkah-langkah dalam tutorial ini, Kita dapat mengubah STB IndiHome menjadi server Nextcloud yang berfungsi penuh. Proses ini memungkinkan Kita untuk memanfaatkan perangkat STB yang tidak terpakai untuk kebutuhan penyimpanan cloud pribadi. Selain hemat biaya, solusi ini juga memberikan kontrol penuh atas data Kita, memastikan privasi dan keamanan. Pastikan untuk melakukan konfigurasi dengan teliti dan menjaga pembaruan sistem secara rutin agar server Nextcloud Kita tetap optimal dan aman.

Namun, jika ada kekurangan atau kesalahan dalam penjelasan, Saya mohon maaf yang sebesar-besarnya. Kritik dan saran sangat saya harapkan untuk meningkatkan kualitas tulisan saya. Terima kasih telah membaca, selamat Mencoba!

--

--

Fachry Ansyah
Fachry Ansyah

Written by Fachry Ansyah

A Person behind software. reach me on instagram @fachry.stark

Responses (1)