Pemrograman

Panduan 9Router: Instalasi dan Fallback AI Otomatis

M
MUGHU
36 menit baca
Panduan 9Router: Instalasi dan Fallback AI Otomatis
Daftar isi

9Router adalah gerbang AI lokal yang menyatukan Claude Code, Codex, Cursor, Cline, Copilot, dan berbagai alat lain melalui satu endpoint yang kompatibel dengan OpenAI. Alih-alih mengganti alamat API secara manual saat kuota habis, Teman-Teman bisa menyusun jalur otomatis dari layanan berlangganan ke penyedia berbiaya rendah, lalu ke opsi gratis.

Ringkasnya: 9Router berjalan sebagai proxy lokal di http://localhost:20128, meneruskan permintaan ke berbagai penyedia AI, menerjemahkan format API bila diperlukan, memantau kuota, dan menjalankan fallback otomatis saat layanan utama tidak tersedia.

Panduan ini membahas instalasi 9Router dari GitHub, npm, dan Docker. Isinya juga mencakup konfigurasi penyedia, integrasi dengan alat coding, keamanan, pengujian endpoint, kesalahan umum, serta contoh penerapan pada tim pengembang di Indonesia.

Latar Belakang: Masalah Saat Memakai Banyak Layanan AI

Banyak pengembang memakai lebih dari satu layanan AI. Claude Code mungkin dipakai untuk memahami basis kode, Codex untuk pekerjaan terminal, sementara Cursor atau Cline membantu menyunting proyek langsung dari editor.

Masalahnya, setiap alat biasanya memiliki konfigurasi sendiri:

  • Alamat API berbeda.

  • Nama model berbeda.

  • Kunci API tersimpan di beberapa tempat.

  • Kuota dan batas permintaan sulit dipantau.

  • Format permintaan OpenAI, Anthropic, dan Gemini tidak selalu sama.

  • Saat satu penyedia bermasalah, perpindahan harus dilakukan secara manual.

Gangguan kecil ini terlihat sepele. Namun, jika terjadi berkali-kali dalam sehari, dampaknya terasa pada fokus, waktu kerja, dan biaya.

Misalnya, seorang pengembang sedang memperbaiki masalah produksi pada malam hari. Model utama mencapai batas kuota, lalu pengembang harus membuka pengaturan editor, mengganti endpoint, memilih model lain, dan mengulangi permintaan. Lima menit mungkin tidak lama, tetapi konteks berpikir sudah telanjur terputus.

AI router adalah lapisan perantara yang menerima permintaan dari alat coding, memilih penyedia atau model berdasarkan aturan, lalu mengembalikan jawaban dalam format yang dipahami alat tersebut.

9Router mencoba menyelesaikan masalah itu dengan satu endpoint lokal dan sistem fallback bertingkat:

  1. Langganan dipakai lebih dahulu agar kuota yang sudah dibayar tidak terbuang.

  2. Penyedia murah menjadi cadangan saat batas langganan tercapai.

  3. Penyedia gratis dipakai sebagai lapisan terakhir jika tersedia.

Pendekatan ini bukan berarti semua model otomatis gratis. Biaya tetap mengikuti penyedia yang Teman-Teman hubungkan. 9Router berperan sebagai pengatur lalu lintas, bukan penyedia semua model tersebut.

Tantangan yang Perlu Dipahami Sebelum Memasang 9Router

9Router memberi fleksibilitas, tetapi ada beberapa hal yang perlu dipahami sejak awal.

Kualitas model cadangan bisa berbeda

Model utama dan model fallback tidak selalu menghasilkan jawaban dengan kualitas yang sama. Model yang bagus untuk menulis kode belum tentu unggul saat menganalisis arsitektur atau membaca konteks panjang.

Karena itu, fallback sebaiknya disusun berdasarkan kebutuhan nyata, bukan sekadar harga termurah.

Kuota gratis dapat berubah

Penyedia bisa mengubah batas, persyaratan akun, wilayah layanan, atau model yang tersedia. Opsi yang gratis hari ini belum tentu memiliki kebijakan yang sama beberapa bulan lagi.

Periksa ketentuan resmi setiap penyedia sebelum mengandalkannya untuk pekerjaan penting.

Proxy lokal tetap memproses data sensitif

9Router berjalan di komputer atau server Teman-Teman, tetapi permintaan akhirnya tetap diteruskan ke penyedia model. Potongan kode, pesan sistem, dan keluaran terminal dapat keluar dari jaringan lokal sesuai jalur yang dipilih.

Untuk repositori perusahaan, periksa kebijakan keamanan, kontrak penyedia, lokasi pemrosesan data, dan aturan penyimpanan log.

Fallback tidak sama dengan jaminan tanpa gangguan

Fallback membantu mengurangi gangguan akibat batas kuota atau kegagalan penyedia. Namun, layanan tetap dapat terhenti karena:

  • Koneksi internet putus.

  • Semua penyedia gagal.

  • Kredensial kedaluwarsa.

  • Model dihapus oleh penyedia.

  • Format permintaan tidak didukung.

  • Server lokal berhenti.

  • Kebijakan akun membatasi penggunaan melalui proxy.

Jadi, istilah “tanpa downtime” lebih tepat dipahami sebagai tujuan desain, bukan jaminan mutlak.

Perbandingan Cara Instalasi 9Router

9Router dapat dijalankan melalui npm, Docker, atau langsung dari kode sumber. Pilihan terbaik bergantung pada tujuan pemakaian.

Metode

Tingkat kerumitan

Pembaruan

Isolasi

Cocok untuk

npm global

Rendah

Sangat mudah

Rendah

Laptop pribadi dan uji cepat

npx

Rendah

Mengambil paket saat dijalankan

Rendah

Percobaan tanpa instalasi permanen

Docker

Sedang

Ganti citra lalu buat ulang kontainer

Tinggi

Server, VPS, dan tim

Kode sumber

Tinggi

Mengikuti Git

Bisa diatur sendiri

Audit, kontribusi, dan pengembangan fitur

Pilih npm jika

  • Teman-Teman ingin mencoba 9Router secepat mungkin.

  • Node.js sudah terpasang.

  • Layanan hanya akan dipakai di satu komputer.

  • Tidak memerlukan pengaturan kontainer.

Pilih Docker jika

  • 9Router harus aktif terus di server.

  • Data perlu dipisahkan dari sistem utama.

  • Tim ingin proses penerapan yang mudah diulang.

  • Pembaruan perlu dikendalikan melalui versi citra.

Pilih kode sumber jika

  • Teman-Teman ingin memeriksa implementasi.

  • Ada rencana menyumbang perubahan.

  • Perlu menguji cabang atau commit tertentu.

  • Organisasi mewajibkan audit kode sebelum penerapan.

Untuk lingkungan produksi, MUGHU lebih menyarankan Docker dengan versi citra yang dikunci daripada tag latest. Alasannya sederhana: penerapan harus bisa diulang dengan hasil yang konsisten.

Step 1 — Siapkan Sistem dan Periksa Prasyarat

Instalasi npm dan kode sumber membutuhkan Node.js 18 atau lebih baru. Docker tidak mewajibkan Node.js pada komputer host karena runtime sudah berada di dalam citra.

Dokumentasi resmi Node.js menyediakan paket untuk Windows, macOS, dan Linux. Untuk pemasangan Docker, gunakan panduan Docker Engine atau Docker Desktop sesuai sistem operasi.

Periksa Node.js dan npm

Buka Terminal, PowerShell, atau Command Prompt, lalu jalankan:

BASH
node --version
npm --version

Contoh keluaran:

TEXT
v22.17.0
10.9.2

Versi persisnya boleh berbeda. Yang penting, Node.js memenuhi versi minimum yang dibutuhkan.

Periksa Git

Git diperlukan jika Teman-Teman ingin mengambil kode sumber:

BASH
git --version

Contoh keluaran:

TEXT
git version 2.49.0

Jika Git belum terpasang, unduh dari situs resmi Git.

Periksa Docker

Untuk metode Docker, jalankan:

BASH
docker --version
docker compose version

Contoh keluaran:

TEXT
Docker version 28.1.1, build 4eba377
Docker Compose version v2.35.1

Pastikan port 20128 tersedia

Secara bawaan, 9Router memakai port 20128. Periksa apakah port itu sedang dipakai.

Pada macOS atau Linux:

BASH
lsof -i :20128

Pada Windows PowerShell:

POWERSHELL
Get-NetTCPConnection -LocalPort 20128 -ErrorAction SilentlyContinue

Jika tidak ada keluaran, biasanya port tersebut tersedia.

Mengapa langkah ini penting? Server tidak bisa berjalan jika aplikasi lain sudah memakai alamat dan port yang sama. Memeriksanya lebih awal menghindari pesan kesalahan yang sering terlihat membingungkan.

Step 2 — Tentukan Lokasi dan Pola Penerapan

Sebelum menjalankan perintah instalasi, tentukan apakah 9Router hanya akan diakses dari komputer sendiri atau oleh beberapa perangkat.

Skenario A: Komputer pribadi

Gunakan npm dan biarkan layanan mendengarkan pada localhost. Ini menjadi pilihan paling sederhana untuk:

  • Laptop pengembang.

  • Proyek pribadi.

  • Eksperimen model.

  • Integrasi Cursor atau Cline pada mesin yang sama.

Skenario B: Server kantor atau VPS

Gunakan Docker dengan volume persisten, firewall, dan autentikasi endpoint. Jangan membuka port 20128 langsung ke internet tanpa pengamanan.

Skenario ini cocok untuk tim di Jakarta, Bandung, Surabaya, Yogyakarta, atau kota lain yang memiliki server pengembangan bersama. Lokasi bukan faktor teknis utama, tetapi latensi ke penyedia dan kestabilan koneksi internet dapat memengaruhi pengalaman.

Skenario C: Organisasi dengan aturan keamanan ketat

Jalankan dari kode sumber atau citra yang sudah dipindai. Kunci versi, tinjau dependensi, dan batasi penyedia yang boleh menerima kode internal.

Untuk repositori yang berisi data pelanggan, rahasia dagang, atau konfigurasi produksi, jangan langsung mengaktifkan semua fallback. Setiap penyedia tambahan memperluas batas kepercayaan.

Step 3 — Instal 9Router dengan npm

npm

Pemasangan global adalah jalur tercepat untuk penggunaan desktop.

Jalankan:

BASH
npm install -g 9router

Setelah selesai, periksa apakah perintah tersedia:

BASH
9router --help

Lalu mulai server:

BASH
9router

Versi CLI yang tersedia juga mendukung beberapa opsi praktis:

BASH
9router --port 8080
9router --no-browser
9router --skip-update
9router --help

Keluaran yang diharapkan

Tampilan dapat berubah antarversi, tetapi secara umum server akan menampilkan informasi seperti:

TEXT
9Router server started
Server: http://localhost:20128
Dashboard: http://localhost:20128/dashboard
API: http://localhost:20128/v1

Dashboard biasanya dapat dibuka melalui:

TEXT
http://localhost:20128/dashboard

Endpoint kompatibel OpenAI berada di:

TEXT
http://localhost:20128/v1

Menjalankan tanpa instalasi global

Jika hanya ingin mencoba, gunakan:

BASH
npx 9router

Cara ini mengurangi perubahan permanen pada sistem. Namun, proses awal dapat lebih lambat karena npm mungkin perlu mengambil paket terlebih dahulu.

Mengapa pemasangan global cocok untuk desktop?

Perintah 9router dapat dipanggil dari direktori mana pun. Teman-Teman tidak perlu membuat proyek Node.js khusus hanya untuk menjalankan gateway.

Kesalahan: 9router: command not found

Periksa lokasi binary npm:

BASH
npm config get prefix

Kemudian lihat apakah direktori binary global sudah masuk ke variabel PATH.

Pada Linux atau macOS:

BASH
npm bin -g
echo "$PATH"

Jika npm versi terbaru tidak mendukung npm bin -g, cari prefix lalu periksa subdirektori bin.

Pada Windows:

POWERSHELL
npm config get prefix
$env:Path

Tutup dan buka kembali terminal setelah instalasi. Perubahan PATH kadang belum dibaca oleh sesi terminal lama.

Kesalahan izin saat npm install -g

Hindari langsung memakai sudo sebagai solusi permanen. Lebih aman memakai pengelola versi Node.js seperti nvm agar paket global disimpan di direktori pengguna.

Jika instalasi global tetap bermasalah, jalankan:

BASH
npx 9router

atau gunakan Docker.

Step 4 — Instal 9Router dengan Docker

Docker Logo, symbol, meaning, history, PNG, brand

Docker menjaga aplikasi dan dependensinya tetap terisolasi. Ini membantu saat 9Router akan dijalankan pada server atau dipakai oleh lebih dari satu orang.

Jalankan kontainer sederhana

Perintah cepat dari citra resmi:

BASH
docker run -d \
  --name 9router \
  -p 20128:20128 \
  -v "$HOME/.9router:/app/data" \
  -e DATA_DIR=/app/data \
  decolua/9router:latest

Pada Windows PowerShell:

POWERSHELL
docker run -d `
  --name 9router `
  -p 20128:20128 `
  -v "${HOME}/.9router:/app/data" `
  -e DATA_DIR=/app/data `
  decolua/9router:latest

Periksa status:

BASH
docker ps

Contoh keluaran:

TEXT
CONTAINER ID   IMAGE                       STATUS          PORTS
a1b2c3d4e5f6   decolua/9router:latest      Up 20 seconds   0.0.0.0:20128->20128/tcp

Periksa log:

BASH
docker logs -f 9router

Tekan Ctrl+C untuk keluar dari tampilan log. Kontainer tetap berjalan di latar belakang.

Mengapa volume diperlukan?

Data 9Router mencakup konfigurasi, koneksi penyedia, dan basis data lokal. Tanpa volume, data tersebut bisa hilang saat kontainer dihapus.

Pada konfigurasi di atas, direktori host:

TEXT
~/.9router

dipasang ke:

TEXT
/app/data

Basis data Docker umumnya tersimpan di:

TEXT
/app/data/db/data.sqlite

Menggunakan Docker Compose

Docker Compose - an orchestration tool for spinning up multi-container ...

Buat direktori kerja:

BASH
mkdir 9router-deployment
cd 9router-deployment

Buat file compose.yaml:

YAML
services:
  9router:
    image: decolua/9router:latest
    container_name: 9router
    restart: unless-stopped
    ports:
      - "127.0.0.1:20128:20128"
    environment:
      DATA_DIR: /app/data
      PORT: 20128
      HOSTNAME: 0.0.0.0
      NEXT_TELEMETRY_DISABLED: "1"
    volumes:
      - ./data:/app/data

Jalankan:

BASH
docker compose up -d

Periksa:

BASH
docker compose ps
docker compose logs -f

Mengapa port diikat ke 127.0.0.1?

Baris ini:

YAML
ports:
  - "127.0.0.1:20128:20128"

membatasi akses dari mesin lokal. Ini lebih aman daripada membuka layanan pada semua antarmuka jaringan.

Jika tim memang perlu akses dari perangkat lain, gunakan reverse proxy, TLS, autentikasi, VPN, atau tunnel yang dikendalikan. Jangan sekadar menghapus 127.0.0.1 lalu membiarkan endpoint terbuka ke internet.

Kunci versi citra untuk produksi

Tag latest mudah dipakai, tetapi dapat berubah sewaktu-waktu. Untuk lingkungan yang harus stabil, gunakan tag versi tertentu, misalnya:

YAML
image: decolua/9router:0.5.30

Sebelum memilih versi, periksa rilis terbaru pada repositori resmi 9Router.

Mengapa ini penting? Jika server dibuat ulang minggu depan, versi yang dipakai tetap sama. Pembaruan dapat diuji lebih dulu, bukan masuk tanpa sengaja.

Step 5 — Jalankan 9Router dari Kode Sumber

Metode ini paling transparan karena Teman-Teman dapat melihat kode yang akan dijalankan.

Klon repositori:

BASH
git clone https://github.com/decolua/9router.git
cd 9router

Periksa cabang dan commit:

BASH
git status
git log -1 --oneline

Selanjutnya, baca struktur repositori dan petunjuk pada README. Susunan proyek dapat berubah, jadi jalankan perintah dari direktori aplikasi yang memiliki package.json.

Instal dependensi:

BASH
npm install

Untuk pengembangan:

BASH
npm run dev

Untuk build produksi:

BASH
npm run build
npm run start

Keluaran yang diharapkan

Pada mode pengembangan, keluaran umumnya mirip:

TEXT
Ready
Local: http://localhost:20128

Nama pesan dapat berbeda sesuai versi Next.js dan skrip proyek.

Mengapa menjalankan dari sumber lebih rumit?

Teman-Teman bertanggung jawab atas:

  • Versi Node.js.

  • Instalasi dependensi.

  • Proses build.

  • Variabel lingkungan.

  • Pembaruan kode.

  • Migrasi basis data.

  • Pengelolaan proses agar tetap berjalan.

Sebagai gantinya, metode ini memberi kendali lebih besar untuk audit dan modifikasi.

Gunakan commit atau tag tertentu

Untuk penerapan yang bisa diulang:

BASH
git fetch --tags
git tag --list
git checkout <nama-tag>

Ganti <nama-tag> dengan versi yang benar-benar tersedia di repositori.

Jangan mengarang nama tag berdasarkan versi npm. Pastikan tag Git memang ada dan sesuai dengan rilis yang hendak dipakai.

Step 6 — Pahami Direktori Data dan Buat Cadangan

Pada macOS dan Linux, instalasi lokal umumnya menyimpan data di:

TEXT
~/.9router/db/data.sqlite

Pada Windows, data biasanya berada di:

TEXT
%APPDATA%\9router\db\data.sqlite

Pada Docker dengan DATA_DIR=/app/data:

TEXT
/app/data/db/data.sqlite

Direktori cadangan dapat berada di:

TEXT
db/backups/

Cadangkan data lokal

Hentikan 9Router lebih dahulu agar basis data tidak sedang ditulis.

Pada macOS atau Linux:

BASH
cp -a ~/.9router ~/.9router-backup-$(date +%Y%m%d-%H%M%S)

Pada Windows PowerShell:

POWERSHELL
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
Copy-Item "$env:APPDATA\9router" "$env:APPDATA\9router-backup-$timestamp" -Recurse

Cadangkan penerapan Docker

Jika memakai bind mount ./data:/app/data:

BASH
docker compose stop
tar -czf "9router-backup-$(date +%Y%m%d-%H%M%S).tar.gz" ./data
docker compose start

Jika memakai named volume, proses pencadangan berbeda. Teman-Teman dapat menjalankan kontainer sementara untuk menyalin isi volume ke arsip.

Mengapa backup perlu dibuat sebelum pembaruan?

Versi baru mungkin menjalankan migrasi skema basis data. Jika proses gagal atau versi lama tidak bisa membaca skema baru, cadangan menjadi jalur pemulihan paling cepat.

Step 7 — Buka Dashboard dan Buat Kredensial Endpoint

Setelah server aktif, buka:

TEXT
http://localhost:20128/dashboard

Dashboard dipakai untuk mengelola:

  • Penyedia AI.

  • Akun dan kunci API.

  • Model.

  • Combo atau urutan fallback.

  • Kuota.

  • Statistik penggunaan.

  • Kunci untuk klien lokal.

  • Pengaturan integrasi.

Tampilan menu dapat berubah seiring pembaruan. Gunakan istilah yang paling dekat dengan Providers, Connections, Endpoint, Models, atau Combos.

Jangan gunakan kunci penyedia sebagai kunci klien

Ada dua jenis rahasia yang mudah tertukar:

  1. Kredensial penyedia, misalnya kunci OpenAI atau Anthropic.

  2. Kunci endpoint 9Router, yang dipakai Cursor, Cline, atau klien lain untuk mengakses router.

Memisahkan keduanya membantu mengurangi paparan kunci utama. Jika kunci klien bocor, Teman-Teman dapat menggantinya tanpa harus langsung memutar seluruh kredensial penyedia.

Simpan rahasia dengan benar

Jangan menaruh kunci API dalam:

  • Repositori Git.

  • Tangkapan layar.

  • Dokumen publik.

  • Tiket dukungan terbuka.

  • File .env yang ikut ter-commit.

  • Pesan grup yang bisa diakses terlalu banyak orang.

Tambahkan file rahasia ke .gitignore:

GITIGNORE
.env
.env.*
!.env.example
secrets/
*.key

Step 8 — Hubungkan Penyedia AI

Buka menu penyedia, pilih layanan, lalu gunakan metode autentikasi yang didukung. Tergantung penyedianya, pilihan dapat berupa:

  • API key.

  • OAuth.

  • Akun berlangganan.

  • Kredensial khusus layanan.

  • Opsi gratis tanpa autentikasi, bila tersedia.

Setelah terhubung, lakukan pengujian sederhana sebelum memasukkannya ke jalur fallback.

Urutan pengujian yang aman

  1. Hubungkan satu penyedia.

  2. Pilih satu model.

  3. Kirim permintaan singkat.

  4. Periksa respons dan log.

  5. Pastikan pemakaian tercatat.

  6. Baru tambahkan penyedia berikutnya.

Mengapa satu per satu? Jika lima penyedia ditambahkan sekaligus lalu permintaan gagal, sumber masalah lebih sulit ditemukan.

Periksa hal berikut pada setiap penyedia

  • Apakah akun aktif?

  • Apakah kunci memiliki izin yang benar?

  • Apakah model tersedia di wilayah akun?

  • Apakah saldo atau kuota mencukupi?

  • Apakah batas permintaan sesuai kebutuhan?

  • Apakah penggunaan melalui gateway diizinkan oleh ketentuan layanan?

  • Apakah data boleh dikirim untuk proyek tersebut?

Soal klaim layanan gratis

Beberapa layanan mungkin menyediakan tingkat gratis, promosi, atau model tanpa biaya. Namun, “gratis” dapat disertai:

  • Batas harian.

  • Batas kecepatan.

  • Antrean lebih lama.

  • Model yang berubah.

  • Pembatasan wilayah.

  • Kebijakan penggunaan wajar.

  • Persyaratan akun.

Jadikan opsi gratis sebagai cadangan yang berguna, bukan satu-satunya fondasi untuk layanan bisnis penting.

Step 9 — Susun Fallback Bertingkat

Sistem fallback adalah nilai utama 9Router untuk Claude Code, Codex, dan Cursor. Namun, urutannya harus disesuaikan dengan jenis pekerjaan.

Contoh rancangan:

Tingkat

Tujuan

Contoh karakteristik

Risiko utama

Tier 1

Kualitas dan konsistensi

Langganan atau model utama

Kuota bulanan habis

Tier 2

Biaya terkendali

API murah dengan kualitas memadai

Kualitas bisa berbeda

Tier 3

Menjaga akses

Tingkat gratis atau model cadangan

Batas ketat dan ketersediaan berubah

Contoh untuk pekerjaan coding harian

  1. Model utama dengan kemampuan coding kuat.

  2. Model lebih murah dengan konteks yang cukup.

  3. Model gratis untuk pertanyaan ringan.

  4. Penyedia darurat dengan batas penggunaan rendah.

Contoh untuk analisis repositori besar

  1. Model dengan jendela konteks panjang.

  2. Model cadangan yang juga mendukung konteks panjang.

  3. Model murah untuk meringkas hasil alat.

  4. Hindari fallback ke model berkonteks pendek tanpa pemotongan data.

Gunakan nama virtual bila tersedia

Combo atau model virtual dapat menyembunyikan perubahan penyedia dari klien. Misalnya, alat coding cukup memakai satu nama:

TEXT
coding-main

Di belakangnya, router bisa mengatur:

TEXT
Model A → Model B → Model C

Keuntungannya, pengaturan Cursor atau Cline tidak perlu diubah saat urutan backend diperbarui.

Jangan mencampur model tanpa menguji perilaku

Dua model yang sama-sama menerima format chat belum tentu menangani hal berikut dengan cara serupa:

  • Tool calling.

  • JSON terstruktur.

  • Prompt sistem.

  • Gambar.

  • Konteks panjang.

  • Tingkat penalaran.

  • Streaming.

  • Penggunaan cache.

  • Pengeditan kode.

Uji tugas nyata, bukan hanya pesan “halo”.

Step 10 — Uji Endpoint OpenAI-Compatible dengan cURL

Sebelum menghubungkan editor, uji endpoint secara langsung. Ini memisahkan masalah router dari masalah konfigurasi alat.

Periksa daftar model

BASH
curl http://localhost:20128/v1/models \
  -H "Authorization: Bearer KUNCI_9ROUTER"

Pada Windows PowerShell, gunakan curl.exe agar tidak terkena alias bawaan:

POWERSHELL
curl.exe http://localhost:20128/v1/models `
  -H "Authorization: Bearer KUNCI_9ROUTER"

Contoh keluaran:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "coding-main",
      "object": "model"
    }
  ]
}

Ganti KUNCI_9ROUTER dengan kunci endpoint yang dibuat melalui dashboard.

Kirim permintaan chat

BASH
curl http://localhost:20128/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer KUNCI_9ROUTER" \
  -d '{
    "model": "coding-main",
    "messages": [
      {
        "role": "user",
        "content": "Tulis fungsi JavaScript untuk memeriksa bilangan prima."
      }
    ]
  }'

Contoh bentuk respons:

JSON
{
  "id": "chatcmpl-example",
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Berikut fungsi JavaScript..."
      },
      "finish_reason": "stop"
    }
  ]
}

Nilai persisnya bergantung pada model dan penyedia.

Mengapa pengujian cURL penting?

Jika cURL berhasil tetapi editor gagal, masalah kemungkinan berada pada:

  • URL yang dimasukkan ke editor.

  • Nama model.

  • Kunci klien.

  • Pengaturan kompatibilitas.

  • Ekstensi editor.

  • Dukungan streaming atau tool calling.

Jika cURL juga gagal, fokuskan pemeriksaan pada 9Router, penyedia, jaringan, atau kredensial.

Step 11 — Hubungkan Cursor, Cline, Codex, atau Klien Lain

Sebagian besar alat yang mendukung endpoint OpenAI-compatible memerlukan tiga nilai:

TEXT
Base URL: http://localhost:20128/v1
API Key: KUNCI_9ROUTER
Model: coding-main

Nama model harus sama dengan model atau combo yang tersedia di dashboard.

Pola konfigurasi variabel lingkungan

Beberapa klien membaca variabel seperti:

BASH
export OPENAI_BASE_URL="http://localhost:20128/v1"
export OPENAI_API_KEY="KUNCI_9ROUTER"

Pada Windows PowerShell:

POWERSHELL
$env:OPENAI_BASE_URL = "http://localhost:20128/v1"
$env:OPENAI_API_KEY = "KUNCI_9ROUTER"

Nama variabel dapat berbeda pada setiap alat. Periksa dokumentasi resmi alat yang dipakai.

Kesalahan umum pada Base URL

Beberapa klien menginginkan:

TEXT
http://localhost:20128/v1

Klien lain mungkin menambahkan /v1 sendiri dan hanya menginginkan:

TEXT
http://localhost:20128

Jika log menunjukkan alamat seperti:

TEXT
http://localhost:20128/v1/v1/chat/completions

berarti /v1 ditambahkan dua kali.

Sebaliknya, jika permintaan menuju:

TEXT
http://localhost:20128/chat/completions

padahal rute itu tidak tersedia, tambahkan /v1 pada Base URL.

Saat editor berjalan di dalam Docker

localhost di dalam kontainer menunjuk ke kontainer itu sendiri, bukan komputer host.

Pada Docker Desktop, coba:

TEXT
http://host.docker.internal:20128/v1

Pada Linux, Teman-Teman mungkin perlu menambahkan pemetaan host:

YAML
extra_hosts:
  - "host.docker.internal:host-gateway"

Kemudian gunakan alamat yang sama dari kontainer klien.

Saat memakai WSL

Jika 9Router berjalan di Windows dan klien berjalan di WSL, localhost kadang bekerja karena penerusan jaringan WSL. Jika tidak, cari alamat host Windows dari WSL:

BASH
grep nameserver /etc/resolv.conf

Lalu uji:

BASH
curl http://ALAMAT_HOST:20128/v1/models

Pastikan firewall Windows mengizinkan koneksi tersebut.

Step 12 — Aktifkan Penghematan Token dengan Hati-Hati

9Router mempromosikan RTK Token Saver untuk mengompresi keluaran alat seperti:

  • git diff

  • grep

  • find

  • ls

  • Struktur direktori

  • Log terminal yang panjang

Klaim penghematan yang dipublikasikan berada di kisaran 20–40% untuk keluaran alat tertentu, sedangkan hasil nyata bergantung pada isi permintaan dan pola kerja.

Mengapa keluaran alat boros token?

Perintah seperti berikut dapat menghasilkan ribuan baris:

BASH
git diff
grep -R "TODO" .
find . -type f

Jika seluruh hasil dikirim ke model tanpa penyaringan, banyak token habis untuk:

  • Baris berulang.

  • Jalur file yang tidak relevan.

  • Metadata.

  • Konteks yang tidak dipakai.

  • Log sukses yang tidak membantu diagnosis.

Kompresi mencoba mempertahankan informasi penting sambil memangkas bagian yang kurang bernilai.

Kapan kompresi sebaiknya diuji lebih dahulu?

Berhati-hatilah pada tugas yang membutuhkan detail persis:

  • Audit keamanan.

  • Analisis stack trace lengkap.

  • Perbandingan patch baris demi baris.

  • Migrasi basis data.

  • Pemeriksaan lisensi.

  • Forensik insiden.

  • Validasi keluaran pengujian.

Kompresi yang terlalu agresif dapat membuang detail kecil yang justru penting.

Cara mengukur manfaat sebenarnya

Lakukan pengujian A/B pada tugas yang sama:

  1. Jalankan tanpa kompresi.

  2. Catat token input dan output.

  3. Jalankan dengan RTK.

  4. Bandingkan kualitas jawaban.

  5. Catat apakah ada informasi penting yang hilang.

  6. Hitung biaya dan waktu respons.

Gunakan rumus sederhana:

TEXT
Penghematan (%) =
(Token awal - Token setelah kompresi)
÷ Token awal × 100

Contoh:

TEXT
Token awal: 50.000
Token setelah kompresi: 34.000

Penghematan:
(50.000 - 34.000) ÷ 50.000 × 100 = 32%

Angka 32% dalam contoh ini masuk akal secara matematis, tetapi bukan jaminan hasil untuk semua proyek.

Step 13 — Pantau Kuota, Biaya, dan Kualitas

Router yang berjalan belum tentu router yang efektif. Teman-Teman perlu melihat apakah jalur fallback benar-benar menghemat biaya tanpa menurunkan mutu kerja.

Metrik yang layak dipantau

Metrik

Mengapa penting

Tanda masalah

Permintaan per penyedia

Menunjukkan distribusi beban

Semua trafik masuk ke cadangan

Rasio fallback

Mengukur kestabilan tier utama

Fallback terlalu sering

Token input

Menggambarkan ukuran konteks

Naik tanpa alasan jelas

Token output

Menggambarkan panjang jawaban

Jawaban berlebihan

Waktu respons

Mempengaruhi produktivitas

Lonjakan pada provider tertentu

Tingkat kegagalan

Mengukur keandalan

Kesalahan berulang

Biaya per tugas

Menilai efisiensi

Model mahal dipakai untuk tugas ringan

Kualitas hasil

Menjaga manfaat bisnis

Banyak revisi manual

Jangan hanya mengejar harga per token

Model murah dapat menjadi mahal jika:

  • Jawaban sering salah.

  • Perlu tiga kali pengulangan.

  • Menghasilkan patch yang gagal.

  • Menghabiskan waktu tinjauan.

  • Tidak memahami struktur repositori.

  • Membutuhkan konteks yang dikirim berulang.

Ukuran ROI yang lebih masuk akal adalah biaya per tugas yang selesai dengan benar, bukan biaya per sejuta token saja.

Tentukan anggaran operasional

Untuk tim, buat batas sederhana:

  • Anggaran harian.

  • Anggaran mingguan.

  • Model yang boleh dipakai untuk tugas ringan.

  • Model yang hanya boleh dipakai untuk analisis kompleks.

  • Batas ukuran konteks.

  • Aturan fallback saat saldo rendah.

Pendekatan ini membantu mencegah router berubah menjadi jalur otomatis menuju tagihan tak terduga.

Step 14 — Amankan Penerapan untuk Tim

Penerapan lokal pada laptop berbeda dengan endpoint bersama. Begitu 9Router bisa diakses oleh banyak orang, kebutuhan keamanannya meningkat.

Batasi jangkauan jaringan

Untuk penggunaan lokal:

YAML
ports:
  - "127.0.0.1:20128:20128"

Untuk server tim, letakkan layanan di belakang:

  • VPN.

  • Reverse proxy.

  • TLS.

  • Firewall.

  • Kontrol akses.

  • Pemantauan log.

  • Pembatasan kecepatan.

Jangan memublikasikan dashboard

Dashboard biasanya memiliki akses ke konfigurasi sensitif. Pisahkan akses dashboard dari akses API jika arsitektur memungkinkan.

Minimal, batasi akses berdasarkan:

  • Alamat IP.

  • Jaringan privat.

  • VPN perusahaan.

  • Autentikasi tambahan pada reverse proxy.

Contoh reverse proxy Nginx

Contoh ini hanya fondasi. Sesuaikan sertifikat, domain, batas permintaan, dan autentikasi.

NGINX
server {
    listen 443 ssl http2;
    server_name ai-router.example.com;

    ssl_certificate /etc/letsencrypt/live/ai-router.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai-router.example.com/privkey.pem;

    client_max_body_size 128m;

    location /v1/ {
        proxy_pass http://127.0.0.1:20128;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_buffering off;
        proxy_read_timeout 600s;
    }
}

Untuk streaming, proxy_buffering off membantu mencegah respons tertahan di reverse proxy.

Lindungi backup

Cadangan basis data dapat berisi konfigurasi dan rahasia. Simpan dengan:

  • Enkripsi.

  • Hak akses terbatas.

  • Retensi yang jelas.

  • Lokasi terpisah.

  • Prosedur pemusnahan.

Backup yang tidak terlindungi bisa lebih berbahaya daripada server utama karena sering luput dari pemantauan.

Step 15 — Sesuaikan Variabel Lingkungan

Beberapa variabel yang relevan pada penerapan lokal meliputi:

Variabel

Nilai bawaan umum

Fungsi

PORT

20128

Port layanan

HOSTNAME

0.0.0.0

Antarmuka jaringan

NEXT_PUBLIC_BASE_URL

http://localhost:20128

URL dasar dashboard dan API

DATA_DIR

Bergantung metode

Lokasi data persisten

NEXT_TELEMETRY_DISABLED

1 pada citra tertentu

Menonaktifkan telemetri Next.js

NINEROUTER_PROXY_CLIENT_MAX_BODY_SIZE

128mb

Batas ukuran payload

STREAM_STALL_TIMEOUT_MS

360000

Batas jeda antarbagian streaming

STREAM_FIRST_CHUNK_TIMEOUT_MS

200000

Batas waktu token pertama

Nilai aktual dapat berubah antarversi. Periksa dokumentasi dan kode versi yang sedang dipakai.

Contoh file .env

DOTENV
PORT=20128
HOSTNAME=127.0.0.1
NEXT_PUBLIC_BASE_URL=http://localhost:20128
NINEROUTER_PROXY_CLIENT_MAX_BODY_SIZE=128mb
STREAM_STALL_TIMEOUT_MS=360000
STREAM_FIRST_CHUNK_TIMEOUT_MS=200000

Jangan menaikkan timeout tanpa diagnosis

Timeout panjang dapat membantu model lambat, tetapi juga membuat koneksi gagal menggantung terlalu lama.

Sebelum mengubahnya, periksa:

  • Apakah penyedia memang lambat?

  • Apakah DNS bermasalah?

  • Apakah proxy kantor memutus streaming?

  • Apakah model sedang antre?

  • Apakah payload terlalu besar?

  • Apakah fallback berjalan?

Naikkan nilai bertahap dan catat hasilnya.

Step 16 — Uji Fallback Secara Sengaja

Fallback tidak cukup hanya dikonfigurasi. Teman-Teman harus membuktikan bahwa sistem berpindah jalur dengan benar.

Skenario pengujian

  1. Buat combo berisi dua penyedia.

  2. Pastikan keduanya dapat merespons secara terpisah.

  3. Nonaktifkan sementara penyedia pertama.

  4. Kirim permintaan melalui combo.

  5. Periksa apakah penyedia kedua menerima permintaan.

  6. Aktifkan kembali penyedia pertama.

  7. Ulangi untuk melihat apakah prioritas kembali normal.

Catat hasil

Gunakan tabel pengujian:

Skenario

Hasil yang diharapkan

Hasil aktual

Status

Tier 1 aktif

Permintaan lewat Tier 1

Sesuai

Lulus

Tier 1 gagal

Berpindah ke Tier 2

Sesuai

Lulus

Tier 1 dan 2 gagal

Berpindah ke Tier 3

Timeout

Gagal

Semua tier pulih

Kembali ke prioritas awal

Sesuai

Lulus

Mengapa pengujian kegagalan penting?

Sistem cadangan sering terlihat baik saat semuanya sehat. Masalah baru muncul ketika kredensial kedaluwarsa, respons streaming terputus, atau penyedia mengembalikan kesalahan yang tidak dianggap layak untuk fallback.

Pengujian sengaja membantu menemukan kelemahan itu sebelum insiden nyata.

Step 17 — Terapkan pada Kasus Nyata Tim Pengembang

Bayangkan sebuah tim berisi enam pengembang yang mengerjakan platform perdagangan lokal. Sebagian bekerja dari Jakarta, sebagian dari Bandung, dan semuanya memakai kombinasi Cursor, Codex, serta Claude Code.

Background

Sebelum memakai router, setiap anggota tim menyimpan konfigurasi sendiri. Ada yang memakai akun berlangganan, ada yang memakai API berbasis pemakaian, dan beberapa orang mengganti model secara manual ketika batas tercapai.

Hasilnya, sulit menjawab pertanyaan sederhana:

  • Model mana yang paling banyak dipakai?

  • Berapa biaya rata-rata per tugas?

  • Mengapa satu anggota tim sering terkena rate limit?

  • Apakah kode sensitif dikirim ke penyedia yang sudah disetujui?

  • Apakah fallback benar-benar bekerja?

Challenge atau masalah utama

Tim menemukan tiga masalah operasional:

  1. Konfigurasi tidak konsisten. Nama model dan endpoint berbeda pada tiap laptop.

  2. Kuota tidak dimanfaatkan secara efisien. Sebagian langganan masih memiliki kuota saat periode berakhir.

  3. Biaya sulit diprediksi. Model mahal kadang dipakai untuk tugas ringan seperti membuat dokumentasi fungsi.

Approach

Tim memilih satu deployment Docker pada jaringan privat. Mereka membuat tiga jalur:

  • coding-premium untuk refactoring dan analisis arsitektur.

  • coding-standard untuk tugas coding harian.

  • coding-budget untuk dokumentasi, ringkasan, dan pekerjaan rutin.

Fallback disusun berdasarkan kecocokan kemampuan, bukan hanya harga.

Implementation

Tim menjalankan layanan dengan konfigurasi seperti berikut:

YAML
services:
  9router:
    image: decolua/9router:0.5.30
    container_name: 9router
    restart: unless-stopped
    ports:
      - "127.0.0.1:20128:20128"
    environment:
      DATA_DIR: /app/data
      PORT: 20128
      HOSTNAME: 0.0.0.0
      NEXT_TELEMETRY_DISABLED: "1"
    volumes:
      - ./data:/app/data

Akses dari anggota tim melewati VPN dan reverse proxy internal. Setiap orang menerima kunci klien terpisah agar penggunaan bisa dilacak dan kunci dapat dicabut tanpa mengganggu seluruh tim.

Tim lalu membuat aturan penggunaan:

  • Tugas dokumentasi memakai jalur hemat.

  • Review keamanan memakai model yang sudah disetujui.

  • Repositori pelanggan tertentu tidak boleh memakai penyedia gratis.

  • Konteks yang memuat rahasia harus dibersihkan sebelum dikirim.

  • Perubahan fallback ditinjau oleh dua orang.

Results dengan metrik yang masuk akal

Angka berikut adalah contoh kerangka evaluasi, bukan tolok ukur resmi 9Router.

Setelah empat minggu, tim dapat membandingkan periode sebelum dan sesudah penerapan:

Metrik

Sebelum

Sesudah

Perubahan

Perubahan endpoint manual

18 kali/minggu

3 kali/minggu

Turun 83%

Permintaan gagal karena kuota

7,4%

2,1%

Turun 5,3 poin

Token input tugas rutin

100%

72%

Turun 28%

Waktu konfigurasi anggota baru

45 menit

15 menit

Turun 67%

Biaya rata-rata per tugas rutin

Rp4.800

Rp3.200

Turun 33%

Metrik seperti ini hanya layak dipercaya jika tim mencatat baseline, kategori tugas, dan periode pengujian yang sama. Tanpa baseline, angka penghematan mudah terlihat bagus tetapi kurang bermakna.

Key Learnings dari penerapan

  • Fallback terbaik tidak selalu memakai model termurah.

  • Kunci klien per orang memudahkan audit.

  • Pengujian cURL mempercepat diagnosis.

  • Kompresi token perlu dibandingkan dengan kualitas jawaban.

  • Tag citra sebaiknya dikunci untuk produksi.

  • Penyedia gratis tidak cocok untuk semua jenis data.

  • Dashboard sebaiknya tidak dibuka langsung ke internet.

Step 18 — Bandingkan 9Router dengan Alternatif

Tidak semua tim membutuhkan router lokal. Berikut perbandingan pendekatan yang umum.

Pilihan

Kendali routing

Kemudahan

Fallback

Privasi konfigurasi

Beban operasional

9Router lokal

Tinggi

Sedang

Kuat

Tinggi

Sedang

API langsung satu penyedia

Rendah

Tinggi

Tidak ada

Sedang

Rendah

Gateway AI terkelola

Sedang

Tinggi

Umumnya ada

Bergantung layanan

Rendah

Proxy buatan sendiri

Sangat tinggi

Rendah

Sesuai implementasi

Tinggi

Sangat tinggi

Konfigurasi per alat

Rendah

Sedang

Manual

Tersebar

Sedang

9Router vs API langsung

API langsung lebih sederhana. Teman-Teman hanya mengatur satu kunci dan satu endpoint.

Pilih API langsung jika:

  • Hanya memakai satu penyedia.

  • Kuota jarang habis.

  • Tidak membutuhkan fallback.

  • Tim tidak ingin mengelola gateway.

Pilih 9Router jika:

  • Ada beberapa penyedia.

  • Perpindahan manual sering terjadi.

  • Perlu satu endpoint untuk banyak alat.

  • Kuota dan biaya perlu diatur lebih rapi.

9Router vs gateway terkelola

Gateway terkelola mengurangi pekerjaan server, pembaruan, dan pemantauan. Sebagai gantinya, konfigurasi serta lalu lintas melewati pihak tambahan.

9Router lokal cocok jika organisasi ingin:

  • Menyimpan konfigurasi router di infrastruktur sendiri.

  • Mengatur urutan penyedia secara langsung.

  • Menghindari biaya platform tambahan.

  • Memiliki akses ke kode sumber.

Gateway terkelola lebih cocok jika:

  • Tim tidak memiliki tenaga operasional.

  • Dukungan resmi menjadi syarat.

  • SLA lebih penting daripada fleksibilitas.

  • Audit dan kepatuhan sudah ditangani vendor.

9Router vs proxy buatan sendiri

Proxy buatan sendiri memberi kendali penuh, tetapi biaya pengembangannya tidak kecil. Teman-Teman harus menangani streaming, autentikasi, retry, timeout, pencatatan token, penerjemahan format, dan kegagalan parsial.

Membangun sendiri masuk akal jika organisasi memiliki kebutuhan unik yang tidak dapat dipenuhi router umum. Untuk kebutuhan standar, memakai proyek yang sudah tersedia biasanya memberi waktu implementasi lebih singkat.

Step 19 — Kenali Kelebihan dan Kekurangan 9Router

Kelebihan

  • Satu endpoint untuk banyak alat.

  • Fallback bertingkat mengurangi perpindahan manual.

  • Mendukung pemasangan npm, Docker, dan kode sumber.

  • Dashboard lokal membantu mengelola penyedia dan penggunaan.

  • Dapat memanfaatkan beberapa akun dengan distribusi beban.

  • Penerjemahan format membantu kompatibilitas antaralat.

  • RTK dapat mengurangi token pada keluaran alat yang panjang.

  • Proyek menggunakan lisensi MIT.

  • Docker mendukung pola deployment yang mudah diulang.

Kekurangan

  • Menambah satu lapisan yang perlu dipelihara.

  • Kegagalan router dapat memengaruhi semua alat yang terhubung.

  • Kompatibilitas tidak selalu identik untuk setiap fitur model.

  • Penyedia gratis dan murah dapat berubah.

  • Pengamanan endpoint bersama memerlukan usaha tambahan.

  • Kompresi berisiko menghilangkan detail jika terlalu agresif.

  • Tim tetap harus memahami kebijakan setiap penyedia.

  • Klaim penghematan perlu diuji pada beban kerja sendiri.

  • Perbedaan versi npm, Docker, dan Git perlu diperiksa sebelum pembaruan.

Siapa yang paling cocok memakai 9Router?

9Router layak dipertimbangkan oleh:

  • Pengembang yang memakai beberapa asisten coding.

  • Tim kecil dengan lebih dari satu langganan AI.

  • Pengguna yang sering terkena rate limit.

  • Organisasi yang ingin router berada di infrastruktur sendiri.

  • Tim yang membutuhkan jalur biaya premium, murah, dan gratis.

  • Pengguna yang ingin mengurangi pergantian endpoint secara manual.

Siapa yang sebaiknya tidak memakainya?

9Router mungkin tidak perlu jika:

  • Hanya memakai satu model dan satu penyedia.

  • API utama sudah memiliki kuota yang cukup.

  • Organisasi melarang proxy pihak ketiga.

  • Tidak ada waktu untuk pembaruan dan pemantauan.

  • Semua kebutuhan sudah dipenuhi gateway perusahaan.

  • Repositori sangat sensitif dan belum ada persetujuan keamanan.

  • Tim membutuhkan dukungan vendor dengan SLA resmi.

Step 20 — Atasi Kesalahan Instalasi yang Sering Terjadi

Port 20128 sudah dipakai

Pesan dapat terlihat seperti:

TEXT
EADDRINUSE: address already in use 0.0.0.0:20128

Cari proses pemakai port.

macOS atau Linux:

BASH
lsof -i :20128

Windows:

POWERSHELL
Get-NetTCPConnection -LocalPort 20128

Gunakan port lain:

BASH
9router --port 20129

atau pada Docker:

YAML
ports:
  - "127.0.0.1:20129:20128"

Endpoint klien berubah menjadi:

TEXT
http://localhost:20129/v1

Dashboard tidak bisa dibuka

Periksa proses:

BASH
ps aux | grep 9router

Untuk Docker:

BASH
docker ps -a
docker logs 9router

Uji dengan cURL:

BASH
curl -v http://localhost:20128/

Jika koneksi ditolak, server tidak mendengarkan pada port tersebut. Jika respons ada tetapi browser gagal, periksa proxy browser, firewall, dan URL.

Kontainer terus melakukan restart

Periksa:

BASH
docker inspect 9router
docker logs --tail 200 9router

Penyebab umum:

  • Direktori data tidak bisa ditulis.

  • Variabel lingkungan salah.

  • Port bentrok.

  • Basis data rusak.

  • Arsitektur citra tidak cocok.

  • Memori server terlalu kecil.

Periksa izin direktori:

BASH
ls -la ./data

Jangan langsung mengubah izin menjadi 777. Cari UID dan GID proses kontainer, lalu berikan izin minimum yang diperlukan.

Kunci API ditolak

Respons biasanya berupa 401 Unauthorized atau 403 Forbidden.

Periksa:

  • Tidak ada spasi tambahan.

  • Header memakai format Bearer.

  • Kunci yang dipakai adalah kunci klien 9Router.

  • Kredensial penyedia belum kedaluwarsa.

  • Model dapat diakses oleh akun.

  • Jam sistem komputer akurat untuk autentikasi berbasis token.

Contoh header yang benar:

HTTP
Authorization: Bearer KUNCI_9ROUTER

Model tidak ditemukan

Pesan dapat berbentuk:

TEXT
model_not_found

Periksa daftar model:

BASH
curl http://localhost:20128/v1/models \
  -H "Authorization: Bearer KUNCI_9ROUTER"

Salin ID model persis seperti yang ditampilkan. Huruf besar, tanda hubung, awalan penyedia, dan nama combo dapat berpengaruh.

Permintaan berhenti saat streaming

Periksa:

  • Timeout reverse proxy.

  • Buffering Nginx.

  • Koneksi internet.

  • Waktu token pertama.

  • Dukungan streaming penyedia.

  • Firewall yang memutus koneksi lama.

  • Ukuran prompt.

Pada Nginx:

NGINX
proxy_buffering off;
proxy_read_timeout 600s;

Jangan menaikkan timeout tanpa batas. Koneksi yang menggantung juga menghabiskan sumber daya.

Payload terlalu besar

Untuk gambar atau konteks panjang, server dapat mengembalikan 413 Payload Too Large.

Periksa batas pada:

  • 9Router.

  • Reverse proxy.

  • Load balancer.

  • Klien.

  • Penyedia akhir.

Contoh pengaturan Nginx:

NGINX
client_max_body_size 128m;

Pastikan batas besar memang dibutuhkan. Payload besar meningkatkan penggunaan memori, waktu transfer, dan biaya.

SQLite bermasalah

9Router dapat memakai driver SQLite native atau fallback JavaScript, tergantung paket dan lingkungan.

Jika ada kesalahan modul native:

  • Gunakan versi Node.js yang didukung.

  • Instal alat build sistem.

  • Hapus dependensi lalu instal ulang.

  • Gunakan Docker agar lingkungan lebih konsisten.

  • Pulihkan basis data dari cadangan jika file rusak.

Untuk instalasi sumber:

BASH
rm -rf node_modules package-lock.json
npm install

Menghapus lockfile dapat mengubah versi dependensi. Pada produksi, lebih aman mencoba:

BASH
rm -rf node_modules
npm ci

selama package-lock.json tersedia dan valid.

Step 21 — Buat Prosedur Pembaruan yang Aman

Pembaruan sebaiknya diperlakukan sebagai perubahan sistem, bukan sekadar menjalankan satu perintah.

Pembaruan npm

Periksa versi terpasang:

BASH
npm list -g 9router --depth=0

Cadangkan data, lalu perbarui:

BASH
npm install -g 9router@latest

Periksa:

BASH
9router --help

Setelah server hidup, uji:

BASH
curl http://localhost:20128/v1/models \
  -H "Authorization: Bearer KUNCI_9ROUTER"

Pembaruan Docker

Cadangkan data:

BASH
docker compose stop
tar -czf "9router-data-$(date +%Y%m%d-%H%M%S).tar.gz" ./data

Ambil citra:

BASH
docker compose pull

Buat ulang kontainer:

BASH
docker compose up -d

Periksa log:

BASH
docker compose logs --tail 200

Pembaruan kode sumber

BASH
git fetch --all --tags
git status
git log --oneline --decorate -10

Jangan menjalankan git pull jika ada perubahan lokal yang belum dipahami. Simpan perubahan dalam commit atau stash lebih dahulu.

Untuk penerapan produksi, checkout tag yang sudah diuji:

BASH
git checkout <tag-versi>
npm ci
npm run build
npm run start

Siapkan rollback

Rollback bukan hanya mengganti citra lama. Jika versi baru sudah mengubah skema basis data, Teman-Teman mungkin perlu memulihkan cadangan data yang dibuat sebelum pembaruan.

Catat:

  • Versi sebelum pembaruan.

  • Versi sesudah pembaruan.

  • Waktu backup.

  • Perubahan variabel lingkungan.

  • Hasil smoke test.

  • Langkah pemulihan.

Step 22 — Lakukan Smoke Test Setelah Perubahan

Smoke test adalah pemeriksaan singkat untuk memastikan fungsi utama masih berjalan.

Gunakan daftar berikut:

  • Dashboard dapat dibuka.

  • Daftar model dapat diambil.

  • Kunci klien diterima.

  • Model utama merespons.

  • Model fallback merespons.

  • Streaming berjalan.

  • Penggunaan tercatat.

  • Data tetap ada setelah restart.

  • Editor dapat terhubung.

  • Log tidak menunjukkan kesalahan berulang.

Skrip smoke test sederhana

BASH
#!/usr/bin/env bash

set -euo pipefail

BASE_URL="${BASE_URL:-http://localhost:20128/v1}"
API_KEY="${API_KEY:?API_KEY belum diatur}"
MODEL="${MODEL:-coding-main}"

echo "Memeriksa daftar model..."
curl --fail --silent --show-error \
  "$BASE_URL/models" \
  -H "Authorization: Bearer $API_KEY" \
  > /tmp/9router-models.json

echo "Mengirim permintaan chat..."
curl --fail --silent --show-error \
  "$BASE_URL/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d "{
    \"model\": \"$MODEL\",
    \"messages\": [
      {
        \"role\": \"user\",
        \"content\": \"Balas hanya dengan kata OK\"
      }
    ]
  }" \
  > /tmp/9router-chat.json

echo "Smoke test selesai."

Jalankan:

BASH
chmod +x smoke-test.sh

API_KEY="KUNCI_9ROUTER" \
MODEL="coding-main" \
./smoke-test.sh

Keluaran yang diharapkan:

TEXT
Memeriksa daftar model...
Mengirim permintaan chat...
Smoke test selesai.

Skrip ini memastikan endpoint dapat dijangkau dan permintaan dasar berhasil. Untuk produksi, tambahkan validasi isi JSON dan batas waktu.

Step 23 — Gunakan Praktik Operasional yang Efisien

Pisahkan jalur berdasarkan jenis pekerjaan

Jangan memakai satu combo untuk semua tugas. Buat jalur seperti:

  • fast-docs

  • daily-coding

  • deep-review

  • security-approved

  • low-cost-batch

Pemisahan ini membuat biaya dan kualitas lebih mudah dikendalikan.

Batasi konteks sebelum dikirim

Sebelum meminta model membaca seluruh repositori:

  • Pilih file relevan.

  • Abaikan direktori hasil build.

  • Abaikan dependensi vendor.

  • Bersihkan log berulang.

  • Hapus rahasia.

  • Ringkas keluaran pengujian yang tidak relevan.

Contoh .gitignore bukan otomatis filter untuk semua alat AI. Periksa pengaturan konteks pada alat yang Teman-Teman gunakan.

Hindari retry bertumpuk

Router, klien, dan penyedia dapat memiliki mekanisme retry masing-masing. Jika semuanya mengulang tiga kali, satu kegagalan dapat berubah menjadi banyak permintaan.

Tentukan satu lapisan utama yang menangani retry. Gunakan backoff dan batas yang masuk akal.

Bedakan kegagalan sementara dan permanen

Kesalahan yang layak dicoba ulang:

  • 429 Too Many Requests

  • 502 Bad Gateway

  • 503 Service Unavailable

  • Timeout jaringan sementara

Kesalahan yang biasanya perlu diperbaiki, bukan diulang:

  • 401 Unauthorized

  • Model tidak ditemukan

  • Payload tidak valid

  • Akun tidak memiliki izin

  • Format tool calling tidak didukung

Retry pada kesalahan permanen hanya menambah waktu dan biaya.

Tips Praktis Mengoptimalkan 9Router

Mulai dari dua penyedia

Satu penyedia utama dan satu fallback sudah cukup untuk membuktikan konsep. Menambahkan sepuluh penyedia sejak hari pertama justru memperbesar ruang masalah.

Ukur sebelum mengaktifkan semua fitur

Catat penggunaan normal selama beberapa hari. Setelah itu, aktifkan kompresi atau fallback tambahan dan bandingkan hasilnya.

Pakai tugas uji yang mewakili pekerjaan nyata

Gunakan contoh seperti:

  • Memperbaiki satu bug.

  • Menulis pengujian.

  • Menjelaskan modul lama.

  • Meninjau pull request.

  • Membuat migrasi kecil.

  • Meringkas keluaran CI.

Tes “buat fungsi hello world” tidak cukup untuk menilai router coding.

Simpan konfigurasi deployment di Git

File Compose, konfigurasi reverse proxy, dan skrip smoke test boleh disimpan di Git. Rahasia tetap harus berada di luar repositori.

Contoh struktur:

TEXT
9router-infra/
├── compose.yaml
├── nginx/
│   └── 9router.conf
├── scripts/
│   ├── backup.sh
│   └── smoke-test.sh
├── .env.example
└── README.md

Buat .env.example

DOTENV
PORT=20128
HOSTNAME=0.0.0.0
DATA_DIR=/app/data
NEXT_TELEMETRY_DISABLED=1

Jangan masukkan nilai rahasia sungguhan.

Pantau perubahan kebijakan penyedia

Model, harga, kuota gratis, dan aturan autentikasi dapat berubah. Jadwalkan pemeriksaan berkala, terutama jika suatu penyedia menjadi bagian penting dari fallback.

Rekomendasi Berdasarkan Kebutuhan

Kebutuhan

Rekomendasi

Mencoba 9Router pada laptop

Gunakan npx 9router

Pemakaian harian pada satu komputer

Instal global melalui npm

Server internal untuk tim

Docker, VPN, TLS, dan kunci per pengguna

Audit dan modifikasi

Jalankan dari kode sumber

Stabilitas produksi

Kunci versi citra dan siapkan rollback

Biaya serendah mungkin

Tier murah dan gratis, tetapi ukur kualitas

Repositori sensitif

Batasi penyedia dan tinjau kebijakan data

Konteks terminal sangat besar

Uji RTK dengan perbandingan kualitas

Hanya memakai satu penyedia

Pertimbangkan API langsung

Tidak ingin mengelola server

Pertimbangkan gateway terkelola

Daftar Kesalahan yang Sering Dilakukan Saat Mulai

  • Memasukkan kunci penyedia langsung ke semua klien.

  • Membuka port 20128 ke internet tanpa perlindungan.

  • Menggunakan tag latest pada produksi tanpa pengujian.

  • Menambahkan banyak penyedia sebelum satu jalur berhasil.

  • Menganggap semua model mendukung tool calling yang sama.

  • Tidak membuat backup sebelum pembaruan.

  • Mengukur penghematan token tanpa mengukur kualitas.

  • Mengandalkan layanan gratis untuk beban kritis.

  • Mengirim seluruh repositori tanpa menyaring rahasia.

  • Menganggap fallback pasti menangani semua jenis kesalahan.

  • Memakai localhost dari dalam kontainer tanpa memahami jaringan Docker.

  • Menambahkan /v1 dua kali pada Base URL.

  • Mengulang permintaan 401 berkali-kali.

  • Menyimpan file .env di repositori publik.

  • Tidak menguji pemulihan dari backup.

Checklist Penerapan 9Router yang Siap Dipakai

Sistem

  • Node.js atau Docker tersedia.

  • Port sudah dipilih.

  • Ruang penyimpanan mencukupi.

  • Jam sistem akurat.

  • Koneksi ke penyedia stabil.

Konfigurasi

  • Dashboard dapat diakses.

  • Kunci endpoint sudah dibuat.

  • Penyedia utama sudah diuji.

  • Penyedia fallback sudah diuji.

  • Nama combo mudah dipahami.

  • Batas anggaran sudah ditentukan.

Keamanan

  • Dashboard tidak terbuka ke internet.

  • Kunci tidak disimpan di Git.

  • Akses tim memakai VPN atau jalur privat.

  • TLS aktif untuk akses jarak jauh.

  • Backup dienkripsi.

  • Penyedia sudah disetujui untuk jenis data yang diproses.

Operasional

  • Versi deployment dikunci.

  • Prosedur backup tersedia.

  • Prosedur rollback tersedia.

  • Smoke test tersedia.

  • Log dapat diperiksa.

  • Metrik biaya dan kegagalan dicatat.

  • Jadwal pembaruan sudah ditentukan.

Key Learnings untuk Implementasi yang Sehat

  • 9Router paling berguna saat ada beberapa penyedia atau alat coding yang perlu disatukan melalui satu endpoint.

  • npm cocok untuk penggunaan lokal, sedangkan Docker lebih rapi untuk server dan tim.

  • Fallback harus disusun berdasarkan kualitas, biaya, konteks, dan kebijakan data.

  • Tingkat gratis membantu sebagai cadangan, tetapi ketersediaan dan ketentuannya dapat berubah.

  • Klaim penghematan token perlu dibuktikan melalui pengukuran pada tugas nyata.

  • Endpoint lokal tetap harus diamankan karena memiliki akses ke kredensial dan lalu lintas AI.

  • Pengujian cURL, smoke test, backup, serta rollback jauh lebih penting daripada menambahkan banyak model.

  • Untuk produksi, gunakan versi yang dikunci, akses jaringan terbatas, dan kredensial klien yang terpisah.

  • Biaya per token bukan satu-satunya ukuran. Ukur biaya per tugas yang selesai dengan benar.

  • Router yang baik bukan router dengan penyedia terbanyak, melainkan router dengan jalur yang sederhana, teruji, aman, dan mudah dipahami.

Kesimpulan

9Router menawarkan pendekatan praktis untuk menyatukan beberapa penyedia dan alat coding AI melalui satu endpoint. Nilai utamanya bukan sekadar banyaknya model yang dapat dihubungkan, melainkan kemudahan mengatur prioritas, fallback, biaya, dan kredensial secara terpusat. Untuk penggunaan lokal, npm dapat menjadi titik awal yang sederhana, sedangkan Docker lebih sesuai ketika konfigurasi perlu dijalankan secara konsisten di server atau lingkungan tim.

Implementasi yang andal sebaiknya dimulai dari satu jalur yang benar-benar berfungsi, lalu diperluas secara bertahap. Amankan endpoint, pisahkan kredensial, kunci versi deployment, dan uji backup serta rollback sebelum mengandalkannya untuk pekerjaan penting. Ikuti juga praktik keamanan GitHub agar kunci API dan data sensitif tidak masuk ke repositori.

Pada akhirnya, keberhasilan 9Router harus dinilai dari biaya per tugas yang selesai dengan benar, bukan hanya harga token atau jumlah penyedia. Mulailah dengan konfigurasi kecil, ukur hasil nyata, lalu bangun sistem routing yang sederhana, aman, dan dapat dipulihkan saat terjadi kegagalan.


Referensi

GitHub. (2026). decolua/9router: Unlimited free AI coding with Claude Code.

GitHub. (2026). 9router container package.

9Router. (2026). Free AI router with smart fallback for Claude and Codex.

Docker Hub. (2026). decolua/9router Docker image.

DeepWiki. (2026). Installing and running 9Router.

npm. (2026). 9Router CLI for starting and managing the 9Router server.

DeepWiki. (2026). Local deployment of 9Router.

9Router. (2026). 9router Space AI router for Codex, Cursor, Antigravity, and model fallback.

Heatdrop. (2026). decolua/9router AI coding proxy.

SourceForge. (2026). 9Router download.

Komentar (0)

Belum ada komentar. Jadilah yang pertama berbagi pendapat!

Tinggalkan komentar