Cara Setup 9Router di Railway dan Menghubungkannya ke DeepSeek Harness
Tutorial lengkap deploy 9Router di Railway, dari template satu klik, volume dan variables, menghubungkan provider, membuat API key, sampai mengatur endpoint 9Router sebagai custom provider di DeepSeek Harness (dsh).

Punya banyak API key provider AI dan capek mengatur endpoint satu per satu di setiap tool? 9Router menyelesaikannya dengan satu pintu: gateway open source ini menaruh satu endpoint OpenAI-compatible di depan 40+ provider dan 100+ model, lengkap dengan fallback otomatis kalau satu provider kena rate limit.
Di tutorial ini kita deploy 9Router di Railway memakai template resminya, menghubungkan provider, membuat API key, lalu memakai endpoint-nya sebagai custom provider di DeepSeek Harness (dsh). Hasil akhirnya: Harness tidak lagi memegang key provider asli, cukup satu key 9Router, dan urusan routing serta fallback diatur dari dashboard.
Gambaran Alurnya
DeepSeek Harness -> https://domain-railway-kamu/v1 -> 9Router -> provider (Claude / GPT / Gemini / model gratis)
Yang perlu disiapkan: akun Railway, akun atau API key provider yang mau dihubungkan (ada juga provider gratis tanpa daftar, contohnya Kiro AI dan OpenCode Free), dan DeepSeek Harness yang sudah terpasang untuk langkah terakhir.
Bagian 1: Deploy 9Router di Railway
1. Buka template resminya
Buka halaman template Deploy & Host 9Router di Railway: https://railway.com/deploy/9router-gateway lalu klik tombol deploy-nya dan login ke Railway bila diminta. Template ini sudah menyiapkan service dari image resmi decolua/9router, satu volume persisten, dan domain publik HTTPS, tidak ada Postgres atau Redis yang perlu diurus, karena semua data 9Router disimpan di SQLite.
Beri nama project yang gampang dikenali, misalnya 9router.
2. Periksa variables sebelum deploy
Template umumnya sudah mengisi variables penting. Pastikan daftar ini ada dan terisi, ini bagian paling menentukan, jangan asal lewati:
PORT=20128: port internal 9Router, harus cocok dengan target port domain.DATA_DIR=/app/data: lokasi SQLite, menunjuk ke volume.JWT_SECRET: secret penandatangan session dashboard, wajib kuat dan acak. Buat denganopenssl rand -hex 32.INITIAL_PASSWORD: password login dashboard pertama kali. Pakai password yang kuat dan simpan baik-baik.API_KEY_SECRET: secret HMAC untuk API key yang diterbitkan dashboard, buat juga denganopenssl rand -hex 32.REQUIRE_API_KEY=true: menolak semua panggilan/v1/*tanpa API key. Di instansi publik ini wajib menyala.BASE_URL: URL publik service kamu, diisi setelah domain dibuat di langkah 3.
Peringatan keras soal INITIAL_PASSWORD: jangan pernah deploy tanpa variable ini. Tanpa password awal yang diatur, dashboard bisa jatuh ke password default yang tidak aman. Begitu juga JWT_SECRET, selalu atur sendiri, jangan dikosongkan.
3. Pastikan volume dan domain
Dua hal yang wajib ada di service Railway-nya:
- Volume terpasang di
/app/data. Di sinilah database SQLite (db/data.sqlite) dan backup tinggal. Tanpa volume, semua provider, API key, dan combo hilang setiap kali redeploy. - Domain publik aktif. Di service, buka Settings lalu Networking, generate domain Railway bila belum ada, dan pastikan target port-nya
20128. Catat domainnya, bentuknya kurang lebihhttps://nama-service.up.railway.app. Setelah domain final, isi variableBASE_URLdengan URL tersebut lalu redeploy bila diminta.
Tunggu sampai deployment berstatus sukses / hijau.
4. Login pertama ke dashboard
Buka https://domain-railway-kamu/login. Masuk dengan password dari variable INITIAL_PASSWORD (bisa dilihat di tab Variables service Railway). Setelah berhasil masuk, segera ganti password tersebut lewat menu Settings di dashboard 9Router, nilai di variable hanya password bibit untuk login pertama.
Kalau muncul banner peringatan "no password is set" padahal login berhasil, abaikan banner itu, halaman template Railway sendiri mencatat banner ini bisa muncul keliru. Yang jadi patokan adalah hasil loginnya.
5. Uji keamanan endpoint (wajib)
Sebelum menghubungkan provider apa pun, pastikan endpoint publikmu tidak terbuka untuk umum. Jalankan dari terminal:
curl -i https://domain-railway-kamu/v1/models
Tanpa API key, jawaban yang benar adalah 401 dengan pesan "API key required for remote API access". Kalau yang keluar justru daftar model, berarti REQUIRE_API_KEY belum aktif, perbaiki dulu sebelum lanjut, karena siapa pun yang menemukan URL itu bisa menghabiskan kredit providermu. Di dashboard juga ada toggle keamanan endpoint; aktifkan toggle tersebut supaya sejalan dengan variablenya.
Bagian 2: Atur 9Router: Provider, Combo, dan API Key
6. Hubungkan provider
Di dashboard 9Router, buka Providers lalu Connect provider yang mau dipakai:
- Provider gratis tanpa daftar: misalnya Kiro AI (Claude gratis) atau OpenCode Free (tanpa auth), paling cepat untuk tes pertama.
- Provider API key: tempel key provider yang sudah kamu punya. OpenAI, Anthropic, Gemini, DeepSeek, Groq, GLM, Kimi, dan MiniMax didukung langsung. Key provider asli tersimpan di 9Router, bukan di tool kamu.
- Provider OAuth / subscription: selesaikan login OAuth-nya. Catatan khusus Railway: callback URL harus menunjuk ke domain Railway kamu, bukan
localhost, daftarkan domain Railway tersebut ke provider bila diminta.
9Router mendukung multi-account per provider dengan round-robin, dan menerjemahkan format request antar OpenAI, Anthropic, dan Gemini secara otomatis, termasuk streaming.
7. Buat combo (fallback chain)
Buka Combos dan susun rantai fallback, mengikuti pola 3 tingkat andalan 9Router:
- Subscription, kuota langganan yang sudah kamu bayar, dipakai duluan selagi ada.
- Cheap, model murah sebagai cadangan.
- Free, model gratis sebagai benteng terakhir.
Dengan combo, kalau model utama kena rate limit atau error, request otomatis pindah ke model berikutnya tanpa mengganti konfigurasi di tool. Nama combo ini nantinya yang dipanggil sebagai nama model. Fitur lain yang membantu: RTK Token Saver mengompresi output tool seperti git diff dan grep, menghemat sekitar 20–40% token.
8. Buat API key 9Router
Buka Endpoint & Key, klik Create Key, lalu salin API key 9Router yang diterbitkan. Key ini berbeda dari key provider: inilah key yang dikirim tool kamu ke 9Router, sementara key provider asli tidak pernah keluar dari dashboard. Simpan key ini baik-baik dan jangan unggah ke repo publik.
9. Verifikasi endpoint hidup
Tes dari terminal dengan key yang baru dibuat:
curl https://domain-railway-kamu/v1/models -H "Authorization: Bearer KEY_9ROUTER_KAMU"
Kalau keluar daftar model (JSON), endpoint siap dipakai. Catat persis id model yang mau dipakai di Harness, termasuk prefix provider atau nama combo-nya, contohnya kr/claude-sonnet-4.5 atau nama combo yang kamu buat. ID ini harus ditulis utuh, tidak boleh disingkat.
Bagian 3: Hubungkan Endpoint 9Router ke DeepSeek Harness
Bagian ini memakai DeepSeek Harness (dsh). Prinsipnya sama untuk tool OpenAI-compatible lain: yang dibutuhkan selalu tiga hal, Base URL, API Key, dan Model.
10. Jalankan Harness dan buka Settings Models
Jalankan Web UI Harness:
npx @deepseek-ai/dsh web
Buka http://127.0.0.1:3080 di browser, lalu masuk ke Settings → Models.
11. Tambah custom provider
Pilih Add a custom provider, lalu isi:
- Provider ID:
9router - Display name:
9Router (Railway) - Base URL:
https://domain-railway-kamu/v1 - API protocol: OpenAI Completions
- API key: API key 9Router dari langkah 8
Perhatikan: Base URL adalah root gateway, diakhiri /v1 tanpa /chat/completions, bagian itu ditambahkan otomatis oleh adapter Harness.
12. Ambil daftar model dan simpan
Di bagian Model catalog, klik Fetch available models supaya Harness menarik daftar dari endpoint /v1/models 9Router. Kalau discovery tidak jalan, isi manual dengan ID persis dari hasil curl langkah 9, bisa ID model berprefix provider, bisa juga nama combo dari langkah 7 (combo muncul sebagai model juga).
Simpan provider-nya. Field API key di Harness bersifat write-only dan disimpan terpisah dari settings biasa, jangan pernah menempel key di file repo, screenshot, atau log.
13. Jadikan model default dan tes
Pilih provider 9Router dan modelnya sebagai model untuk session (atau jadikan default), buat session baru, lalu kirim tugas tes sederhana, misalnya: "Ringkas repository ini dan sebutkan package utamanya."
Kalau jawaban mengalir, sambungan berhasil. Buka dashboard 9Router dan cek catatan usage / request-nya: request dari Harness seharusnya tercatat di sana, lengkap dengan provider dan model yang menjawab. Perubahan model di Harness berlaku pada request berikutnya tanpa perlu restart.
Alternatif: lewat settings.yaml (untuk dsh CLI)
Pemakai CLI bisa mengatur file yang sama dengan yang ditulis Web UI, yaitu $DSH_HOME/settings.yaml:
llm-deepseek:
baseURL: https://domain-railway-kamu/v1
apiKeyEnv: NINEROUTER_API_KEY
models:
- id: kr/claude-sonnet-4.5
name: kr/claude-sonnet-4.5
contextWindow: 128000
agent-default-model:
provider: deepseek-official
model: kr/claude-sonnet-4.5
Lalu set key-nya sebagai environment variable bernama sesuai apiKeyEnv (di contoh ini NINEROUTER_API_KEY) sebelum menjalankan dsh. Dua hal yang wajib tepat: ID model harus membawa prefix gateway atau nama combo secara utuh di kedua tempat, dan key dibaca dari environment saat request berjalan, key yang hilang akan gagal dengan error MISSING_CREDENTIAL, bukan diam-diam lewat.
Troubleshooting
- 401 dari /v1/models padahal sudah pakai key: key yang dipakai salah (key provider, bukan key 9Router), atau header Authorization Bearer belum terkirim. Buat ulang key di Endpoint & Key.
- Model not found / ditolak gateway: ID model tidak persis. Ambil ulang dari
GET /v1/models, lengkap dengan prefix atau nama combo-nya. - Data hilang setelah redeploy: volume
/app/dataterlepas atauDATA_DIRtidak menunjuk ke sana. Pasang lagi volume-nya; tanpa itu konfigurasi memang mulai dari nol. - OAuth provider gagal callback: callback URL masih
localhost. Daftarkan domain Railway sebagai callback di provider tersebut. - Dashboard tidak bisa dibuka: cek target port domain (harus
20128) dan status deployment terakhir di Railway.
Soal Biaya
9Router sendiri gratis dan open source (lisensi MIT), yang dibayar hanya infrastrukturnya. Di Railway, kebutuhan standarnya kecil: 1 service (Hobby sekitar $5/bulan sanggup menjalankannya), volume yang disarankan 5 GB, RAM 512 MB sampai 2 GB. Biaya token tetap mengikuti tarif provider di belakangnya; 9Router hanya mengukur dan mencatatnya, bukan menjual token.
Penutup
Urutan lengkapnya sebenarnya pendek: deploy template, kunci variables dan volume, login dan ganti password, hubungkan provider, susun combo, terbitkan API key, lalu daftarkan satu custom provider di Harness dengan Base URL domain Railway + /v1. Setelah itu semua tool, bukan cuma Harness, cukup menunjuk ke endpoint yang sama, dan pergantian provider jadi urusan dashboard, bukan urusan edit konfigurasi di sana-sini.
Komentar (0)
Belum ada komentar. Tulis tanggapan pertama di bawah.