Tests indépendants Mis à jour août 2026 387 guides d'auto-hébergement 5 fournisseurs VPS testés

guide

Comment auto-héberger Jan Server sur un VPS (guide complet)

Déployez Jan Server sur un VPS avec Docker Compose : lancez l'assistant, choisissez l'inférence distante ou locale, et sécurisez Keycloak et Kong.

Jan Server est la moitié auto-hébergeable du projet Jan : un ensemble de microservices Go qui exposent une API compatible OpenAI, avec intégration d’outils MCP, une authentification Keycloak et une passerelle Kong devant le tout. Ce n’est pas un conteneur unique, et le déploiement s’en ressent.

La bonne nouvelle, c’est que le projet fournit un assistant d’installation qui écrit la configuration à votre place. La principale décision à prendre pendant cette étape concerne l’endroit où tourne l’inférence.

Avant de commencer

La plupart des offres VPS bon marché sont à 4 Go et ne suffisent pas. Voici celles qui franchissent le plancher :

HébergeurOffrevCPU / RAM / DisquePrixLien
ContaboCloud VPS 44 / 8 Go / 100 Go5,50 EUR/mois HTContabo
Hetzner CloudCX334 / 8 Go / 80 Go NVMe8,49 EUR/mois HTHetzner Cloud
DigitalOceanPalier droplet 8 Go8 Gotarif à vérifierDigitalOcean
VultrPalier instance 8 Go8 Gotarif à vérifierVultr
LinodePalier partagé 8 Go8 Gotarif à vérifierLinode

Pour un comparatif plus détaillé de ces offres, consultez notre comparatif VPS.

Étape 1 : se connecter et installer les dépendances

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

Vérifiez que vous avez bien Compose v2, car le fichier compose de Jan Server utilise la clé include:, que v1 ne comprend pas :

docker compose version

Étape 2 : cloner le dépôt

Contrairement à la plupart des applications auto-hébergées, vous n’écrivez pas ici votre propre docker-compose.yml. Le fichier compose du dépôt assemble des fragments pour l’infrastructure, les services API, les outils MCP, l’application web et l’inférence.

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

Étape 3 : lancer l’assistant d’installation

make quickstart

L’assistant écrit un unique .env à la racine puis démarre Compose. Il pose trois questions :

Si vous ne pouvez pas lancer l’assistant en mode interactif, copiez le modèle et remplissez-le à la place :

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

make setup vérifie les dépendances, crée les répertoires et récupère les images de base sans rien démarrer.

Étape 4 : démarrer la stack

make up-full

Une fois les conteneurs stabilisés, vous disposez de :

ServicePortRôle
API Gateway (Kong)8000Le point d’entrée pour tout
LLM API8080Complétions de chat compatibles OpenAI
Response API8082Orchestration d’outils multi-étapes
Media API8285Téléversements et identifiants média
MCP Tools8091Recherche, extraction web, exécution de code
Web chat UI3001Le client navigateur
Keycloak8085Console d’authentification

La documentation de l’API est servie sur http://your-vps-ip:8000/api/swagger/index.html.

Étape 5 : sécuriser avant d’exposer

C’est l’étape à ne pas sauter. Deux réglages par défaut sont dangereux sur un serveur public :

  1. La console Keycloak est livrée avec admin / admin. Changez cela immédiatement sur le port 8085. Keycloak émet les jetons que Kong valide, donc cet unique identifiant protège toute la surface de l’API.
  2. Seul le port 8000 doit être accessible depuis l’extérieur. Kong impose les vérifications JWT et clé API ; les ports des services derrière lui ne le font pas. Liez le reste à localhost ou bloquez-les au niveau du pare-feu.
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
sudo ufw enable

Terminez ensuite le TLS avec Caddy, Traefik ou Nginx et redirigez vers le port 8000. Laisser un point de terminaison LLM non authentifié sur l’internet public conduit à ce qu’il soit trouvé et utilisé par quelqu’un d’autre, généralement en quelques jours.

Faire tourner l’inférence en local

Si vous avez choisi vLLM en local, le fragment d’inférence définit deux profils. Le profil GPU exécute vllm/vllm-openai:v0.11.2 avec janhq/Jan-v1-4B comme modèle par défaut et réserve un périphérique NVIDIA, donc il ne démarrera pas sur un VPS classique. Le profil CPU fonctionne sans GPU et reste vraiment utilisable pour des tests, mais la génération de tokens sur des vCPU partagés est assez lente pour qu’on évite de l’exposer à des utilisateurs.

Louer de la capacité GPU et y pointer Jan Server comme point de terminaison distant revient généralement moins cher qu’un serveur GPU qui reste inactif entre deux requêtes.

Exploitation au quotidien

Mettre à jour vers une nouvelle version :

git pull
docker compose pull
make up-full

Sauvegardez le volume Postgres et votre .env à la racine. Le .env contient les secrets générés par l’assistant, et restaurer une base sans lui laisse des sessions que vous ne pouvez pas déchiffrer.

Vérifiez ce que fait un service avec docker compose logs -f llm-api, en remplaçant par le service qui vous intéresse.

Problèmes courants

SymptômeCause
include is not a valid compose keyDocker Compose v1 est installé ; il faut v2
Les conteneurs sont tués au démarrageSous 8 Go de RAM, la stack est tuée par OOM
Chaque appel API renvoie 401Les requêtes atteignent directement un port de service plutôt que Kong sur le 8000
Le conteneur vLLM ne devient jamais sainLe profil GPU est actif sur un hôte sans périphérique NVIDIA

Jan Server demande plus à un VPS qu’une application auto-hébergée classique, surtout parce qu’il apporte sa propre passerelle, son fournisseur d’identité et sa base de données plutôt que de supposer que vous les avez déjà. Dimensionnez pour 8 Go, mettez Kong derrière du TLS, et changez le mot de passe Keycloak avant toute autre chose.

Frequently asked questions

Faut-il un GPU pour auto-héberger Jan Server sur un VPS ?

Pas si vous choisissez un point de terminaison distant compatible OpenAI quand l'assistant d'installation demande votre fournisseur LLM. Le VPS ne fait alors tourner que l'API, l'orchestration et les services d'authentification. L'option vLLM en local propose un profil GPU qui attend une carte NVIDIA et un profil CPU qui fonctionne sans GPU, mais à vitesse bien plus faible.

Pourquoi la console Keycloak accepte-t-elle admin comme identifiant et comme mot de passe ?

C'est l'identifiant par défaut fourni par la configuration Compose, acceptable sur un ordinateur portable mais pas sur un serveur public. Changez-le avant d'ouvrir le moindre port vers internet, car c'est le realm Keycloak qui protège chaque route API derrière la passerelle Kong.

Quel port faut-il placer derrière mon reverse proxy ?

Le port 8000, celui de la passerelle API Kong. C'est le point d'entrée documenté, et il impose les vérifications JWT et clé API devant chaque service. Publier directement les ports des services permettrait de contourner entièrement la passerelle et son authentification.