Blog ini sekarang bertenaga surya

Blog ini sudah 19 tahun umurnya. Hari ini blognya pindah ke server rumah, memakai tenaga surya (belum seluruh rumah memakai tenaga surya, tapi server dan modem internetnya bertenaga surya). Dulu kami mulai blog ini menyewa shared hosting yang cuma 5 ribu rupiah per bulan, lalu naik ke level harga lebih tinggi, sampai memakai VPS, dan bahkan dedicated server.

Blog ini sekarang dihost di Orange Pi 5.

Dari dulu saya memakai dedicated server karena ada proyek-proyek yang saya kerjakan. Ada proyek yang saya ceritakan di sini (misalnya BarInstall dan Tinycontroller) dan banyak yang tidak dituliskan. Dulu dedicated server 20an USD/bulan sudah cukup, tapi sekarang harga bulanan dedicated server makin naik. Hosting dedicated termurah ada di Eropa (Hetzner, Online.net), tapi di Eropa harga listrik makin mahal, jadi tahun lalu semua menaikkan harga.

Walau mahal, akhir-akhir ini saya masih hosting blog di dedicated server karena sekalian dipakai di proyek lain. Sekarang ini karena saya tidak lagi ada proyek yang butuh dedicated server dengan spesifikasi tinggi, saya tidak ingin membayar server mahal cuma untuk blog saja. Setelah banyak pertimbangan, akhirnya hostingnya dipindahkan ke rumah saja sekalian memakai tenaga matahari.

Ini merupakan pengembangan dari eksperimen website bertenaga matahari di akhir tahun 2021. Waktu itu saya bereksperimen dengan satu blog kecil bertenaga surya memakai Pi Zero W. Sekarang bukan cuma satu blog kecil, tapi hampir semua website yang kami miliki sudah pindah ke rumah, dengan tenaga surya. Plus modem fiber optiknya juga bertenaga surya.

Perjalanan panjang

Bagian ini akan bercerita perjalanan panjang memutuskan hosting di rumah. Sebagai informasi: dedicated server yang tadinya dipakai untuk blog ini memiliki storage 8TB HDD + 1 TB SSD dan biaya per bulannya sekitar 70 EURO. Di dedicated server dengan kapasitas besar tersebut, ada banyak file-file lama yang butuh banyak makan waktu untuk memilahnya.

Setelah dibereskan (sebagian file dihapus, sebagian dikompres), ukurannya masih lebih dari 1.5 TB. Sulit mencari VPS atau dedicated server murah untuk menyimpan data sebanyak itu. Akhirnya yang saya lakukan adalah memindahkan data ini ke layanan box storage Hetzner. Biayanya 10.9 euro per bulan dengan kapasitas 5TB.

Saya mengurus banyak situs, semua situs kami yang dilink dari sini (seperti risna.info, menulis.blog, tinyhack.com, cintaprogramming.com, yohan.es), dan ada juga situs titipan teman dan adik-adik. Beberapa situs ada yang aktif dan beberapa kurang aktif. Untuk memudahkan, sejak bertahun-tahun lalu saya memakai Docker, jadi tiap situs bisa punya versi software yang berbeda.

Meski docker cukup memudahkan, tapi total pemakaian disk space untuk semua website cukup besar: sekitar 50GB. Artinya banyak hosting murah tidak bisa dipakai. Sama seperti menyewa rumah atau kamar, kita bisa memilih yang minimum atau yang nyaman. Jika kita memilih server dengan disk space yang mepet, lalu kita ingin membuat backup sementara, maka ini tidak bisa dilakukan.

Jadi minimal saya butuh sekitar 60-80 GB untuk hosting semua website dengan nyaman. Saya juga minimal butuh VPS (tidak harus dedicated server), supaya bisa hosting Docker container. Ini mengerucutkan pilihan karena biasanya berbagai hosting VPS sudah mahal untuk level disk space tertentu. Vultr: 20 USD/bulan (Disk 80GB, RAM 4GB), Hetzner Cloud 6.5 EURO (Disk 80GB, RAM 8GB), DigitalOcean 24 USD/bulan (Disk 80GB, RAM 4GB). Sudah jelas terlihat bahwa Hetzner ini yang paling murah.

IPv6 Only

Hetzner memiliki opsi: jika kita tidak memakai IPv4 (hanya IPv6 saja), maka akan hemat 0.5 euro per bulan. Dari puluhan tahun lalu, sudah didengungkan bahwa address space IPv4 sudah akan habis, dan orang-orang diminta memakai IPv6. Tapi dengan banyak akal-akalan jaringan (terutama CGNAT/Carrier Grade Network Address Translation), maka IPv4 masih bertahan.

Sekarang IPv4 sudah benar-benar mepet, jadi yang di masa awal dulu diberikan gratis, sekarang tidak lagi. Sekarang IPv6 sudah mulai banyak dipakai (contoh: saya baru tahu kalau Indihome juga sudah menyediakan IPv6). Di Hetzner jika kita memilih IPv6 only, maka server kita hanya bisa berhubungan dengan server lain yang memakai IPv6.

Sebenarnya pengematan 0.5 euro/bulan ini tidak banyak, tapi saya penasaran: bisa nggak sih hosting IPv6 saja? Cloudflare bisa menjadi proxy, jadi website kita bisa diakses dengan IPv4. Jadi seharusnya semua orang tetap bisa mengakses websitenya.

Jawaban singkatnya: bisa, tapi banyak masalah kecil. Masalah utama adalah: banyak software bergantung pada server yang hanya bisa diakses IPv4. Contohnya: jika ada yang berkomentar di blog wordpress dan ada plugin untuk mengecek spam, plugin ini berjalan di server dan berusaha menghubungi server lain (yang hanya bisa diakses IPv4) untuk pemeriksaan spamnya. Karena gagal, maka plugin jadi error.

Saya sempat mengakali ini dengan menggunakan tailscale. Tailscale ini adalah software yang memungkinkan kita punya jaringan virtual (sejenis VPN). Kita bisa membuat Exit Node di komputer mana saja (exit node ini yang akan melakukan koneksi ke internet). Saya install tailscale di server, jadi jika ada koneksi IPv4, maka server akan memakai Exit Node rumah. Dengan ini beberapa software berjalan baik tapi jadi lebih lambat. Tapi ternyata ada masalah interaksi tailscale dengan Docker.

Untuk yang memakai website sederhana VPS IPv6 only bisa jadi pilihan. Untuk yang punya banyak website seperti saya dan tidak ingin repot (karena harus mengecek tiap situs apakah ada masalah), saat ini memakai dual stack (IPv4 + IPv6) lebih mudah.

Server ARM64

Karena ada kesibukan lain saya memutuskan memulai transfer file ke server dedicated lain di Hetzner yang lebih murah saja (sekitar 40 Euro). Tapi karena kesibukannya tidak lanjut, saya kembali berpikir: harusnya bisa lebih hemat kalau memakai VPS Hetner, tapi memakai dual IPv4 (jangan IPv6 saja). Akhirnya ini saya lakukan dan berhasil. Server 40 euronya segera saya cancel dan tidak kena biaya.

Saya juga pindah arsitektur dari x86 ke ARM64. Hetzner punya server cloud versi x86 dan ARM64. Versi ARM64 ini jauh lebih murah dari versi x86. Proses perpindahan ini hanya perlu konfigurasi ulang Docker karena beberapa base image yang saya pilih tidak ada versi ARM64-nya.

Orange Pi 5

Saya saat ini sangat suka dengan kabel USB C harga 1.99 USD dari Aliexpress yang memiliki display daya. Ini sangat berguna melihat apakah charging jalan atau tidak (beberapa device mati total dan tidak ada indikator charging), dan apakah fast charging atau slow charging (beberapa powerbank memiliki beberapa colokan, tidak semua bisa fast charging).

Kabel dengan LCD ini sangat berguna

Ketika saya bereksperimen dengan Orange Pi 5. Saya perhatikan bahwa dayanya kecil sekali, ketika idle sekitar 1.2 Watt, lebih kecil dari Raspberry Pi 4. Saya konfirmasi ini dengan data dari Internet, dan ternyata memang sesuai, jadi bukan display kabelnya yang error. Karena saya sudah memigrasi konfigurasi dari x86 ke ARM64 di server Hetzner, maka memindahkan website ke server lokal seharusnya mudah.

Orange Pi 5 spesifikasinya mirip dengan Rock 5B yang sudah saya tulis (saya juga memesan versi RAM 16GB). Bedanya: ethernetnya Orange Pi 5 hanya gigabit (bukan 2.5GbE), dan konektor displaynya hanya satu. Kedua batasan ini tidak penting buat saya untuk tujuan menjadi web server.

Cloudflare Tunnel

Biasanya jika kita ingin website kita bisa diakses via internet, maka yang dilakukan adalah membuka port agar orang bisa menghubungi web server kita, dan kita perlu punya IP public.

Client menghubungi server langsung

Kita juga bisa menambahkan layer tambahan (reverse proxy), seperti Clouflare, supaya pengunjung tidak melakukan koneksi ke server kita tapi ke Cloudflare, lalu cloudflare akan melakukan koneksi ke server kita. Ini berguna untuk beberapa hal: cloudflare bisa mengcache konten yang sering diakses, dan bisa memblokir serangan sebelum masuk ke site kita. Tapi meski ada cloudflare, tetap saja perlu membuka port dan memiliki IP public agar bisa dihubungi cloudflare.

Cloudflare di tengah-tengah

Bisa dibayangkan pendekatan Cloudflare lama ini seperti aktor terkenal yang memiliki agen. Jika ada yang berusaha menguhubungi aktor maka yang dipakai adalah nomor telepon kantor agennya, dan kantor agennya bisa meneruskan ke nomor aktor. Dalam kasus ini, jika seseorang tahu nomor aslinya aktor tersebut, maka agen bisa dibypass dengan mudah. Ada cukup banyak teknik untuk mencari alamat IP asli sebuah situs di belakang cloudflare (walau kadang tidak berhasil). Sang Aktor juga bisa menambah keamanan dengan hanya menerima telepon dari agen saja, tidak dari siapapun juga (tapi tetap perlu punya nomor yang bisa dihubungi oleh agennya).

Cloudflare saat ini mendukung tunnel, dengan ini bukan cloudflare yang menghubungi web server, tapi sebaiknya: ada program yang akan menghubungi cloudflare. Dengan cara ini sebuah web server tidak perlu punya IP publik.

Koneksi Menggunakan Tunnel

Mari kembali ke analogi sebelumnya. Bayangkan sekarang aktornya punya asisten yang selalu tersedia. Bayangkan aktor ini tinggal di hotel yang sama dengan asistennya, jadi bisa dihubungi oleh asisten melalui telepon internal hotel. Asisten ini bisa memakai nomor siapa saja (atau bisa beli nomor baru tiap hari) lalu akan menelpon agen dan membiarkan koneksinya terbuka. Jika ada yang menelpon agen, maka agen akan berbicara ke asisten (karena telponnya tidak pernah ditutup), dan asisten akan memforward percakapan ke aktor via telepon internal hotel.

Dengan cara ini, nomor telepon aktor (yang publik) tidak akan diketahui siapapun (atau bahkan sang aktor tidak perlu punya nomor telepon publik). Sang aktor bahkan bisa menyewa beberapa asisten yang memakai nomor telepon yang berbeda untuk melakukan koneksi ke agen (kita bisa menjalankan beberapa tunnel memakai koneksi internet yang berbeda).

Tenaga Surya

Saya tidak menaruh panel surya saya di tempat yang benar-benar terbuka dan selalu terkena sinar matahari. Posisi solar panel di luar kamar dan terkena bayangan atap, jadi tidak mendapatkan sinar selama seharian penuh.

Charge Controller

Panel surya dihubungkan ke charge controller. Karena saya butuh dua voltase: 5V untuk Orange Pi 5 dan 12V untuk modem, saya membeli konektor yang biasanya untuk dipasang di mobil. Konektor ini menerima input 12-24 volt, dan bisa memberikan tegangan sesuai standard USB-C.

Benda ini dihubungkan ke Charge Controller

Untungnya saat ini kabel USB-C ke DC Barrel 12 V sudah mudah ditemukan. Jadi colokan bertuliskan PD di atas dihubungkan ke modem dengan kabel USB C ke 5.5×2.5mm output, dan colokan bertuliskan QC3.0 dihubungkan ke Orange Pi 5 dengan kabel USB biasa.

Konektor untuk power modem

Pemakaian daya total modem dan Orange Pi 5 sekitar 2.4-4 watt. Jika diasumsikan tidak ada sinar matahari selama 14 jam, maka maksimum butuh 65 Watt Hour. Batere saya cukup besar (12V 60Ah), jadi dari perhitungan seharusnya tidak masalah.

Hal menarik dengan memiliki server di rumah adalah: ketika server sibuk, bisa terlihat daya yang digunakan naik. Sempat ada usaha brute force salah satu blog, dan karena terlihat dayanya naik, bisa segera saya tangani.

Migrasi

Setelah melihat total traffic semua website,saya memastikan bahwa Orange Pi 5 ini cukup powerful, dan saya mulai proses migrasi. Secara umum migrasinya cukup lancar, tapi hal-hal di sekitar migrasinya yang kurang lancar. Migrasi saya lakukan per domain.

Di tengah proses migrasi: ada badai sejenak, dan mengakibatkan fiber optic di komplek terputus. Ini baru kali pertama kami alami selama belasan tahun di sini. Dan ini cukup lama, hampir 12 jam.

Gangguan fiber optik

Untungnya kami punya koneksi cadangan dari provider lain. Tarif internet di sini murah, jadi memiliki koneksi internet cadangan tidak membebani kami, dan sangat berguna di kasus semacam ini. Biaya koneksi utama kami fiber 1Gbps up/down 1284 THB (sekitar 560 ribu rupiah, atau 38 usd) per bulan.

Biaya koneksi cadangan ADSL adalah 426.93 THB (sekitar 186 ribu rupiah atau 12.5 USD) per bulan. Koneksi cadangan ini 300 mbps down 100mbps up. Plus diberi SIM card dengan batasan data 5GB/bulan.

Sisi baik dari mengalami pemutusan internet sementara ini adalah saya segera mensetup agar tunnel Cloudflare bisa memakai kedua koneksi tersebut. Dengan ini kemungkinan kedua tunnelnya down bisa diminimasi. Sebagai catatan: hanya modem utama yang terhubung ke tenaga surya. Modem satu lagi terhubung ke listrik rumah.

Masalah terakhir yang dialami adalah: kabel jaringan. Ternyata kabel lama saya kurang bagus, dan terlihat dari log kernel bahwa statusnya tercabut colok (walau tidak digeser sama sekali). Setelah diganti kabel yang lebih baik, sepertinya masalahnya tidak muncul lagi.

Konsekuensi Hosting di Rumah

Dulu site ini dihost di wilayah Jerman (Hetzner), sekarang di Chiang Mai. Dari hasil ping, seharusnya site-site kami akan lebih cepat diakses. Bandwidth datacenter mungkin lebih stabil dari di rumah, tapi kombinasi situs kami tidak sesibuk itu sampai butuh bandwidth tinggi.

Dibandingkan data center, reliabilitas internet di rumah biasanya lebih rendah. Kami punya koneksi cadangan, jadi reliabilitasnya bisa ditingkatkan. Masalah listrik (karena memakai solar) seharusnya bisa terus on selama 24 jam selama hardware tidak bermasalah.

Kemungkinan situs down tetap ada, tapi situs-situs kami bukan situs penting, tidak perlu uptime 100%. Jika ada informasi di sini yang ingin dilihat ketika site down, kemungkinan bisa dilihat di tempat lain, atau bisa dilihat di Google cache, atau di archive.org. Jika ada pertanyaan penting, kami tetap bisa dihubungi di Facebook.

Saat ini matahari masih cukup terik di Thailand, di musim hujan nanti jika listrik tidak cukup, saya berencana membuat sistem yang akan memindahkan daya ke listrik PLN jika batere hampir habis. Saya butuh ini terutama untuk modem internetnya.

Bagaimana dengan masalah securitynya? Akses masuk ke orange pi dari luar dibatasi hanya via HTTPS saja, semua port lain tidak bisa diakses karena saya menggunakan tunnel Cloudflare. Serangan DDOS akan diblokir Coudflare. Beberapa serangan ke WordPress akan diblok oleh WordFence. Andaikan ada yang berhasil menemukan bug di WordPress atau pluginnya dan berhasil mendapatkan akses shell, maka aksesnya terbatas pada container docker. Andaikan berhasil keluar dari container docker, orange Pi sudah diletakkan di subnet terpisah, tidak bisa mengakses jaringan lokal rumah.

Status terkini

Sekarang halaman https://solar.yohanes.mobi berisi status sejarah uptime (dengan uptimed). Di masa depan mungkin akan saya tambah statistik yang lain. Rencananya kapasitas batere akan ditampilkan kalau modulnya sudah sampai.

Masih ada blog yang kami kelola, simalungun.net yang kami sisakan di Hetzner Cloud VPS (4.5 USD termasuk backup harian). Situs ini sering dikunjungi di hari Minggu, dan sepertinya Hetzner lebih bisa menjamin uptimenya dibandingkan rumah kami. Jika ingin mencoba Hetzner Cloud, silakan gunakan link ini: https://hetzner.cloud/?ref=8CmmCjc3klyB agar mendapatkan kredit 20 USD.

Saya juga masih membayar storage box Hetzner 5 TB, dan isi website saat ini akan dibackup ke storage box tersebut di siang hari ketika matahari bersinar dan daya berlimpah. Sever dedicated 70 Euro sudah dihentikan langganannya, dan diganti dengan storage box 10.9 Euro plus satu VPS (3.29 euro + 0.5 euro untuk IP dan 0.66 euro untuk backup = 4.45 Euro), total 15.45 euro.

Tadinya saya sempat hosting email server sendiri untuk satu domain saya, tapi sekarang sudah saya pindahkan memakai Clouflare Email Worker. Email merupakan salah satu layanan yang saat ini tidak bisa dihosting sendiri tanpa IPv4 publik.

Website yang saat ini masih di host di tempat lain dan belum saya pindahkan ke rumah adalah website Mastodon. Dalam beberapa bulan, pemakaian disk space mastodon mencapai lebih dari 100GB. Pemakaian CPU-nya juga cukup besar, misalnya kadang Mastodon ini akan melakukan transcoding video yang diupload user. Saya masih memikirkan solusi jangka panjang untuk ini, misalnya mengganti server mastodon dengan GotoSocial.

Blog untuk belajar

Dari memanage blog ini sejak 19 tahun yang lalu, saya belajar banyak hal. Misalnya: mengurus server, mengoptimasi server, mengamankan server, serta berbagai teknologi di sekitarnya. Dari aktivitas memindahkan blog ke rumah dengan tenaga surya, sampai saat ini pun mengurus blog ini masih memberi pengalaman baru.

3 thoughts on “Blog ini sekarang bertenaga surya”

  1. menurut saya lebih Efisien kalo websitenya di bangun pakai Static Site Generator (SSG) seperti Jekyll (Ruby), Gatsby (Javascript), atau Hugo terus deploy di Netlify atau Vercel pak, ga perlu mikirin Uptime dan yang paling penting Gratis.

    1. Ada banyak pertimbangan kenapa nggak static website dan kenapa tidak dihost di netlify, dsb

      Pertama situs kami ada banyak, jumlah postingnya ribuan. Migrasinya akan lama, selain itu udah ada ribuan komentar di berbagai situs kami dari 19 tahun ngeblog, dan sebagian besar masih dijawab (kalau harus import lagi comment ke third party app, bakal banyak effort).

      Beberapa situs dari dulu sudah statik (misalnya https://yohan.es memakai ikiwiki, dari jaman sebelum static site generator populer), situs yang baru juga ada yang statik, misalnya: https://solar.yohanes.mobi (memakai hugo).

      Selain itu kami tidak percaya dengan kelangsungan berbagai layanan third party (Netlify, Vercel , github, dsb). Sudah pernah dibahas di blog ini (lihat kategori hosting), di mana sebagian besar layanan komersial sudah muncul dan mati sepanjang blog ini berjalan.

Tinggalkan Balasan

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.