SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor

Apa Itu Self-Hosting? Kos, Kesukaran dan Cara Bermula

Self-hosting bermaksud menjalankan aplikasi di pelayan anda sendiri. Ketahui kos elektrik ikut tarif TNB, cara menyemak CGNAT di talian rumah, dan tiga peringkat untuk bermula.

Apa itu self-hosting?

Self-hosting bermaksud anda menjalankan sendiri perisian yang biasanya anda guna sebagai perkhidmatan syarikat lain, di atas pelayan yang anda kawal. Pelayan itu boleh jadi sebuah komputer kecil di rumah, atau VPS (virtual private server, iaitu pelayan maya yang anda sewa dari pusat data). Perisiannya selalunya percuma. Perkakasan dan elektrik tidak percuma. Cara paling selamat untuk bermula ialah satu aplikasi dalam Docker Compose, kemudian reverse proxy dengan TLS, kemudian sandaran yang pernah anda pulihkan sendiri.

Ambil contoh gambar di telefon anda. Hari ini gambar itu mungkin disimpan dalam Google Photos. Jika anda self-host, gambar yang sama disimpan dalam Immich di pelayan anda sendiri. Fail kerja dalam Google Drive boleh berpindah ke Nextcloud. Kata laluan boleh berpindah ke Vaultwarden. Anda masih guna aplikasi di telefon dan pelayar seperti biasa. Bezanya, data itu berada pada cakera yang anda kawal. Tiada syarikat yang boleh menaikkan harga atau menutup akaun anda.

Halaman ini menjawab empat soalan mengikut urutan: apa maksud self-hosting, adakah ia percuma, sejauh mana sukarnya, dan di mana hendak bermula. Jika anda sudah tahu semua itu dan mahu memilih aplikasi, baca senarai aplikasi yang berbaloi untuk di-self-host pada 2026. Jika matlamat anda ialah laman web, ikut panduan langkah demi langkah untuk self-host laman web sendiri.

Adakah self-hosting percuma?

Perisiannya, ya, hampir selalu. Nextcloud, Immich, Jellyfin dan Uptime Kuma ialah perisian sumber terbuka. Anda tidak membayar lesen untuk menggunakannya. Tetapi perisian perlu berjalan di atas sesuatu, dan di situlah kosnya berada.

Untuk pelayan di rumah, kosnya datang dari empat tempat:

  • Perkakasan. Mini PC terpakai atau NAS (network attached storage, iaitu kotak storan rangkaian). Komputer lama yang sudah ada juga boleh digunakan. Cakera keras pula rosak dari semasa ke semasa dan perlu diganti.
  • Elektrik. Pelayan hidup 24 jam sehari, setiap hari. Inilah kos yang paling kerap dilupakan.
  • Talian internet. Talian rumah biasa sudah cukup untuk kegunaan sendiri. Kelajuan muat naik (upload) yang menentukan sejauh mana orang lain boleh mengakses pelayan anda dari luar.
  • Masa anda. Kemas kini, sandaran, dan membaiki sesuatu apabila ia rosak pada waktu yang tidak sesuai.

VPS pula ada bil bulanan. Bil itu sudah termasuk perkakasan, elektrik, penyejukan dan alamat IP awam. Harga VPS berubah dari semasa ke semasa, jadi semak halaman harga pembekal pada hari anda membeli. Kemudian bandingkan jumlah setahun dengan kos elektrik di bawah, ditambah harga perkakasan rumah.

Berapakah kos elektrik pelayan yang hidup 24/7?

Sejak 1 Julai 2025, bil domestik TNB dipecahkan kepada beberapa komponen. Bagi isi rumah yang menggunakan 1,500 kWh atau kurang sebulan, tiga caj dikenakan bagi setiap kWh:

CartaKomponen tarif domestik TNB bagi penggunaan 1,500 kWh ke bawah, sen per kWh (Oktober 2026)
Data di sebalik carta ini
[
  {
    "label": "Caj tenaga",
    "sen_per_kwh": 27.03
  },
  {
    "label": "Caj kapasiti",
    "sen_per_kwh": 4.55
  },
  {
    "label": "Caj rangkaian",
    "sen_per_kwh": 12.85
  },
  {
    "label": "Jumlah kadar asas",
    "sen_per_kwh": 44.43
  }
]

Jadi setiap kWh tambahan yang digunakan pelayan anda berharga lebih kurang 44.43 sen pada kadar asas, setakat Oktober 2026. Untuk mengira kWh, darabkan kuasa purata dalam watt dengan bilangan jam, kemudian bahagi dengan 1,000. Mini PC yang menarik 15 W dan hidup selama 30 hari menggunakan 15 × 24 × 30 ÷ 1,000 = 10.8 kWh sebulan.

Andaian kuasa di bawah ialah purata ketika pelayan kebanyakan masanya melahu (idle). Angka ini bukan kuasa maksimum yang tertulis pada label bekalan kuasa. Nilai 15 W untuk mini PC dengan pemproses komputer riba, 40 W untuk NAS dengan empat cakera keras, dan 80 W untuk desktop lama ialah angka tipikal yang biasa diterbitkan. Ukur peranti anda sendiri dengan meter kuasa palam (plug-in power meter) untuk angka sebenar.

CartaAnggaran kos elektrik pelayan yang hidup 24/7 pada kadar asas TNB 44.43 sen/kWh (Oktober 2026)
Data di sebalik carta ini
[
  {
    "device": "Mini PC (15 W)",
    "watt": 15,
    "kwh_sebulan": 10.8,
    "rm_sebulan": "4.80",
    "rm_setahun": "58.38"
  },
  {
    "device": "NAS 4 cakera (40 W)",
    "watt": 40,
    "kwh_sebulan": 28.8,
    "rm_sebulan": "12.80",
    "rm_setahun": "155.68"
  },
  {
    "device": "Desktop lama (80 W)",
    "watt": 80,
    "kwh_sebulan": 57.6,
    "rm_sebulan": "25.59",
    "rm_setahun": "311.37"
  }
]

Mini PC itu berharga kira-kira RM4.80 sebulan, atau RM58.38 setahun. Desktop lama yang dianggap percuma kerana sudah ada di rumah berharga RM311.37 setahun, iaitu lebih lima kali ganda. Sebab itu ramai orang yang bermula dengan komputer lama akhirnya berpindah ke mini PC. Bil elektrik itu dibayar setiap bulan, selagi pelayan hidup.

Angka sebenar dalam bil anda akan berbeza sedikit, kerana beberapa perkara lain bergantung pada jumlah penggunaan seluruh rumah:

  • AFA (Automatic Fuel Adjustment, iaitu pelarasan bahan api automatik) ditetapkan setiap bulan. Untuk September 2026, kadarnya ialah +3.67 sen/kWh.
  • Dari September hingga Disember 2026, isi rumah yang menggunakan 800 kWh atau kurang sebulan dikecualikan daripada AFA, caj runcit RM10 dan SST (Sales and Service Tax, iaitu cukai jualan dan perkhidmatan).
  • Insentif Cekap Tenaga memberi diskaun sehingga 25 sen/kWh kepada isi rumah yang menggunakan kurang daripada 1,000 kWh sebulan. Diskaun ini mengecil apabila penggunaan meningkat, jadi kWh tambahan dari pelayan boleh mengurangkan diskaun yang anda terima.
  • Jika penggunaan melebihi 1,500 kWh sebulan, caj tenaga naik kepada 37.03 sen/kWh.

Kesimpulannya mudah. Gunakan kadar asas sebagai anggaran awal, kemudian semak bil anda sendiri selepas pelayan berjalan selama sebulan.

Rumah atau VPS: di mana pelayan pertama anda patut berada?

Pelayan di rumah sesuai apabila anda perlukan storan yang besar dan murah. Cakera keras 4 TB di rumah jauh lebih murah daripada storan sebesar itu di pusat data. Data peribadi seperti gambar keluarga juga kekal di dalam rumah. Kelemahannya, pelayan itu bergantung pada talian rumah dan alamat IP yang diberi oleh ISP (internet service provider, iaitu syarikat penyedia internet). Jika bekalan elektrik rumah terputus, pelayan juga terhenti.

VPS sesuai apabila sesuatu perlu dicapai dari internet sepanjang masa. VPS datang dengan alamat IP awam yang tetap dan talian pusat data. Storannya lebih kecil dan lebih mahal bagi setiap gigabait. Jika anda belum pasti apa yang anda sewa, baca dahulu apa itu VPS dan bagaimana ia berbeza daripada hosting kongsi.

Ramai orang menggunakan kedua-duanya. Fail besar dan media disimpan di rumah. Perkhidmatan yang perlu dibuka kepada orang lain berjalan di VPS. Untuk belajar, VPS kecil ialah tempat bermula yang paling mudah, kerana dua masalah dalam bahagian seterusnya tidak wujud di sana.

Mengapa pelayan di rumah sukar dicapai dari internet?

Ada dua sebab biasa: alamat IP dinamik dan CGNAT. Yang pertama mudah diatasi. Yang kedua tidak boleh diatasi dari dalam rumah.

IP dinamik. ISP memberi router anda satu alamat IP awam, tetapi alamat itu boleh berubah, contohnya selepas router dihidupkan semula. Nama domain yang masih menunjuk ke alamat lama tidak lagi sampai ke rumah anda. Penyelesaiannya ialah DDNS (dynamic DNS, iaitu sistem nama domain dinamik). Perkhidmatan DDNS mengemas kini rekod DNS secara automatik setiap kali alamat anda berubah.

CGNAT (carrier-grade NAT). NAT (network address translation, iaitu terjemahan alamat rangkaian) ialah teknik yang membenarkan banyak peranti berkongsi satu alamat IP. Router rumah anda sudah melakukan NAT untuk telefon dan komputer di dalam rumah. Dengan CGNAT, ISP melakukan perkara yang sama satu lapis lagi di atas router anda, jadi ramai pelanggan berkongsi satu alamat IP awam. Router anda hanya menerima alamat dalaman milik ISP. Apabila seseorang di internet cuba menyambung ke alamat awam itu, sambungan sampai ke peralatan NAT milik ISP. Peralatan itu tidak tahu pelanggan mana yang patut menerimanya, jadi ia membuang sambungan tersebut. Sebab itu port forwarding pada router anda tidak membantu: sambungan itu tidak pernah sampai ke router anda.

Cara menyemak sama ada talian anda di belakang CGNAT

  1. Log masuk ke halaman pentadbiran router anda dan cari alamat WAN (wide area network, iaitu sisi router yang menghadap internet). Ia kadangkala dilabel "Internet IP" atau "WAN IP".
  2. Dari komputer di dalam rumah yang sama, semak alamat IP awam anda.
  3. Bandingkan kedua-dua alamat itu.

Untuk langkah 2, jalankan arahan ini dalam terminal. Ia mencetak alamat IPv4 yang dilihat oleh internet. Anda juga boleh membuka alamat yang sama dalam pelayar.

curl -4 https://api.ipify.org

Baca keputusannya begini:

  • Kedua-dua alamat sama. Anda ada alamat IP awam. Ia mungkin dinamik, tetapi port forwarding boleh berfungsi dan DDNS boleh menyelesaikan masalah alamat yang berubah.
  • Berbeza, dan alamat WAN berada antara 100.64.0.0 dan 100.127.255.255. Julat 100.64.0.0/10 ini dikhaskan untuk CGNAT dalam dokumen piawai RFC 6598. Talian anda di belakang CGNAT.
  • Berbeza, dan alamat WAN bermula dengan 10. atau 192.168., atau berada antara 172.16. dan 172.31. Ada satu lagi lapisan NAT di hadapan router anda. Semak dahulu sama ada modem ISP berada dalam mod router di antara talian dan router anda. Jika tiada peranti seperti itu, kemungkinan besar ia CGNAT juga.

Jika anda di belakang CGNAT, tanya ISP anda sama ada alamat IP awam boleh diminta untuk talian anda. Jika tidak boleh, jalan keluarnya ialah terowong songsang dari VPS untuk pelayan rumah di belakang CGNAT. Pelayan rumah membuka sambungan keluar ke VPS. CGNAT tidak menyekat sambungan keluar, jadi VPS yang mempunyai IP awam boleh menerima trafik bagi pihak pelayan rumah dan menghantarnya melalui terowong itu.

Sejauh mana sukarnya self-hosting?

Kesukarannya bergantung pada sejauh mana anda pergi. Bayangkan tiga peringkat. Setiap peringkat menambah satu kemahiran baharu. Jangan langkau mana-mana peringkat, kerana masalah di peringkat atas hampir selalu berpunca dari asas di peringkat bawah.

Peringkat 1: satu aplikasi dengan Docker Compose

Docker menjalankan aplikasi di dalam bekas (container) yang membawa semua pustaka yang diperlukannya. Jadi anda tidak perlu memasang PHP atau Node.js terus ke dalam sistem. Docker Compose pula menerangkan bekas itu dalam satu fail YAML yang boleh anda simpan dan salin. Mulakan dengan aplikasi kecil yang tidak menyimpan data penting. Uptime Kuma, alat untuk memantau sama ada laman web masih hidup, sesuai untuk tujuan ini.

Pada Ubuntu 24.04, sama ada di VPS atau di rumah, pasang Docker dengan skrip rasmi:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-world

Arahan terakhir sepatutnya mencetak Hello from Docker!. Skrip ini sesuai untuk belajar. Dokumentasi Docker sendiri tidak mengesyorkannya untuk sistem production.

Buat folder untuk aplikasi itu, kemudian buka fail Compose:

mkdir ~/uptime-kuma && cd ~/uptime-kuma
nano compose.yaml

Tampal kandungan ini. Ia berdasarkan fail Compose rasmi Uptime Kuma, dengan satu perubahan pada baris ports:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "127.0.0.1:3001:3001"

Perubahan 127.0.0.1 itu penting. Docker menulis peraturan iptables sendiri untuk setiap port yang diterbitkan, dan peraturan itu tidak melalui ufw. Jadi port yang diterbitkan pada semua alamat boleh dicapai dari internet walaupun ufw menunjukkan ia disekat. Dengan 127.0.0.1, aplikasi hanya boleh dicapai dari pelayan itu sendiri, sehingga anda siap dengan TLS di peringkat 2.

sudo docker compose up -d
sudo docker compose ps
curl -I http://127.0.0.1:3001

docker compose ps sepatutnya menunjukkan perkhidmatan uptime-kuma dengan lajur STATUS bermula dengan Up. curl -I sepatutnya memulangkan pengepala HTTP. Jika anda mendapat Connection refused, bekas itu belum siap atau sudah gagal. Baca puncanya dengan sudo docker compose logs uptime-kuma.

Untuk membuka antara muka web dari komputer riba anda, buat terowong SSH (Secure Shell), kemudian buka http://localhost:3001 dalam pelayar:

ssh -L 3001:127.0.0.1:3001 pengguna@ALAMAT_IP_PELAYAN

Jika anda menjalankan docker compose tanpa sudo, anda akan melihat permission denied while trying to connect to the Docker daemon socket. Ini berlaku kerana soket Docker hanya boleh dibuka oleh root dan kumpulan docker. Menambah pengguna anda ke kumpulan docker menghilangkan ralat itu, tetapi ahli kumpulan itu sebenarnya mempunyai akses setara root. Penerangan lebih lanjut tentang fail Compose ada dalam asas Docker Compose di VPS. Baris restart: unless-stopped menghidupkan semula bekas selepas reboot, dan panduan Docker Compose hidup semula selepas boot menerangkan bila ia tidak mencukupi.

Peringkat 2: reverse proxy dengan TLS

Reverse proxy ialah satu pelayan web yang menerima semua trafik pada port 80 dan 443. Ia kemudian menghantar setiap permintaan ke aplikasi yang betul berdasarkan nama domain. TLS (transport layer security) ialah penyulitan di sebalik https. Caddy ialah pilihan yang mesra pemula, kerana ia memohon sijil TLS percuma daripada Let's Encrypt secara automatik melalui ACME (automatic certificate management environment). Konfigurasi Caddy untuk Uptime Kuma hanya tiga baris:

status.example.com {
    reverse_proxy 127.0.0.1:3001
}

Dua syarat mesti dipenuhi sebelum sijil dapat dikeluarkan. Rekod DNS (Domain Name System) untuk status.example.com mesti menunjuk ke alamat IP awam pelayan anda. Port 80 dan 443 pula mesti boleh dicapai dari internet. Jika salah satu tidak dipenuhi, Let's Encrypt tidak dapat mengesahkan bahawa anda mengawal domain itu, jadi sijil tidak dikeluarkan dan log Caddy menunjukkan cabaran ACME yang gagal. Inilah sebabnya pelayan rumah di belakang CGNAT tersekat di peringkat ini. Langkah penuh untuk DNS dan Caddy ada dalam panduan self-host laman web sendiri.

Peringkat 3: sandaran yang pernah anda pulihkan

Anda hanya tahu sandaran anda berfungsi selepas anda memulihkannya sekali. Untuk aplikasi Compose ini, semua data berada dalam folder data di sebelah compose.yaml. Hentikan bekas dahulu, kerana menyalin fail pangkalan data semasa aplikasi sedang menulis boleh menghasilkan salinan yang tidak boleh dibuka.

cd ~/uptime-kuma
sudo docker compose stop
sudo tar czf ~/uptime-kuma-$(date +%F).tgz data compose.yaml
sudo docker compose start

Sekarang uji pemulihan dalam folder lain, pada port lain, supaya salinan asal tidak terusik. Tukar tarikh dalam nama fail kepada tarikh sandaran anda:

mkdir ~/ujian-pulih && cd ~/ujian-pulih
sudo tar xzf ~/uptime-kuma-2026-10-04.tgz
sudo sed -i 's/127.0.0.1:3001:3001/127.0.0.1:3002:3001/' compose.yaml
sudo docker compose up -d

Compose menamakan projek mengikut nama folder, jadi bekas ujian ini tidak bertembung dengan yang asal. Buka port 3002 melalui terowong SSH dan pastikan semua monitor anda masih ada. Selepas itu, jalankan sudo docker compose down dalam folder ujian-pulih. Akhir sekali, salin fail .tgz itu ke mesin lain. Sandaran yang disimpan pada pelayan yang sama akan hilang bersama pelayan itu.

Bagaimana jika pelayan anda menyimpan data orang lain?

Self-hosting untuk diri sendiri berbeza daripada menyimpan data pelanggan atau orang awam. Apabila pelayan anda memegang data peribadi orang lain dalam urusan komersial, Akta Perlindungan Data Peribadi 2010 (PDPA, Akta 709) boleh terpakai. Contohnya, borang tempahan untuk perniagaan kecil, atau senarai pelanggan dalam aplikasi yang anda self-host. Halaman ini tidak memberi nasihat undang-undang. Untuk gambaran yang lebih luas, baca adakah self-hosting sah di sisi undang-undang, dan dapatkan nasihat profesional jika data orang lain terlibat.

Di mana hendak bermula minggu ini?

  1. Semak talian rumah anda dengan membandingkan alamat WAN router dan alamat IP awam.
  2. Pilih tempat untuk pelayan pertama: mini PC di rumah, atau VPS kecil jika talian anda di belakang CGNAT.
  3. Pasang Docker dan jalankan Uptime Kuma pada 127.0.0.1.
  4. Buat sandaran, kemudian pulihkannya ke folder lain dan pastikan ia berfungsi.
  5. Selepas itu barulah tambah domain dan Caddy. Aplikasi kedua datang kemudian.

FAQ

Adakah self-hosting percuma?

Kebanyakan perisian self-hosting ialah sumber terbuka dan percuma. Kosnya datang dari tempat lain: perkakasan, elektrik, talian internet dan masa anda, atau bil bulanan jika anda menggunakan VPS. Mini PC 15 W yang hidup 24/7 menggunakan kira-kira 10.8 kWh sebulan, iaitu sekitar RM4.80 sebulan pada kadar asas TNB 44.43 sen/kWh setakat Oktober 2026. Desktop lama 80 W pula berharga sekitar RM25.59 sebulan.

Bolehkah saya self-host di rumah jika talian saya di belakang CGNAT?

Boleh, tetapi bukan dengan port forwarding. Dengan CGNAT, sambungan masuk dibuang oleh peralatan NAT milik ISP sebelum sampai ke router anda. Penyelesaian yang biasa ialah terowong songsang: pelayan rumah membuka sambungan keluar ke VPS yang mempunyai IP awam, dan VPS itu menerima trafik bagi pihak pelayan rumah. Untuk menyemak talian anda, bandingkan alamat WAN pada router dengan keputusan curl -4 https://api.ipify.org. Alamat WAN dalam julat 100.64.0.0/10 menunjukkan CGNAT.

Perlukah saya pandai Linux untuk mula self-hosting?

Anda perlu selesa dengan asas terminal, terutamanya log masuk melalui SSH dan mengedit fail dengan nano. Docker Compose mengurangkan banyak kerja pemasangan, kerana setiap aplikasi membawa pustakanya sendiri. Kemahiran yang paling berguna ialah membaca mesej ralat dan log, kemudian memahami puncanya.

Mana lebih baik untuk pemula, pelayan rumah atau VPS?

VPS lebih mudah untuk belajar, kerana ia datang dengan alamat IP awam yang tetap, jadi masalah IP dinamik dan CGNAT tidak wujud. Pelayan rumah lebih menjimatkan apabila anda perlukan storan yang besar, contohnya untuk gambar atau media. Ramai orang bermula dengan VPS kecil, kemudian menambah pelayan rumah untuk storan dan menyambungkan kedua-duanya.