Self-Hosted FiveM CDN vs Managed CDN: Mana Lebih Efisien?

Membangun CDN FiveM sendiri dengan nginx di VPS atau memakai managed CDN? Perbandingan jujur soal biaya, waktu maintenance, keamanan, dan kontrol, lengkap dengan contoh konfigurasi nginx proxy_cache yang bisa kamu pakai.

5 menit baca FiveM

CDN untuk FiveM pada dasarnya adalah reverse proxy dengan cache di depan endpoint /files/ FXServer. Karena konsepnya sederhana, banyak developer bertanya: kenapa tidak bikin sendiri saja dengan nginx di VPS murah?

Jawabannya: bisa, dan untuk sebagian tim itu memang pilihan yang tepat. Artikel ini membandingkan dua jalur itu secara jujur, termasuk contoh konfigurasi nginx yang bisa kamu pakai. Sebagai keterbukaan, Noctis menjual managed Game CDN, jadi kami punya kepentingan. Karena itu, kami jelaskan juga kapan kamu sebaiknya tidak memakai layanan seperti milik kami.

Kalau konsep CDN FiveM masih baru buatmu, baca dulu apa itu FiveM CDN dan cara kerjanya.

Apa yang sebenarnya dikerjakan CDN FiveM

FXServer punya perintah fileserver_add untuk mengarahkan download resource ke alamat lain. Alurnya:

  1. Pemain join, klien meminta file resource ke alamat CDN.
  2. Kalau file belum ada di cache (MISS), CDN mengambilnya dari FXServer, menyimpannya, lalu mengirimkannya ke pemain.
  3. Pemain berikutnya yang meminta file yang sama dilayani langsung dari cache (HIT). FXServer tidak dihubungi lagi untuk file itu.

Self-hosted maupun managed melakukan hal yang sama. Bedanya ada di siapa yang memasang, memantau, dan memperbaikinya.

Opsi 1: self-hosted dengan nginx

Kamu butuh satu VPS dengan disk yang cukup untuk menampung seluruh resource stream, bandwidth yang memadai, dan lokasi dekat pemain. Berikut contoh konfigurasi nginx yang masuk akal sebagai titik awal:

# /etc/nginx/conf.d/fivem-cdn.conf
proxy_cache_path /var/cache/fivem levels=1:2 keys_zone=fivem:50m
                 max_size=40g inactive=30d use_temp_path=off;

server {
    listen 80;
    server_name _;

    location /files/ {
        proxy_pass http://ORIGIN_IP:30120/files/;
        proxy_http_version 1.1;

        proxy_cache fivem;
        # $request_uri menyertakan query string, jadi versi resource ikut jadi bagian key
        proxy_cache_key $request_uri;
        proxy_cache_valid 200 30d;
        proxy_cache_valid 404 1m;
        proxy_ignore_headers Cache-Control Expires Set-Cookie;

        # satu request ke origin per file, walau banyak pemain minta bersamaan
        proxy_cache_lock on;
        proxy_cache_lock_timeout 60s;
        # tetap layani file lama kalau origin sedang restart
        proxy_cache_use_stale error timeout updating http_502 http_503 http_504;

        add_header X-Cache $upstream_cache_status always;
    }

    location / { return 404; }
}

Lalu di server.cfg:

fileserver_add ".*" "http://IP_VPS_CDN/files"

Beberapa catatan penting supaya konfigurasi ini tidak menjadi sumber masalah:

  • Cache key harus menyertakan versi resource. Kalau kamu memakai key tanpa query string, pemain bisa mendapat file lama setelah update. $request_uri aman untuk ini.
  • max_size harus lebih kecil dari disk, dan lebih besar dari total ukuran resource stream kamu. Kalau terlalu kecil, file terus tergeser dan cache sering MISS.
  • proxy_cache_lock penting saat restart di jam ramai. Tanpa ini, 80 pemain yang join bersamaan bisa memicu 80 download file yang sama dari origin.
  • Batasi path. Contoh di atas hanya membuka /files/. Jangan jadikan VPS ini open proxy ke seluruh FXServer.
  • Firewall origin. Kalau origin memakai allowlist, tambahkan IP VPS CDN untuk TCP 30120.

Uji dengan dua request ke URL file yang sama:

curl -sI "http://IP_VPS_CDN/files/PATH_DARI_LOG" | grep -i x-cache   # MISS
curl -sI "http://IP_VPS_CDN/files/PATH_DARI_LOG" | grep -i x-cache   # HIT

Pekerjaan yang ikut datang

Konfigurasi di atas adalah bagian mudahnya. Pekerjaan yang sering terlupakan:

  • Update keamanan OS dan nginx secara rutin.
  • Memantau disk, bandwidth, dan error rate. Kalau disk penuh atau nginx mati, pemain tidak bisa download resource dan server terlihat "rusak". Contoh alat pemantauan ada di monitoring FiveM dengan Prometheus dan Grafana.
  • Rotasi log access, karena log nginx untuk ribuan file bisa tumbuh cepat.
  • Purge cache manual saat ada masalah, misalnya dengan menghapus isi /var/cache/fivem lalu reload nginx.
  • Kalau pindah origin, ubah proxy_pass, reload, dan pastikan firewall origin baru sudah benar.
  • Kalau butuh HTTPS: domain, sertifikat, dan perpanjangannya.

Opsi 2: managed CDN

Dengan managed CDN, pekerjaan di atas dipegang penyedia. Sebagai contoh, ini yang kamu dapat di Noctis Game CDN:

  • Satu node cache milikmu sendiri di Jakarta atau Singapore, berjalan di Akamai Cloud (Linode) dan dijual ulang oleh Noctis. Satu layanan berarti satu node di satu lokasi.
  • Disk cache 25, 50, atau 80 GiB, bandwidth 900 GB, 1,8 TB, atau 3,6 TB per bulan, harga Rp 250.000, Rp 595.000, atau Rp 1.190.000 per bulan.
  • Cache per versi resource, jadi update resource otomatis diambil ulang.
  • Tombol Purge cache dan Change FXServer di panel, tanpa SSH.
  • Setup: satu baris fileserver_add ".*" "http://CDN_IP/files".

Keterbatasannya juga perlu kamu tahu: node melayani HTTP saja (untuk HTTPS, pasang domain yang di-proxy Cloudflare di depannya), dan layanan ini tidak menyertakan proteksi anti-DDoS. Kamu juga tidak bisa mengubah konfigurasi nginx di dalam node.

Perbandingan langsung

AspekSelf-hosted (nginx di VPS)Managed CDN
Biaya bulananHarga VPS + kelebihan bandwidthHarga paket + bandwidth tambahan bila perlu
Waktu setupSatu sampai beberapa jam kalau sudah terbiasa LinuxBeberapa menit
MaintenanceTanggung jawabmuDitangani penyedia
Kontrol konfigurasiPenuh: cache rule, log, header, HTTPSTerbatas pada fitur panel
DebugAkses penuh ke logLewat panel dan support
Risiko salah konfigurasiAda di tanganmuLebih kecil, tapi tidak bisa diubah sendiri
Cocok untukTim yang punya sysadmin dan ingin kontrolTim kecil yang fokus ke gameplay dan script

Cara menghitung biaya yang adil

Perbandingan harga sering keliru karena hanya membandingkan harga VPS dengan harga paket CDN. Hitung tiga komponen:

  1. Biaya server: harga VPS dengan disk cukup, ditambah biaya bandwidth kalau kuota VPS terlampaui.
  2. Waktu orang: berapa jam per bulan untuk update, memantau, dan memperbaiki? Kalikan dengan nilai waktu orang itu, walaupun ia tidak dibayar.
  3. Biaya insiden: kalau CDN buatan sendiri mati di malam event dan tidak ada yang bangun, berapa pemain yang gagal join?

Contoh perhitungan (angka ilustrasi, bukan harga pasar): VPS Rp X per bulan, ditambah 3 jam kerja per bulan. Kalau satu jam waktu admin kamu bernilai Rp Y, biaya sebenarnya adalah Rp X + 3Y. Bandingkan angka itu dengan harga paket managed yang setara. Untuk memperkirakan berapa bandwidth yang kamu butuhkan, gunakan panduan menghitung bandwidth server FiveM.

Kapan sebaiknya self-hosted

  • Tim kamu sudah punya orang yang nyaman dengan Linux, nginx, dan monitoring.
  • Kamu butuh kontrol khusus: aturan cache berbeda per resource, log detail, atau integrasi dengan infrastruktur yang sudah ada.
  • Kamu sudah punya VPS atau server lain dengan sisa disk dan bandwidth di lokasi yang dekat pemain.
  • Kamu ingin belajar. Membangun CDN kecil sendiri adalah latihan infrastruktur yang bagus.

Kapan managed CDN lebih masuk akal

  • Tidak ada yang mau atau bisa mengurus server tambahan.
  • FXServer kamu di luar Indonesia, dan kamu butuh node di Jakarta atau Singapore tanpa membuka akun cloud baru.
  • Kamu ingin purge dan pindah origin dengan satu tombol.
  • Kamu lebih suka satu tagihan dan satu tempat support untuk urusan server.

Kapan tidak butuh CDN sama sekali

Kalau total resource stream kamu kecil, pemain sedikit, dan upload server kamu longgar, CDN mungkin belum perlu. Cek dulu ukuran resource dan pola join pemain. Panduan mempercepat download resource FiveM membahas cara mengukurnya. Kadang mengecilkan resource (tekstur terlalu besar, file tidak terpakai) memberi hasil lebih besar daripada menambah infrastruktur.

FAQ

Apakah nginx proxy_cache cukup untuk server ratusan pemain?

Secara teknis nginx sangat ringan untuk menyajikan file statis dari cache. Batas yang lebih sering terasa adalah bandwidth dan disk VPS, bukan CPU nginx. Pastikan port dan kuota bandwidth VPS sesuai kebutuhan jam ramai.

Apakah bisa memakai Cloudflare saja sebagai CDN FiveM?

Cloudflare bisa ditaruh di depan endpoint file, tapi perilaku cache dan batasan layanan untuk file biner besar bergantung pada paket dan ketentuan Cloudflare. Baca ketentuan mereka sebelum mengandalkannya. Di Noctis Game CDN, Cloudflare dipakai sebagai lapisan opsional untuk HTTPS, sementara cache tetap di node.

Apakah self-hosted CDN menyembunyikan IP origin?

Tidak dengan sendirinya. CDN hanya membawa download resource; pemain tetap terhubung ke IP game kamu untuk gameplay. Kalau tujuanmu menyembunyikan IP, baca cara menyembunyikan IP asli server FiveM dan perbedaan CDN dan IP Proxy.

Bisa pindah dari self-hosted ke managed (atau sebaliknya) tanpa downtime?

Bisa. Siapkan CDN baru, ganti baris fileserver_add, lalu restart server di jam sepi. Cache baru akan terisi seiring pemain join. Matikan CDN lama setelah yakin semuanya berjalan.

Apakah CDN mempengaruhi FPS atau lag di dalam game?

Tidak. CDN hanya mempercepat proses download resource. Untuk lag dan hitch saat bermain, lihat cara optimasi server FiveM agar tidak lag.

Gabung Discord