[{"data":1,"prerenderedAt":199},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-litellm-vps-ma-fr":6,"promo-bar-likely":198},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-litellm-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":133,"ctaBody":134,"ctaButton":135,"ctaUrl":136,"relatedPosts":137},156,"self-host-litellm-vps",{"fr":10,"en":12,"ar":13,"es":14},"self-host-litellm-on-a-vps-your-private-llm-api-gateway","استضف-litellm-ذاتيا-على-vps-بوابة-api-خاصة-لنماذج-llm","alojar-litellm-en-un-vps-pasarela-llm-privada","Héberger LiteLLM sur un VPS : votre passerelle d'API LLM privée","Déployez LiteLLM sur un VPS ServOrbit : passerelle d'API compatible OpenAI vers Ollama, Anthropic, Azure et 100+ LLM, avec suivi des dépenses et limites par clé.",9,3,false,"2026-01-21T00:00:00+00:00","2026-11-09T20:55:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-litellm-vps-poster.svg",{"categorySlug":34,"appSlug":35},"ia","litellm","Votre application appelle un seul endpoint. LiteLLM décide quel modèle traite la requête — votre Ollama local, Anthropic Claude, GPT-4 ou n'importe lequel des plus de 100 autres fournisseurs. Il parle l'API d'OpenAI : aucune modification de SDK n'est jamais nécessaire. Auto-hébergé sur un VPS, il ajoute la limitation de débit, des plafonds de budget par clé d'API et un tableau de bord analytique intégré — de quoi donner à plusieurs équipes l'accès à l'IA sans craindre que les coûts ne s'emballent.",[38,42,52,55,83,86,101,104,112,115,124,128,130],{"type":39,"title":40,"body":41},"h2","Pourquoi LiteLLM est la couche manquante des stacks d'IA auto-hébergées","Ollama est excellent pour faire tourner des modèles en local. Open WebUI l'habille d'une interface de chat. Mais dès que vous vous mettez à construire des applications — et plus seulement à discuter — il vous faut un intermédiaire : un proxy qui normalise la surface d'API, suit les coûts par projet et vous permet de changer de modèle sans toucher au code applicatif. C'est précisément le rôle de LiteLLM. Il s'intercale entre votre application et n'importe quel backend LLM, en exposant un unique endpoint compatible OpenAI. Votre code reste identique, que vous acheminiez les requêtes vers Llama 3.1 sur Ollama, Claude 3.5 Haiku ou GPT-4o.",{"type":43,"title":44,"items":45},"ul","Ce que LiteLLM vous apporte d'emblée",[46,47,48,49,50,51],"API unifiée et compatible OpenAI — fonctionne avec tous les SDK, bibliothèques et outils qui ciblent l'API d'OpenAI.","Plus de 100 intégrations de fournisseurs : Ollama, Anthropic, OpenAI, Azure OpenAI, Mistral, Cohere, Bedrock et bien d'autres.","Clés d'API virtuelles avec limites de dépenses et de débit par clé — distribuez des clés aux équipes et plafonnez les coûts mensuels.","Tableau de bord intégré sur \u002Fui avec analyse des dépenses en temps réel, ventilation par modèle et journaux des requêtes.","Répartition de charge et bascule automatique entre plusieurs endpoints de fournisseurs ou réplicas de modèles.","Licence Apache 2.0 — aucune télémétrie, aucune remontée d'informations vers l'extérieur, entièrement compatible air-gap une fois associée à Ollama.",{"type":39,"title":53,"body":54},"Prérequis","Au moins 1 Go de RAM et Ubuntu 22.04. Docker et le plugin Compose installés. Le port 4000 ouvert, ou un reverse proxy Caddy\u002FNginx pour le HTTPS. C'est tout — LiteLLM est lui-même un proxy Python qui réclame environ 256 Mo ; PostgreSQL absorbe l'essentiel du budget RAM restant. Pour des équipes générant du trafic concurrent, 2 Go sont plus confortables.",{"type":56,"title":57,"steps":58},"steps","Déployer LiteLLM sur un VPS",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"Provisionner le VPS","Commandez un VPS Solo (2 vCPU, 4 GB, Ubuntu 22.04) : LiteLLM se contente d'un gigaoctet, le plus petit plan du catalogue en sert le double. Connectez-vous en SSH et installez Docker : `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. Le plugin Compose est inclus.",{"title":63,"body":64},"Générer les secrets","Lancez `openssl rand -hex 32` pour générer LITELLM_MASTER_KEY — elle déverrouille le tableau de bord et tous les endpoints d'API d'administration. Créez `\u002Fopt\u002Flitellm\u002F.env` avec : `LITELLM_MASTER_KEY`, `UI_USERNAME`, `UI_PASSWORD`, `DB_NAME=litellm`, `DB_USER=litellm`, `DB_PASSWORD=\u003Cstrong-password>`.",{"title":66,"body":67},"Rédiger docker-compose.yml","Créez `\u002Fopt\u002Flitellm\u002Fdocker-compose.yml` avec deux services : `db` (postgres:16-alpine, variables d'environnement issues du .env, volume litellm_db) et `litellm` (image ghcr.io\u002Fberriai\u002Flitellm épinglée sur une version explicite et son condensat `@sha256:`, jamais sur `main-latest` — voir « Chaîne d'approvisionnement » plus bas —, port 4000:4000, depends_on db, DATABASE_URL + LITELLM_MASTER_KEY + UI_USERNAME + UI_PASSWORD, volume litellm_config:\u002Fapp\u002Fdata). Lancez `docker compose up -d`.",{"title":69,"body":70},"Ouvrir le tableau de bord","Rendez-vous sur `http:\u002F\u002F\u003Cvps-ip>:4000\u002Fui` et connectez-vous avec vos UI_USERNAME \u002F UI_PASSWORD. Vous arrivez sur le tableau de bord de LiteLLM. Allez dans Models pour ajouter votre premier fournisseur. Pour une instance Ollama locale sur le même VPS, définissez le nom du modèle sur `ollama\u002Fllama3.1` et l'API base sur `http:\u002F\u002Fhost.docker.internal:11434`. Pour Anthropic, collez votre clé d'API et ajoutez `anthropic\u002Fclaude-3-5-haiku-20241022`.",{"title":72,"body":73},"Tester la passerelle","Depuis votre poste de travail, testez : `curl http:\u002F\u002F\u003Cvps-ip>:4000\u002Fv1\u002Fchat\u002Fcompletions -H \"Authorization: Bearer \u003CLITELLM_MASTER_KEY>\" -H 'Content-Type: application\u002Fjson' -d '{\"model\": \"ollama\u002Fllama3.1\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'`. Vous devriez recevoir une réponse en streaming — acheminée par LiteLLM vers votre Ollama.",{"title":75,"body":76},"Distribuer des clés d'API aux équipes","Dans le tableau de bord, sous API Keys, cliquez sur New Key. Donnez-lui une description (par exemple « frontend-team »), définissez `max_budget: 50` (USD\u002Fmois) et un `tpm_limit` facultatif. Partagez cette clé avec l'équipe — elle pointe son SDK OpenAI vers `http:\u002F\u002F\u003Cvps-ip>:4000` et utilise cette clé. Les dépenses sont suivies par clé dans le tableau de bord.",{"title":78,"body":79},"Ajouter le HTTPS avec Caddy","Installez Caddy : `apt install -y caddy`. Éditez `\u002Fetc\u002Fcaddy\u002FCaddyfile` : `llm.votre-domaine.com { reverse_proxy localhost:4000 }`. Rechargez : `systemctl reload caddy`. Fermez le port 4000 dans votre pare-feu — tout le trafic passe désormais par le 443 avec TLS automatique.",{"title":81,"body":82},"Se connecter la première fois","Ouvrez l'interface d'administration sur \u002Fui : LiteLLM affiche un formulaire identifiant\u002Fmot de passe. Saisissez admin et le mot de passe fourni, puis créez vos clés virtuelles depuis le tableau de bord.",{"type":39,"title":84,"body":85},"Chaîne d'approvisionnement : épingler, vérifier, faire tourner les clés","Une passerelle LLM détient les clés de tous vos fournisseurs : c'est exactement ce qu'un voleur d'identifiants vient chercher. Le fil de signalement ouvert sur le dépôt de LiteLLM (issue 47826) rapporte que les roues de la version 1.107.0 publiées sur PyPI embarquaient trois fichiers étrangers au projet, `cook.pth`, `cook.py` et `sitecustomize.py`, déposés à la racine de `site-packages` : un voleur d'identifiants et un chargeur d'exécution de code, lancés à chaque démarrage de Python. PyPI a mis cette version en quarantaine. Les mainteneurs indiquent avoir retiré les images Docker malveillantes, et leur billet d'incident décrit un détournement de leur pipeline de publication à partir de jetons de développeurs. Le rapport initial précisait ne pas avoir inspecté les images ; une mise à jour du même fil y a ensuite retrouvé les trois fichiers, dans l'image principale vérifiée, et recommande de traiter toutes les images de cette version comme compromises. Ce guide ne peut pas savoir ce que vous avez tiré à telle date : les quatre gestes ci-dessous le déterminent chez vous.",{"type":56,"title":87,"steps":88},"Savoir ce qui tourne réellement chez vous",[89,92,95,98],{"title":90,"body":91},"Relever le condensat de l'image","Un tag comme `main-latest` ne dit rien de ce qui s'exécute. Lancez `docker compose images` puis `docker image inspect --format '{{index .RepoDigests 0}}' ghcr.io\u002Fberriai\u002Flitellm:main-latest` (remplacez par la référence de votre fichier compose). Notez le `sha256:` obtenu et comparez-le à celui d'une version dont vous avez vérifié la provenance.",{"title":93,"body":94},"Chercher les fichiers cités, sans lancer Python","Dans un environnement suspect, tout démarrage de Python rejoue le code malveillant, `pip` compris. Cherchez donc avec un outil qui n'en lance pas : `docker compose exec litellm find \u002F -name 'cook.pth' -o -name 'cook.py' -o -name 'sitecustomize.py' -o -name 'litellm-1.107.0.dist-info' 2>\u002Fdev\u002Fnull` (si l'image fournit `find`). Un `sitecustomize.py` isolé ailleurs sur le système peut être légitime ; ce qui alerte, c'est un `cook.pth` à côté dans `site-packages`, ou un dossier `litellm-1.107.0.dist-info`. Trouver ces fichiers confirme l'exposition ; ne rien trouver ne prouve pas que l'environnement est sain.",{"title":96,"body":97},"Lire la version installée","Hors de tout soupçon, `pip show litellm` (dans l'environnement virtuel d'une installation directe) ou `docker compose exec litellm pip show litellm` indique la version. Si c'est la 1.107.0, ou si vous avez un doute sur une image tirée à cette période, passez à la rotation des clés plus bas sans attendre.",{"title":99,"body":100},"Chercher les traces d'exécution","Le rapport signale un verrou `\u002Ftmp\u002Fremote_code_loader.lock`, un processus `python` orphelin dont le répertoire courant est `\u002F`, et un fichier témoin `\u002Ftmp\u002F.pc_once_*` écrit seulement après un envoi réussi. Son absence ne prouve rien : un conteneur recréé efface `\u002Ftmp`. Servez-vous-en comme d'un indice, pas comme d'un verdict.",{"type":39,"title":102,"body":103},"Épingler par condensat plutôt que par tag","Un tag est un pointeur que l'éditeur déplace ; le condensat `@sha256:` désigne des octets précis. Dans votre `docker-compose.yml`, écrivez `image: ghcr.io\u002Fberriai\u002Flitellm:\u003Cversion>@sha256:\u003Ccondensat>` avec une version explicite publiée avant l'incident ou vérifiée depuis, jamais `latest`, `main-latest` ni `main-stable`. Les mainteneurs recommandent d'épingler une version explicite, et le fil d'issue conseille le condensat. Gardez en tête la limite : un condensat prouve que vous retirez toujours les mêmes octets, pas qui les a construits. Les images de la 1.107.0 auraient été épinglées sans alerte. L'épinglage fige donc une décision que vous avez prise, il ne la remplace pas.",{"type":43,"title":105,"items":106},"Mettre à jour sans se faire surprendre",[107,108,109,110,111],"Lisez les notes de version et l'état du fil de sécurité avant de changer de version, plutôt que de laisser `docker compose pull` suivre un tag.","Récupérez le nouveau condensat depuis une machine de test, lancez la passerelle sans clés réelles, vérifiez-en le comportement, puis seulement reportez le condensat en production.","Quand l'éditeur publie des attestations de provenance, vérifiez-les : elles disent d'où vient l'image, ce qu'un simple condensat ne dit pas.","Conservez l'ancien condensat dans votre dépôt de configuration : revenir en arrière devient un changement d'une ligne.","Après toute alerte de sécurité, reconstruisez les conteneurs et les environnements virtuels à neuf plutôt que de nettoyer sur place.",{"type":39,"title":113,"body":114},"Si la 1.107.0 a tourné chez vous : faire tourner toutes les clés","Selon le rapport, si cette version a démarré sur un hôte joignant Internet, il faut supposer que l'envoi a réussi. Le code décrit lit les variables d'environnement des processus lisibles et, quand `DATABASE_URL` est défini, extrait les tables où la passerelle stocke les identifiants et les modèles de ses fournisseurs, soit toutes les clés amont qu'elle détient. Le renouvellement est donc à faire pour chaque secret que l'hôte pouvait atteindre, pas seulement pour la clé maîtresse. Révoquez d'abord chez le fournisseur, générez ensuite la clé de remplacement, puis relisez la consommation du dernier mois pour repérer un usage que vous ne reconnaissez pas.",{"type":43,"title":116,"items":117},"Ce qu'il faut renouveler",[118,119,120,121,122,123],"Toutes les clés de fournisseurs enregistrées dans la passerelle : Anthropic, OpenAI, Azure, Mistral, Bedrock et chacune des autres.","`LITELLM_MASTER_KEY` et toutes les clés virtuelles distribuées aux équipes.","Le mot de passe de la base (`DB_PASSWORD` et le `DATABASE_URL` qui l'embarque), ainsi que `UI_PASSWORD`.","Tout secret présent dans l'environnement d'un processus de l'hôte : jetons d'API, mots de passe de services voisins, fichiers `.env`.","Les clés SSH, jetons Git et identifiants cloud accessibles depuis le VPS, si l'hôte en portait.","Après rotation, reconstruisez le VPS ou au minimum les conteneurs depuis une image vérifiée : copier de nouveaux secrets dans un hôte compromis les expose à nouveau.",{"type":125,"title":126,"body":127},"tip","Surveiller les sorties réseau","Le rapport décrit un envoi vers `www.litellm.dev`, un domaine qui n'est pas celui du projet, et une lecture horaire d'un dépôt GitHub tiers servant de boîte aux lettres pour de nouvelles instructions. Les mainteneurs eux-mêmes jugent qu'une restriction au niveau du réseau est celle qui compte, car un code malveillant ignore la configuration de l'application. Sur un VPS, refusez le trafic sortant par défaut puis autorisez uniquement les points d'accès de vos fournisseurs ; si votre pare-feu filtre par adresse plutôt que par nom, placez un proxy sortant avec liste d'autorisation. À défaut, journalisez les résolutions DNS de l'hôte et alertez sur tout nom que la passerelle n'a aucune raison d'appeler.",{"type":125,"body":129},"Associez LiteLLM à Ollama sur le même VPS pour une stack d'IA entièrement isolée (air-gap). Ollama assure l'inférence des modèles ; LiteLLM ajoute la couche passerelle — acheminement, limitation de débit et suivi de la consommation. Pour les charges de travail sensibles en matière de confidentialité (juridique, finance, médical), cela signifie qu'aucune donnée ne quitte votre infrastructure.",{"type":125,"title":131,"body":132},"La documentation officielle","Pour la configuration avancée et les options propres à l'outil, référez-vous à la \u003Ca href=\"https:\u002F\u002Fdocs.litellm.ai\" target=\"_blank\" rel=\"noopener noreferrer\">documentation officielle de LiteLLM\u003C\u002Fa>. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins, les mises à jour majeures et les cas d'usage spécifiques.","Déployez votre passerelle LLM privée","Auto-hébergez LiteLLM sur un VPS ServOrbit — acheminez les requêtes entre Ollama, Anthropic et plus de 100 fournisseurs depuis un unique endpoint compatible OpenAI, avec un contrôle de budget par clé.","Déployer LiteLLM","\u002Fapplications\u002Fia\u002Flitellm",[138,159,177],{"id":139,"slug":140,"slugs":141,"title":145,"excerpt":146,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":147,"updatedAt":148,"category":149,"categories":154,"featuredImage":30,"bgImage":31,"posterImage":156,"relatedSolution":157},11,"heberger-ollama-vps",{"fr":140,"en":142,"ar":143,"es":144},"how-to-host-ollama-on-a-vps","كيفية-استضافة-ollama-على-خادم-vps","como-alojar-ollama-en-un-vps","Héberger Ollama sur un VPS : guide opérationnel avancé","Configuration avancée d'Ollama sur VPS : gestion des modèles, reverse proxy nginx, sécurité API, quantisation Q4_K_M\u002FQ8, CVE-2026-45672 Open WebUI et couplage sécurisé.","2026-06-09T00:00:00+00:00","2026-11-04T16:30:24+00:00",{"id":150,"name":151,"slug":152,"color":153,"icon":34},1,"Intelligence Artificielle","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400",[155],{"id":150,"name":151,"slug":152,"color":153,"icon":34},"\u002Fblog\u002Fcovers\u002Fheberger-ollama-vps-poster.svg",{"categorySlug":34,"appSlug":158},"ollama",{"id":160,"slug":161,"slugs":162,"title":166,"excerpt":167,"readTime":168,"views":150,"isPinned":19,"noindex":19,"publishedAt":169,"updatedAt":170,"category":171,"categories":172,"featuredImage":30,"bgImage":31,"posterImage":174,"relatedSolution":175},2,"deployer-dify-vps",{"fr":161,"en":163,"ar":164,"es":165},"deploying-dify-on-a-vps-ai-workflows-under-control","نشر-dify-على-vps-سير-عمل-الذكاء-الاصطناعي-تحت-السيطرة","desplegar-dify-en-un-vps","Déployer Dify sur un VPS : guide de l'installation aux plugins","Installez Dify sur un VPS ServOrbit : prérequis, Docker Compose, plugins offline, limites de l'installation Docker, sauvegarde avant mise à jour, dépannage.",15,"2026-02-11T00:00:00+00:00","2026-10-29T03:10:23+00:00",{"id":150,"name":151,"slug":152,"color":153,"icon":34},[173],{"id":150,"name":151,"slug":152,"color":153,"icon":34},"\u002Fblog\u002Fcovers\u002Fdeployer-dify-vps-poster.svg",{"categorySlug":152,"appSlug":176},"dify",{"id":18,"slug":178,"slugs":179,"title":183,"excerpt":184,"readTime":185,"views":186,"isPinned":19,"noindex":19,"publishedAt":187,"updatedAt":188,"category":189,"categories":193,"featuredImage":30,"bgImage":31,"posterImage":195,"relatedSolution":196},"installer-n8n-vps",{"fr":178,"en":180,"ar":181,"es":182},"install-n8n-on-vps-with-docker-complete-2026-guide","تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026","instalar-n8n-en-vps-con-docker","Installer n8n sur VPS avec Docker : guide complet 2026","Déployez n8n sur VPS avec Docker, reverse proxy et HTTPS. Crash V8, 502 nginx, migration npm vers Docker et sécurisation des exécutions persistées (advisory août 2026).",19,4,"2026-06-05T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":160,"name":190,"slug":191,"color":192,"icon":191},"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[194],{"id":160,"name":190,"slug":191,"color":192,"icon":191},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":191,"appSlug":197},"n8n",true,1794270793017]