Ollama en production : ce qui change après le premier démarrage
Déployer Ollama prend quelques minutes. Le faire tourner de façon fiable sur la durée demande davantage d'attention. En production, trois points concentrent l'essentiel des problèmes : la gestion des modèles (lequel charger, lequel retirer pour libérer du disque), la surface d'attaque de l'API (non authentifiée par défaut sur le port 11434), et la consommation mémoire (un modèle mal dimensionné sature la RAM et fait tuer le processus par le noyau). Ce guide part du principe que le conteneur ollama tourne déjà et se concentre sur ces trois axes, plus l'intégration avec les outils de votre stack.
Ce que la gestion avancée apporte concrètement
- Pull sélectif — vous téléchargez uniquement le modèle dont vous avez besoin, sans remplir le disque de variantes inutiles.
- Suppression propre —
ollama rmlibère l'espace disque et réduit le temps de chargement des modèles restants. - API REST documentée — Ollama expose
/api/generate,/api/chatet/v1/chat/completions; un reverse proxy devant donne un endpoint HTTPS avec authentification. - Concurrence contrôlée —
OLLAMA_MAX_LOADED_MODELSempêche plusieurs modèles de se charger simultanément et d'épuiser la RAM. - Variables d'environnement persistantes —
OLLAMA_KEEP_ALIVE,OLLAMA_NUM_THREADSetOLLAMA_CONTEXT_SIZEs'injectent dans ledocker runou dans uncompose.ymlversionné. - Rotation de modèles scriptable — un simple appel
curlsur/api/pullsuffit à automatiser la mise à jour d'un modèle depuis un pipeline CI. - Exposition sélective — vous pouvez exposer l'API à vos seuls outils internes (Open WebUI, n8n, LangFlow) sans la rendre publique.
Choisir et gérer ses modèles : taille, RAM et quantisation
La taille d'un modèle s'exprime en milliards de paramètres (B) et détermine la RAM nécessaire. Un modèle 1B/3B tient en 2 à 3 Go et convient aux tâches simples (classification, résumé court) sur un VPS modeste. Un 7B/8B demande 5 à 6 Go en Q4 : c'est le rapport qualité/ressources le plus courant. Un 13B nécessite 9 à 10 Go, et un 70B dépasse 40 Go — réservé aux VPS hautes mémoire ou aux configurations GPU. Pour chaque taille, la quantisation ajuste le compromis qualité/vitesse : Q4_K_M offre un bon compromis qualité/vitesse sur CPU, Q8 conserve plus de précision au prix d'une RAM doublée. Avant de pull un modèle, vérifiez l'espace libre avec df -h et la RAM disponible avec free -h.
Opérations courantes : pull, suppression et exposition de l'API
Lister les modèles disponibles
Exécutez docker exec ollama ollama list pour voir les modèles déjà téléchargés, leur taille sur disque et leur date d'ajout.
Télécharger un nouveau modèle
Lancez docker exec ollama ollama pull llama3.2:3b pour un modèle léger, ou docker exec ollama ollama pull qwen2.5:7b-instruct-q4_K_M pour un 7B quantisé. Le suffixe q4_K_M précise la quantisation directement dans le tag.
Supprimer un ancien modèle
Libérez de l'espace avec docker exec ollama ollama rm llama3.1:8b. Vérifiez après avec docker exec ollama ollama list que le modèle n'apparaît plus.
Tester l'API REST en local
Appelez l'endpoint chat : curl http://127.0.0.1:11434/api/chat -d '{"model":"qwen2.5:7b-instruct-q4_K_M","messages":[{"role":"user","content":"Ping"}],"stream":false}'. La réponse JSON contient le champ message.content.
Configurer les variables d'environnement
Relancez le conteneur avec les options souhaitées : docker run -d -v ollama:/root/.ollama -p 127.0.0.1:11434:11434 -e OLLAMA_KEEP_ALIVE=-1 -e OLLAMA_MAX_LOADED_MODELS=1 -e OLLAMA_NUM_THREADS=4 --name ollama ollama/ollama. Ces paramètres maintiennent le modèle en mémoire et limitent la charge CPU.
Appliquer un rate-limit via nginx
Dans votre bloc server nginx, ajoutez limit_req_zone $binary_remote_addr zone=ollama:10m rate=10r/m; dans la section http, puis limit_req zone=ollama burst=5 nodelay; dans le location. Cela protège l'API des appels répétés en rafale.
Mettre à jour Ollama lui-même
Arrêtez et supprimez le conteneur : docker stop ollama && docker rm ollama. Récupérez la nouvelle image : docker pull ollama/ollama. Relancez avec les mêmes paramètres. Les modèles sont stockés dans le volume ollama, ils ne sont pas touchés.
Vérifier la santé du service
Consultez curl http://127.0.0.1:11434/api/tags pour obtenir la liste des modèles chargés. Un HTTP 200 avec un JSON valide confirme que le service répond correctement.
Ollama derrière un reverse proxy nginx avec token
Par défaut, Ollama écoute sur 127.0.0.1:11434 sans authentification. Pour l'exposer à vos outils (Open WebUI, n8n, un script distant), placez nginx en frontal avec un jeton Bearer. Le bloc de configuration ci-dessous délègue l'accès à un jeton secret défini dans la variable $api_token, vérifie l'en-tête Authorization et proxifie vers Ollama. Le CORS est configuré pour accepter les requêtes de votre interface sans exposer l'API à tous les origines.
Dans /etc/nginx/sites-available/ollama :
map $http_authorization $api_token_valid {
default 0;
"Bearer VOTRE_TOKEN_SECRET" 1;
}
server {
listen 443 ssl;
server_name api-ia.votre-domaine.com;
ssl_certificate /etc/letsencrypt/live/api-ia.votre-domaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api-ia.votre-domaine.com/privkey.pem;
location / {
if ($api_token_valid = 0) { return 401; }
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
add_header Access-Control-Allow-Origin "https://ui.votre-domaine.com";
}
}Activez la configuration avec ln -s /etc/nginx/sites-available/ollama /etc/nginx/sites-enabled/ puis nginx -t && systemctl reload nginx.
Performance CPU : choisir la bonne quantisation
Sur CPU, Q4_K_M est le point d'équilibre recommandé : une perte de qualité marginale par rapport au Q8, pour une vitesse de génération environ 40 % plus élevée et une consommation mémoire réduite de moitié. Réservez le Q8 aux cas où la précision est critique (code, logique formelle) et que votre VPS dispose d'au moins 16 Go de RAM libre. Ajustez OLLAMA_NUM_THREADS au nombre de cœurs physiques (pas logiques) pour éviter la contention : sur un VPS 4 vCPU, démarrez à 3. Le paramètre OLLAMA_CONTEXT_SIZE (défaut : 2048 tokens) influence directement la RAM par requête ; réduisez-le si vous gérez de nombreux appels courts en parallèle.
Dépannage : les cas les plus courants
Quatre situations reviennent régulièrement en production.
Modèle trop lent. La génération dépasse 2-3 tokens par seconde sur CPU pour un 7B ? Vérifiez que OLLAMA_NUM_THREADS n'est pas à 1 (défaut si non défini sur certaines images). Vérifiez aussi qu'un seul modèle est chargé (OLLAMA_MAX_LOADED_MODELS=1) : deux modèles simultanés se disputent les cœurs et la bande passante mémoire.
VRAM insuffisante (GPU). Si le journal Docker affiche CUDA out of memory ou ROCm error, le modèle ne tient pas en VRAM. Passez au tag q4_K_M ou réduisez OLLAMA_CONTEXT_SIZE. Ollama bascule en CPU si la VRAM est insuffisante, mais sans l'indiquer clairement : comparez les vitesses de génération pour le détecter.
Connexion API refusée. curl: (7) Failed to connect depuis l'extérieur alors que le service écoute ? Le pare-feu bloque le port 11434, ou nginx n'est pas démarré. Vérifiez avec ss -tlnp | grep 11434 (doit montrer 127.0.0.1, pas 0.0.0.0) et systemctl status nginx.
Signal killed / OOM. Le processus est tué par le noyau (OOM killer). La RAM du VPS est insuffisante pour le modèle sélectionné. Repassez à une taille inférieure ou activez un swap de 4 à 8 Go comme tampon : fallocate -l 4G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile. Le swap ralentit la génération mais évite les arrêts brutaux.
Intégration avec d'autres outils du VPS
Ollama est un backend : il prend toute sa valeur quand d'autres services s'y connectent. Trois outils s'intègrent naturellement sur le même VPS.
Open WebUI expose une interface de conversation comparable à ChatGPT, branchée sur l'API Ollama locale. Dans son fichier d'environnement, définissez OLLAMA_BASE_URL=http://ollama:11434 (si les deux conteneurs partagent un réseau Docker) ou OLLAMA_BASE_URL=http://127.0.0.1:11434 si Open WebUI tourne sur le même hôte. Open WebUI gère la sélection du modèle, l'historique des conversations et la gestion des utilisateurs. Attention : le couplage Ollama ↔ Open WebUI expose une surface d'attaque supplémentaire à surveiller — voir la section CVE-2026-45672 ci-dessous.
LangFlow est un constructeur visuel de pipelines LLM. Ajoutez un nœud Ollama dans votre flow, renseignez http://127.0.0.1:11434 comme base URL et sélectionnez le modèle dans la liste déroulante. LangFlow appelle directement l'endpoint /api/generate sans authentification interne — placez-le sur le réseau privé du VPS, pas exposé publiquement.
n8n permet de déclencher des appels Ollama depuis un workflow d'automatisation. Utilisez le nœud HTTP Request pointant sur http://127.0.0.1:11434/api/chat avec un corps JSON contenant model et messages. Depuis n8n, vous pouvez chaîner un appel Ollama à une étape de récupération de données, d'envoi d'e-mail ou de webhook sortant sans écrire de code.
CVE-2026-45672 : contournement d'autorisation dans Open WebUI
Publiée le 21 mai 2026 (GHSA-482j-2pq6-q5w4), cette vulnérabilité affecte toutes les versions d'Open WebUI antérieures à 0.8.12. Score CVSS : 8.8 (élevé).
Mécanique de l'attaque. Un utilisateur authentifié peut exécuter du code Python arbitraire via l'endpoint /api/v1/utils/code/execute, même si l'administrateur a désactivé l'exécution de code dans les réglages (ENABLE_CODE_EXECUTION=false). La garde est déclarée dans la configuration mais n'est jamais vérifiée côté API : n'importe quel compte vérifié sur l'instance peut déclencher l'exécution.
Impact. L'attaquant accède au backend Jupyter sous-jacent et peut lire des fichiers arbitraires sur le VPS, voler des secrets (clés d'API, jeton Ollama, variables d'environnement), ou établir une persistance. La confidentialité, l'intégrité et la disponibilité du serveur sont compromises.
Pourquoi c'est critique dans un couplage Ollama ↔ Open WebUI. Ollama et Open WebUI tournent souvent sur le même VPS, parfois dans le même réseau Docker, avec des secrets partagés (clé d'API OpenAI de repli, jeton Bearer de l'API Ollama). Un accès RCE sur Open WebUI donne donc un accès direct à l'API Ollama et aux modèles en mémoire, sans passer par le reverse proxy.
Correction. Mettez à jour Open WebUI vers la version 0.8.12 ou supérieure. Cette version applique la vérification de ENABLE_CODE_EXECUTION au niveau de l'endpoint API, là où elle aurait toujours dû l'être.
Vérifier votre version. Depuis le conteneur : docker exec open-webui cat /app/package.json | grep '"version"'. Si la sortie est inférieure à 0.8.12, la mise à jour est urgente : docker pull ghcr.io/open-webui/open-webui:main && docker stop open-webui && docker rm open-webui puis relancez avec les mêmes paramètres d'environnement.
Durcir le couplage Ollama ↔ Open WebUI après CVE-2026-45672
Quatre mesures complémentaires à appliquer après la mise à jour vers 0.8.12.
1. Isoler les réseaux Docker. Créez un réseau bridge dédié (docker network create llm-private) et placez-y les deux conteneurs. Ollama n'est alors joignable depuis Open WebUI que par le nom de service (http://ollama:11434), sans passer par l'interface publique du VPS.
2. Ne jamais exposer le port 11434 à l'extérieur. Confirmez que le binding reste sur 127.0.0.1:11434. Sur le réseau Docker interne, Ollama répond sur le port 11434 sans authentification — c'est acceptable si le réseau est privé ; il devient un vecteur dès qu'il est accessible depuis l'extérieur.
3. Désactiver l'exécution de code si vous n'en avez pas besoin. Dans les variables d'environnement d'Open WebUI, posez ENABLE_CODE_EXECUTION=false. Après la mise à jour vers 0.8.12, ce paramètre est enfin appliqué au niveau de l'API. Si votre usage n'inclut pas d'exécution de code, désactivez-le comme mesure de défense en profondeur.
4. Restreindre les inscriptions. Dans l'interface d'administration Open WebUI (Réglages → Administration), désactivez les inscriptions publiques (ENABLE_SIGNUP=false) si l'instance est exposée à Internet. CVE-2026-45672 exige un compte vérifié : réduire la surface d'inscription réduit la surface d'attaque.