Independent testing Updated July 2026 387 self-hosting guides 5 VPS providers tested

guide

Jan Server Zelf Hosten op een VPS (Volledige Gids)

Zet Jan Server op een VPS met Docker Compose: doorloop de installatiewizard, kies remote of lokale inference en beveilig eerst Keycloak en de Kong-gateway.

Jan Server is de zelf te hosten helft van het Jan-project: een set Go-microservices die een OpenAI-compatibele API blootstellen, met MCP-toolintegratie, Keycloak-authenticatie en een Kong-gateway ervoor. Het is geen enkele container, en dat zie je terug in de deployment.

Het goede nieuws is dat het project een installatiewizard meelevert die de configuratie voor je schrijft. De belangrijkste beslissing die je daarbij neemt, is waar de inference draait.

Voordat je begint

De meeste goedkope VPS-plannen zijn 4 GB en voldoen niet. Deze halen wel de ondergrens:

ProviderPlanvCPU / RAM / SchijfPrijsLink
ContaboCloud VPS 44 / 8 GB / 100 GB5.50 EUR/mnd excl. btwContabo
Hetzner CloudCX334 / 8 GB / 80 GB NVMe8.49 EUR/mnd excl. btwHetzner Cloud
DigitalOcean8 GB droplet-tier8 GBhuidig tarief checkenDigitalOcean
Vultr8 GB instance-tier8 GBhuidig tarief checkenVultr
Linode8 GB shared-tier8 GBhuidig tarief checkenLinode

Voor een uitgebreider overzicht van deze plannen, zie onze VPS-vergelijking.

Stap 1: Verbinden en dependencies installeren

ssh user@your-vps-ip
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose-v2 make git
sudo systemctl enable --now docker

Controleer of je Compose v2 hebt, want het compose-bestand van Jan Server gebruikt de include:-sleutel die v1 niet begrijpt:

docker compose version

Stap 2: Repository klonen

Anders dan bij de meeste zelf-hosted apps schrijf je hier geen eigen docker-compose.yml. Het compose-bestand van de repository trekt fragmenten binnen voor infrastructuur, de API-diensten, MCP-tools, de webapp en inference.

git clone https://github.com/janhq/server.git
cd server

Stap 3: Installatiewizard uitvoeren

make quickstart

De wizard schrijft รฉรฉn root-.env en start daarna Compose. Er worden drie dingen gevraagd:

Kun je de wizard niet interactief draaien, kopieer dan de template en vul die zelf in:

cp .env.template .env
nano .env
make setup

make setup controleert dependencies, maakt mappen aan en haalt de basisimages op zonder iets te starten.

Stap 4: Stack starten

make up-full

Zodra de containers stabiel draaien, heb je:

DienstPoortDoel
API Gateway (Kong)8000Het toegangspunt voor alles
LLM API8080OpenAI-compatibele chat completions
Response API8082Meerstaps tool-orkestratie
Media API8285Uploads en media-IDโ€™s
MCP Tools8091Zoeken, scraping, code-uitvoering
Web chat UI3001De browserclient
Keycloak8085Authenticatieconsole

API-documentatie is te vinden op http://your-vps-ip:8000/api/swagger/index.html.

Stap 5: Beveiligen voordat je het blootstelt

Dit is de stap die je niet mag overslaan. Twee standaardinstellingen zijn onveilig op een publieke server:

  1. De Keycloak-console wordt geleverd met admin / admin. Wijzig dit meteen op poort 8085. Keycloak geeft de tokens uit die Kong valideert, dus deze ene inlog beschermt het hele API-oppervlak.
  2. Alleen poort 8000 mag van buitenaf bereikbaar zijn. Kong handhaaft de JWT- en API-key-controles; de poorten van de diensten erachter doen dat niet. Bind de rest aan localhost of blokkeer ze in de firewall.
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
sudo ufw enable

Termineer daarna TLS met Caddy, Traefik of Nginx en proxy naar poort 8000. Een ongeauthenticeerd LLM-endpoint op het publieke internet laten staan, zorgt ervoor dat iemand anders het vindt en gebruikt, meestal binnen een paar dagen.

Inference lokaal draaien

Heb je toch voor lokale vLLM gekozen, dan definieert het inference-fragment twee profielen. Het GPU-profiel draait vllm/vllm-openai:v0.11.2 met janhq/Jan-v1-4B als standaardmodel en reserveert een NVIDIA-device, dus het start niet op een gewone VPS. Het CPU-profiel draait zonder GPU en is echt bruikbaar om te testen, maar token-generatie op gedeelde vCPUโ€™s is traag genoeg dat je het niet voor gebruikers wilt inzetten.

GPU-capaciteit huren en Jan Server daarnaar laten wijzen als remote endpoint is meestal goedkoper dan een GPU-server die tussen prompts door stil staat.

Dagelijks beheer

Bijwerken naar een nieuwere release:

git pull
docker compose pull
make up-full

Maak back-ups van het Postgres-volume en je root-.env. De .env bevat de secrets die de wizard genereerde, en een database terugzetten zonder dat bestand levert sessies op die je niet kunt ontsleutelen.

Bekijk wat een dienst aan het doen is met docker compose logs -f llm-api, en vervang dat door de dienst die je wilt controleren.

Veelvoorkomende problemen

SymptoomOorzaak
include is not a valid compose keyDocker Compose v1 is geรฏnstalleerd; je hebt v2 nodig
Containers worden tijdens het opstarten gestoptOnder 8 GB RAM wordt de stack OOM-killed
Elke API-aanroep geeft 401 terugRequests komen direct op een servicepoort binnen in plaats van via Kong op 8000
vLLM-container wordt nooit healthyHet GPU-profiel is actief op een host zonder NVIDIA-device

Jan Server vraagt meer van een VPS dan een typische zelf-hosted app, vooral omdat het zijn eigen gateway, identity provider en database meebrengt in plaats van aan te nemen dat je die al hebt. Ga uit van 8 GB, zet Kong achter TLS, en wijzig het Keycloak-wachtwoord voordat je iets anders doet.

Frequently asked questions

Heb ik een GPU nodig om Jan Server zelf te hosten op een VPS?

Niet als je een remote OpenAI-compatibel endpoint kiest wanneer de installatiewizard naar je LLM-provider vraagt. De VPS draait dan alleen de API-, orkestratie- en auth-diensten. De lokale vLLM-optie heeft een GPU-profiel dat een NVIDIA-kaart verwacht en een CPU-profiel dat zonder GPU werkt, maar veel trager.

Waarom accepteert de Keycloak-console admin als zowel gebruikersnaam als wachtwoord?

Dat is de standaardinlog die bij de compose-setup wordt meegeleverd, en dat is prima op een laptop maar niet op een publieke server. Wijzig het voordat je een poort naar het internet opent, want het Keycloak-realm beschermt elke API-route achter de Kong-gateway.

Welke poort zet ik achter mijn reverse proxy?

Poort 8000, de Kong API-gateway. Dat is het gedocumenteerde toegangspunt en het handhaaft de JWT- en API-key-controles vรณรณr de losse diensten. Poorten van afzonderlijke diensten direct publiceren zou aanroepers de gateway en de bijbehorende authenticatie volledig laten omzeilen.