rizaldy.club/content/self-hosting.md
2024-03-02 02:47:18 +07:00

165 lines
11 KiB
Markdown

---
title: Self-hosting
tags:
- evergreen
- homelab
---
Saya hanya menjalankan aplikasi (di server) yang sumber kode nya terbuka (berdasarkan [definisi OSI](https://opensource.org/osd)), menghargai privasi pengguna, [keduanya](https://www.gnu.org/philosophy/free-sw.en.html), atau diantaranya.
Saya selalu menghindari aplikasi yang "phone home" tanpa consent (opt-out) apalagi yang dikategorikan sebagai spyware.
# Infrastruktur
## Traefik
https://traefik.io ([Source Code](https://github.com/traefik/traefik))
Salah satu reverse proxy favorit saya setelah [Caddy](https://caddyserver.com), [OpenResty®](https://openresty.org/en/) dan [HAProxy](https://www.haproxy.org). Reverse proxy
bertugas untuk meneruskan permintaan HTTP(s) masuk ke layanan yang dimaksud yang umumnya dikategorikan berdasarkan _virtual hosts_ nya. Dukungan terhadap _TLS termination_ dan
penerapan protokol ACME adalah alasan saya mengutamakan Traefik. Juga, karena cara untuk mengkonfigurasi Traefik yang relatif sederhana dan lumayan beragam.
Untuk case yang relatif sederhana (seperti sebagai sidecar proxy), saya akan memilih Caddy. Untuk case yang membutuhkan dynamic routing (seperti untuk handle proxy di multi-tenant SaaS), saya akan memilih OpenResty, jika bukan keduanya, saya akan memilih Traefik. HAProxy? Anggap hanya ketika ada permintaan khusus.
No love for Nginx? Anggap [ini tidak terjadi](https://freenginx.org), dan, hey, saya sudah menyebutkan OpenResty®, 'kan?
## PostgreSQL
https://www.postgresql.org ([Source Code](https://git.postgresql.org/gitweb/?p=postgresql.git))
PostgreSQL: The World's Most Advanced Open Source Relational Database, begitulah tagline dari database ini. Postgres dapat diandalkan, menawarkan fitur yang kokoh
dan memiliki performa yang dapat diadu. PostgreSQL menjadi database utama saya dan menjadi penentu bila database yang satu ini tidak didukung pada suatu aplikasi yang
ingin saya pakai.
Tidak memiliki alasan lain untuk tidak menggunakan PostgreSQL, dan harus memiliki alasan yang sangat kuat jika harus menggunakan alternatif seperti MySQL/MariaDB dalam
memilih RDBMS. Dan jika memang memiliki alasan yang sangat kuat, alternatif itu sudah pasti [SQLite](https://sqlite.org).
## MinIO
https://min.io ([Source Code](https://github.com/minio/minio))
Aturan sudah dibuat: belum cloud-native jika masih bergantung dengan Block Storage sebagai penyimpanan. Object storage menjadi komponen
vital untuk mereka yang mengadopsi cloud-native. Berbeda dengan block storage yang menyimpan "data" sebagai... block, object storage menggunakan
object ID sebagai metadata nya, yang memungkinkan penyimpanan tidak terbatas karena "besaran block" sudah bukan lagi pengukur.
Amazon S3 yang ingin menjadi [`malloc` nya internet](https://archive.rizaldy.club/archive/1709220428.901368/index.html) menjadi standar dan pelopor
untuk API di Simple Storage Service. Keberadaan tools yang netral sangat dibutuhkan dan yang sudah ada—OpenStack Object Storage (Swift)—tidak kompatibel dengan
API yang dimiliki oleh Amazon S3.
Lalu disini MinIO berperan: sebuah object storage yang berdiri sendiri, open source, dan kompatibel dengan API S3 nya AWS. Selain model deployment nya yang
relatif sederhana, MinIO menawarkan performa yang tinggi dengan _footprint_ yang relatif rendah.
MinIO digunakan dimanapun yang mendukung penyimpanan berbasis object.
## Gitea
https://about.gitea.com ([Source Code](https://github.com/go-gitea/gitea))
Tidak hanya sebagai git server repository, Gitea menawarkan fitur untuk code review; package/container registry dan CI/CD sebagaimana "platform DevOps" pada umumnya. Berbeda dengan
alternatif lain seperti [GitLab](https://about.gitlab.com) yang relatif kompleks dalam operasionalnya, Gitea ditulis menggunakan Go dan hanya membutuhkan 1 file binary untuk menjalankannya.
Selain itu, Gitea relatif cepat dan memiliki _footprint_ yang relatif rendah. Mendukung database populer untuk penyimpanan metadata, begitupula dukungan terhadap object storage.
## Umami
https://umami.is ([Source Code](https://github.com/umami-software/umami))
Hanya sebuah web analytics yang menghargai privasi pengguna. Tidak ada data pribadi—yang mengarah ke "seseorang" di dunia fisik—yang disimpan seperti alamat IP dan geolokasi
apalagi sebuah "berkas kecil" bernama [cookies](https://en.wikipedia.org/wiki/HTTP_cookie) yang disimpan di perangkat pengguna.
Aplikasi umami yang saya jalankan umumnya menghargai pengaturan [Do-Not-Track (DNT)](https://en.wikipedia.org/wiki/Do_Not_Track) di _request header_ dan dipanggil melalui
sebuah script bernama `umami.js` yang kemungkinan besar akan diblokir jika menggunakan "ad blocker" populer seperti [uBlock Origin](https://ublockorigin.com) seperti yang
saya lakukan juga.
Web analytics hanyalah pelengkap untuk ego saya dalam mengumpulkan "insight" terhadap situs yang saya kelola dan murni dianggap sebatas vanity metrics.
# Home Theater PCs (HTPCs)
## Navidrome
https://www.navidrome.org ([Source Code](https://github.com/navidrome/navidrome/))
Sebuah music server dan streamer modern, mendukung audio transcoding (on the fly) dan kompatibel dengan Subsonic API. Memiliki _footprint_ yang relatif rendah dan
berjalan hampir di setiap platform.
Tidak ada alasan untuk tidak menjalankan Navidrome khususnya jika mengoleksi musik dalam bentuk digital. Mendukung integrasi eksternal dengan Last.fm/[ListenBrainz](https://listenbrainz.org) untuk scrobbling dan/atau mengambil metadata khususnya terkait cover art ataupun artis yang dimaksud.
## Jellyfin
https://jellyfin.org ([Source Code](https://github.com/jellyfin/jellyfin))
Penting untuk dicatat bila Jellyfin adalah "fork" dari Emby (3.5.2) yang ditulis menggunakan C#. Ada sedikit perbedaan khususnya di sisi performa/_footprint_ dan ukuran aplikasi
jika dibandingkan dengan alternatif nya seperti Plex yang ditulis menggunakan C++ (jika merujuk ke sejarah Plex <- XBMC/Kodi) yang relatif lebih ringan dan memiliki
ukuran yang lebih kecil.
Saya hanya menggunakan Jellyfin untuk kepentingan video, jika ada alternatif lain (selain Kodi), please let me know very soon!
# Pribadi
## Vaultwarden
https://github.com/dani-garcia/vaultwarden/wiki ([Source Code](https://github.com/dani-garcia/vaultwarden))
Sebuah password manager yang kompatibel dengan API nya Bitwarden, yang mana sebuah password manager juga. Ditulis menggunakan bahasa pemrograman Rust yang menjanjikan _memory safety_ dan _footprint_ yang relatif rendah jika dibandingkan dengan versi resminya yang ditulis menggunakan C#.
Bitwarden berjalan di hampir semua platform: Windows, GNU/Linux, Mac OS, Android, iOS, Google Chrome, Mozilla Firefox, Safari, x86_64, aarch64, dimanapun. Mungkin
berjalan di varian \*BSD juga.
Password adalah informasi yang sangat sensitif sehingga pengetahuan untuk "mengaturnya" dengan aman dan benar sangat diperlukan. Bitwarden menawarkan ["managed services"](https://bitwarden.com/pricing/) untuk mereka yang kurang familiar ataupun tidak memiliki cukup waktu dengan teknologi tersebut, sehingga tidak perlu menjalankan aplikasi server nya Bitwarden dengan tangan sendiri untuk memulai menggunakan.
## Synology Photos
https://www.synology.com/en-global/dsm/feature/photos (Proprietary)
Menggunakan ini hanya karena memiliki perangkat keras nya, dan sayangnya sangat sesuai dengan kebutuhan saya. Saya hanya membutuhkan: aplikasi yang menampilkan foto/video yang dikategorikan berdasarkan waktu; tempat, album (cukup standar), informasi terkait metadata, dan mendukung HEIV & HEVC (tipikal pengguna Apple).
Synology Photos mendukung _backup_ juga sehingga dapat mengganti peran aplikasi Photos di perangkat Apple saya.
## Synology MailPlus
https://www.synology.com/en-global/dsm/feature/mailplus (Proprietary)
Sudah lama saya ingin mengarsipkan semual email saya dan mengkategorikannya berdasarkan "mailbox" seperti "IMBOX", "Paper Trail", dan "The Feed", yang mana konsep yang saya ambil dari layanan [Hey](https://hey.com) nya [37signals](https://37signals.com). Di "platform" email modern, ini dapat dicapai menggunakan protokol IMAP, namun "membersihkan" email yang disimpan di komputer pihak ketiga bukanlah pekerjaan yang sederhana.
Saya menggunakan Migadu dan beruntungnya Migadu mendukung protokol POP. Alurnya sederhana: setiap 1 menit, server saya akan mengambil data email terbaru dari remote server dan menghapusnya setelah terambil. Untuk email keluar? Melalui protokol SMTP, cukup standar! Saya belum menemukan aplikasi serupa yang sesuai dengan kebutuhan saya tersebut
selain Synology MailPlus, meskipun aplikasi tersebut cukup _overkill_ untuk kebutuhan saya.
## ArchiveBox
https://archivebox.io ([Source Code](https://github.com/ArchiveBox/ArchiveBox))
Saya ingin mengarsipkan segala hal yang saya minati di internet. Paper, halaman web, apapun yang diakses melalui protokol HTTP(s). Ini nantinya menjadi seperti perpustakaan pribadi
digital saya untuk apapun yang ada di internet.
Seiring berjalannya waktu, "perpustakaan digital" saya tersebut akan menjadi salah satu sumber dari mesin pencari yang akan saya gunakan ([SearXNG](https://github.com/searxng/searxng)) setelah DuckDuckGo (Bing).
# Komunitas
## Forem
https://www.forem.com ([Source Code](https://github.com/forem/forem))
Platform untuk berbagi tulisan, ditulis menggunakan Ruby diatas kerangka kerja Ruby On Rails. Aplikasi ini mentenagai [evilfactorylabs.org](https://www.evilfactorylabs.org) sejak [Juli 2021 kemarin](https://www.evilfactorylabs.org/root/merangkul-dan-berkolaborasi-3mbb). Aplikasi ini relatif kompleks, setidaknya ada 4 layanan utama yang harus berjalan: Web server, worker (sidekiq), imgproxy, dan OpenResty®. Tentu saja PostgreSQL dan Redis juga.
Saya tidak terlalu merekomendasikan aplikasi ini untuk kepentingan berkomunitas, namun belum menemukan alternatif serupa yang cukup "bisa diadu" selain Discourse, Apache Answer, dan Flarum.
## PeerTube
https://joinpeertube.org ([Source Code](https://github.com/Chocobozzz/PeerTube))
Platform untuk berbagi video, ditulis menggunakan JavaScript. Mendukung protokol [ActivityPub](https://en.wikipedia.org/wiki/ActivityPub) sehingga dapat "berfederasi" dengan "instance" dan pengguna lain. Menggunakan teknologi peer-to-peer (P2P) di beberapa fitur nya, sehingga dapat mengurangi beban kerja server dengan semangat gotong royong antar penonton.
Saya masih meng-eksplorasi teknologi ini (khususnya di [[platform-video | platform berbagi video]]) dan akan terus menyelamnya lebih dalam lagi.
Aplikasi ini mentenagai [evilfactorylabs.social](https://evilfactorylabs.social) sejak Desember 2023 kemarin.
## Mastodon
https://joinmastodon.org ([Source Code](https://github.com/mastodon/mastodon))
Platform untuk berbagi status singkat alias [microblogging](https://en.wikipedia.org/wiki/Microblogging), ditulis menggunakan Ruby diatas kerangka kerja Ruby On Rails (come on, what else?) dan menggunakan protokol ActivityPub untuk fitur sosial nya. Ini adalah salah satu aplikasi terlama yang pernah saya jalankan (Oktober 2021) setelah Forem.
Kepikiran untuk menjalankan [Bluesky](https://bsky.social/about/) karena konsep dan arsitekturnya (dan ActivityPub sudah ada PeerTube anyway) but let's see.
Aplikasi ini mentenagai [edgy.social](https://edgy.social) sejak Oktober 2021 kemarin.