Jan Server adalah bagian dari proyek Jan yang bisa di-host sendiri: sekumpulan mikroservis Go yang menyediakan API kompatibel OpenAI, dengan integrasi perkakas MCP, autentikasi Keycloak, dan gerbang Kong di depannya. Ia bukan kontainer tunggal, dan proses pemasangannya mencerminkan itu.
Kabar baiknya, proyek ini menyertakan wizard penyiapan yang menuliskan konfigurasinya untuk Anda. Keputusan utama yang Anda ambil di dalamnya adalah di mana inferensi berjalan.
Sebelum mulai
- VPS dengan RAM setidaknya 8 GB — minimum yang dinyatakan proyek, dengan 12 GB disarankan untuk rangkaian layanan lengkap
- Instalasi Linux bersih (Ubuntu 24.04 LTS adalah pilihan bawaan yang masuk akal)
- Docker Engine dan Docker Compose v2
makedangit- Nama domain kalau Anda ingin TLS, yang memang Anda perlukan untuk apa pun di luar pengujian
Sebagian besar paket VPS murah adalah 4 GB dan tidak akan cukup. Yang melewati batas itu:
| Penyedia | Paket | vCPU / RAM / Disk | Harga | Tautan |
|---|---|---|---|---|
| Contabo | Cloud VPS 4 | 4 / 8 GB / 100 GB | 5,50 EUR/bulan belum termasuk PPN | Contabo |
| Hetzner Cloud | CX33 | 4 / 8 GB / 80 GB NVMe | 8,49 EUR/bulan belum termasuk PPN | Hetzner Cloud |
| DigitalOcean | Tingkat droplet 8 GB | 8 GB | cek harga terkini | DigitalOcean |
| Vultr | Tingkat instance 8 GB | 8 GB | cek harga terkini | Vultr |
| Linode | Tingkat shared 8 GB | 8 GB | cek harga terkini | Linode |
Untuk rincian lebih lengkap tentang paket-paket ini, lihat perbandingan VPS kami.
Langkah 1: Terhubung dan pasang dependensi
ssh user@ip-vps-anda
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose-v2 make git
sudo systemctl enable --now docker
Pastikan yang terpasang memang Compose v2, karena berkas compose Jan Server memakai kunci include: yang tidak dipahami v1:
docker compose version
Langkah 2: Kloning repositorinya
Berbeda dari kebanyakan aplikasi self-hosted, di sini Anda tidak menulis docker-compose.yml sendiri. Berkas compose di repositori menarik potongan konfigurasi untuk infrastruktur, layanan API, perkakas MCP, aplikasi web, dan inferensi.
git clone https://github.com/janhq/server.git
cd server
Langkah 3: Jalankan wizard penyiapan
make quickstart
Wizard menuliskan satu berkas .env di direktori akar lalu menjalankan Compose. Ia menanyakan tiga hal:
- Penyedia LLM — vLLM lokal, yang mengunduh model dan mengharapkan GPU, atau endpoint kompatibel OpenAI jarak jauh, yang tidak memerlukan keduanya. Di VPS standar, pilih endpoint jarak jauh.
- Penyedia pencarian MCP — Serper butuh kunci API, SearXNG berjalan lokal tanpa kunci, atau Anda bisa menonaktifkan pencarian dan tetap mempertahankan layanan perkakas MCP.
- Media API — aktifkan untuk unggahan, atau biarkan mati untuk runtime paling ringan.
Kalau Anda tidak bisa menjalankan wizard secara interaktif, salin templatnya lalu isi sendiri:
cp .env.template .env
nano .env
make setup
make setup memeriksa dependensi, membuat direktori, dan menarik image dasar tanpa menyalakan apa pun.
Langkah 4: Nyalakan tumpukannya
make up-full
Setelah kontainernya stabil, Anda akan punya:
| Layanan | Port | Fungsi |
|---|---|---|
| Gerbang API (Kong) | 8000 | Titik masuk untuk semuanya |
| LLM API | 8080 | Chat completion kompatibel OpenAI |
| Response API | 8082 | Orkestrasi perkakas multi-langkah |
| Media API | 8285 | Unggahan dan ID media |
| Perkakas MCP | 8091 | Pencarian, scraping, eksekusi kode |
| Antarmuka obrolan web | 3001 | Klien peramban |
| Keycloak | 8085 | Konsol autentikasi |
Dokumentasi API disajikan di http://ip-vps-anda:8000/api/swagger/index.html.
Langkah 5: Amankan sebelum Anda membukanya
Inilah langkah yang tidak boleh dilewati. Dua nilai bawaan tidak aman di server publik:
- Konsol Keycloak disertakan dengan
admin/admin. Ubah segera di port 8085. Keycloak menerbitkan token yang divalidasi Kong, jadi satu kredensial ini melindungi seluruh permukaan API. - Hanya port 8000 yang boleh dijangkau dari luar. Kong menegakkan pemeriksaan JWT dan kunci API; port layanan di belakangnya tidak. Ikat sisanya ke localhost atau blokir di firewall.
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
sudo ufw enable
Setelah itu akhiri TLS dengan Caddy, Traefik, atau Nginx dan teruskan ke port 8000. Membiarkan endpoint LLM tanpa autentikasi di internet publik akan membuatnya ditemukan dan dipakai orang lain, biasanya dalam hitungan hari.
Menjalankan inferensi secara lokal
Kalau Anda memang memilih vLLM lokal, potongan konfigurasi inferensinya mendefinisikan dua profil. Profil GPU menjalankan vllm/vllm-openai:v0.11.2 dengan janhq/Jan-v1-4B sebagai model bawaan dan memesan satu perangkat NVIDIA, sehingga tidak akan menyala di VPS biasa. Profil CPU berjalan tanpa GPU dan benar-benar berguna untuk pengujian, tetapi kecepatan menghasilkan token di vCPU bersama terlalu lambat untuk Anda sajikan ke pengguna.
Menyewa kapasitas GPU lalu mengarahkan Jan Server ke sana sebagai endpoint jarak jauh biasanya lebih murah daripada server GPU yang menganggur di antara prompt.
Operasi sehari-hari
Memperbarui ke rilis yang lebih baru:
git pull
docker compose pull
make up-full
Cadangkan volume Postgres dan berkas .env di direktori akar Anda. .env menyimpan rahasia yang dihasilkan wizard, dan memulihkan basis data tanpanya menyisakan sesi yang tidak bisa Anda dekripsi.
Periksa apa yang sedang dilakukan sebuah layanan dengan docker compose logs -f llm-api, ganti dengan nama layanan yang Anda perlukan.
Masalah yang sering muncul
| Gejala | Penyebab |
|---|---|
include bukan kunci compose yang valid | Docker Compose v1 yang terpasang; Anda butuh v2 |
| Kontainer dimatikan saat menyala | RAM di bawah 8 GB, tumpukannya dihentikan OOM |
| Setiap panggilan API mengembalikan 401 | Permintaan mengenai port layanan secara langsung, bukan Kong di port 8000 |
| Kontainer vLLM tidak pernah menjadi sehat | Profil GPU aktif di host tanpa perangkat NVIDIA |
Jan Server menuntut lebih banyak dari sebuah VPS daripada aplikasi self-hosted pada umumnya, terutama karena ia membawa gerbang, penyedia identitas, dan basis datanya sendiri alih-alih mengandaikan Anda sudah punya. Ukur untuk 8 GB, taruh Kong di belakang TLS, dan ubah kata sandi Keycloak sebelum hal lain.
Frequently asked questions
Apakah saya perlu GPU untuk meng-host sendiri Jan Server di VPS?
Tidak, kalau Anda memilih endpoint kompatibel OpenAI jarak jauh ketika wizard penyiapan menanyakan penyedia LLM Anda. VPS kemudian hanya menjalankan layanan API, orkestrasi, dan autentikasi. Opsi vLLM lokal punya profil GPU yang mengharapkan kartu NVIDIA dan profil CPU yang berjalan tanpanya dengan kecepatan jauh lebih rendah.
Kenapa konsol Keycloak menerima admin sebagai nama pengguna sekaligus kata sandi?
Itu kredensial bawaan yang disertakan penyiapan compose, dan itu wajar di laptop tetapi tidak di server publik. Ubah sebelum Anda membuka port apa pun ke internet, karena realm Keycloak-lah yang melindungi setiap rute API di belakang gerbang Kong.
Port mana yang harus saya taruh di belakang reverse proxy?
Port 8000, yaitu gerbang API Kong. Itulah titik masuk yang terdokumentasi dan ia menegakkan pemeriksaan JWT serta kunci API di depan masing-masing layanan. Menerbitkan port layanan secara langsung akan membuat pemanggil bisa melewati gerbang beserta autentikasinya sama sekali.