Voici un pas-à-pas complet (tout en français) pour héberger l’agent IA décrit dans l’article du JDN sur Coolify ; vous aurez ainsi un serveur HTTPS public qui combine :
| Élément | Minimum recommandé | Commentaires |
|---|---|---|
| VPS / serveur | 4 vCPU & 8 Go RAM (16 Go si > 7 B de paramètres, GPU si possible) | CPU x86_64 ou Apple Silicon |
| Stockage | 20 Go + (≈ 10 Go par modèle) | Montez un volume pour /root/.ollama |
| (Option) GPU NVIDIA | 8 Go VRAM + nvidia-container-toolkit |
Pour accélérer l’inférence citeturn10view0 |
| Nom de domaine | Wildcard (*.exemple.com) + tunnel Cloudflare |
Coolify gère automatiquement le TLS Let’s Encrypt |
| Ports | Aucune ouverture manuelle si Cloudflare Tunnel | Tout passe par le proxy intégré Traefik |
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
Suivez ensuite l’assistant web (port : https://<IP-serveur>:3000). citeturn12view0
*.exemple.com dessus.Une fois le tunnel actif, chaque service officiellement exposé par Coolify recevra automatiquement un certificat TLS valide.
ollama_data monté sur /root/.ollama.deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
et redéployez. citeturn10view0
5. Dès que l’URL https://openwebui.<votre-domaine> répond, connectez-vous puis exécutez :
ollama pull qwen3:1.7b
Le modèle est désormais servi sur http://ollama-api:11434/v1.
agent-stack/
├─ agent/
│ ├─ agent.json
│ └─ PROMPT.md
├─ Dockerfile
└─ docker-compose.yaml
agent/agent.json{
"model": "qwen3:1.7b",
"endpointUrl": "http://ollama-api:11434/v1",
"servers": [
{
"type": "stdio",
"config": { "command": "npx", "args": ["@playwright/mcp@latest"] }
}
]
}
``` citeturn8view0
### 4.3 `agent/PROMPT.md`
You are a tool-using assistant. When invoking tools, you MUST
return valid JSON only (no commentaire, pas de retour à la ligne).
Wrap arguments in a single-line JSON, e.g.
### 4.4 `Dockerfile`
```Dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY agent /app/agent
RUN pip install -U "huggingface_hub[mcp]>=0.32.4" \
&& pip install ollama \
&& apt-get update && apt-get install -y curl gnupg \
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs
ENV PYTHONUNBUFFERED=1
CMD ["tiny-agents", "run", "/app/agent"]
L’installation de Node JS est nécessaire pour les serveurs MCP. citeturn8view0
docker-compose.yamlversion: "3.9"
services:
tinyagent:
build: .
environment:
- HF_HOME=/tmp # évite d’écrire dans le conteneur en lecture seule
depends_on:
- ollama-api # nom du service généré par Coolify (voir l’UI)
restart: unless-stopped
docker-compose.yaml. citeturn11view0tinyagent, puis le connecte au réseau interne où réside ollama-api.Dans la console web de Coolify :
docker exec -it <container_tinyagent_id> bash
# prompt interne
> Qui est Ada Lovelace ? Ouvre un navigateur,
> cherche l’URL de son LinkedIn et renvoie-la.
La CLI tiny-agents affiche la trace MCP : téléchargement de la page via Playwright, extraction du lien, renvoi du résultat en JSON.
| Besoin | Action |
|---|---|
| Plus gros modèle | Passez à qwen3:7b et augmentez la RAM / ajoutez un GPU. |
| Autres outils MCP | Ajoutez un bloc servers supplémentaire dans agent.json (ex. server-filesystem pour accéder aux fichiers). citeturn8view0 |
| Réseau externe sécurisé | Placez un mot de passe ou un jeton dans Traefik ou utilisez Cloudflare Access. |
| Monitoring GPU | Activez le dashboard NVIDIA DCGM dans Coolify pour suivre l’utilisation. citeturn10view0 |
Vous disposez maintenant :
/v1/chat/completions) pour vos applis,Coolify, ollama et openwebui sont déjà installés sur mon VPS qui n a pas de GPU, mets a jour la procédure avec la.prise en compte de ces données stp
Hypothèses :
- Coolify, Ollama + Open WebUI tournent déjà sur votre VPS (CPU seulement).
- Vous voulez simplement ajouter Tiny Agents et l’adosser au service Ollama existant, sans toucher à l’infra HTTPS/Tunnel que Coolify gère déjà.
ollama-api) et le port interne (11434).coolify-internal).Sans GPU, privilégiez une quantisation Q4 ; par ex. :
# Dans la console Coolify (onglet "Terminal" du conteneur Ollama)
ollama pull qwen3:1.7b-q4_0 # ~3 Go RAM, vitesse correcte CPU
# ou
ollama pull llama3:8b-instruct-q4_0
Arborescence :
agent-stack/
├─ agent/
│ ├─ agent.json
│ └─ PROMPT.md
├─ Dockerfile
└─ docker-compose.yaml
agent/agent.json{
"model": "qwen3:1.7b-q4_0", // le modèle téléchargé
"endpointUrl": "http://ollama-api:11434/v1",
"servers": [
{
"type": "stdio",
"config": { "command": "npx", "args": ["@playwright/mcp@latest"] }
}
]
}
Remplacez ollama-api si votre service porte un autre nom.
PROMPT.mdYou are a tool-using assistant. When invoking tools, output ONLY
valid JSON (no prose, no line breaks). Example: {"query":"Ada Lovelace"}
DockerfileFROM python:3.13-slim
WORKDIR /app
COPY agent /app/agent
RUN pip install -U "huggingface_hub[mcp]>=0.32.4" \
&& pip install ollama \
&& apt-get update && apt-get install -y curl gnupg \
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs
ENV PYTHONUNBUFFERED=1
CMD ["tiny-agents", "run", "/app/agent"]
docker-compose.yamlversion: "3.9"
services:
tinyagent:
build: .
# Facultatif : limiter la conso CPU/RAM
deploy:
resources:
limits:
cpus: "2"
memory: "4G"
environment:
- HF_HOME=/tmp
- OLLAMA_BASE_URL=http://ollama-api:11434
depends_on:
- ollama-api # rapproche les conteneurs dans Coolify
restart: unless-stopped
networks:
- coolify-internal # même réseau que le service Ollama
networks:
coolify-internal:
external: true
Important : remplacez le nom du réseau (
coolify-internal) si Coolify en utilise un autre ; vous le voyez dans la page « Container » d’Ollama.
agent-stack.docker-compose.yaml.HF_ENDPOINT (si vous utilisez un miroir comme https://hf-mirror.com)TZ=Europe/Paris (confort log)tinyagent, l’ajoute au réseau interne et résout ollama-api.# Dans Coolify › tinyagent › Terminal
> Quels sont les 3 derniers romans de Neil Gaiman ? Cherche sur le web et renvoie la liste en JSON.
Vous devriez voir le flux MCP : lancement de Playwright, requêtes HTTP, puis réponse JSON concise.
| Réglage | Où ? | Effet |
|---|---|---|
OLLAMA_MAX_LOOPS=64 |
service Ollama | Coupe les prompts trop longs, évite les OOM |
OLLAMA_NUM_PARALLEL=4 |
service Ollama | 4 tokens générés simultanément (multi-thread) |
OMP_NUM_THREADS=2 |
tinyagent | Limite les threads OpenMP si charge CPU haute |
Modèle …-q5_1 |
ollama pull |
Légèrement plus précis, +15 % RAM/CPU |
/v1/chat/completions exposé par Ollama.Besoin d’un outil MCP (lecture de fichiers, exécution de code, etc.) ?
Ajoutez-le simplement dansagent.jsonsousservers.
| Symptom | Piste de diagnostic |
|---|---|
tinyagent ne trouve pas ollama-api |
Mauvais nom de service ou réseau. Vérifiez docker inspect ou l’onglet Networks. |
| RAM saturée à 100 % | Passez à un modèle plus petit (phi3:3.8b-q4), réduisez num_ctx, montez la swap. |
| Réponses très lentes | Diminuez NUM_PARALLEL, essayez -q4_K_M (quantisation plus agressive). |
Bonne mise en production !
Comment ensuite utiliser le tiny agent pour interface avec les MCP dans des workflows n8n ?
Votre conteneur tinyagent tourne encore en mode CLI (run).
Passez-le en mode serveur HTTP :
# docker-compose.yaml (extrait)
services:
tinyagent:
build: .
command: ["tiny-agents", "serve", "/app/agent"] # ← passe en mode serveur
environment:
- PORT=8000 # port interne du serveur
- OLLAMA_BASE_URL=http://ollama-api:11434
- TZ=Europe/Paris
depends_on:
- ollama-api
restart: unless-stopped
networks:
- coolify-internal
labels: # si vous voulez l’exposer publiquement
- traefik.enable=true
- traefik.http.routers.tinyagent.rule=Host(`agent.exemple.com`)
- traefik.http.services.tinyagent.loadbalancer.server.port=8000
tiny-agents serve lance un endpoint OpenAI-compatible (routes /v1/*) prêt pour le streaming ou le mode blocking citeturn1view0
Déployez depuis Coolify → Redeploy ; l’URL interne devient :
http://tinyagent:8000/v1/chat/completions
ou, via Traefik :
https://agent.exemple.com/v1/chat/completions
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
networks:
- coolify-internal # même network que tinyagent
environment:
- N8N_HOST=n8n.exemple.com
- WEBHOOK_URL=https://n8n.exemple.com
- GENERIC_TIMEZONE=Europe/Paris
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`n8n.exemple.com`)
- traefik.http.services.n8n.loadbalancer.server.port=5678
Déployez-le via Add Resource → Docker Compose dans Coolify, même réseau.
sk-dummy (la clé n’est pas vérifiée côté Tiny Agents).http://tinyagent:8000/v1 (ou l’URL Traefik).n8n permet bien de définir un Base URL personnalisé pour tous les nœuds OpenAI citeturn16view0.
| Champ | Valeur |
|---|---|
| Method | POST |
| URL | http://tinyagent:8000/v1/chat/completions |
| Headers | Content-Type: application/json |
| Body (raw) | json { "model": "agent", "messages": [ {"role":"user","content":"Ouvre un navigateur, cherche la page LinkedIn d'Ada Lovelace et renvoie uniquement l'URL sous forme de JSON."} ], "stream": false, "temperature": 0 } |
Le conteneur renvoie un JSON OpenAI standard ; la partie tool_calls est gérée en interne (Playwright MCP).
agent (la valeur listée par GET /v1/models).Cherche "Prix du Bitcoin aujourd'hui" et renvoie la valeur dans un JSON {"btc":"..."} .
L’agent pilotera automatiquement Playwright ; aucun nœud “Tool” n’est requis côté n8n.
| # | Nœud (type) | Configuration clef |
|---|---|---|
| 1 | Cron | Tous les jours 09:00 |
| 2 | OpenAI Chat Model | Demande : « Récupère les trois gros titres du JDN, fournis-les en JSON ». |
| 3 | Set (JSON) | Parsage des champs content retournés |
| 4 | Notion | Écrit le résumé dans votre base « Veille » |
| Problème | Solution |
|---|---|
ECONNREFUSED depuis n8n |
vérifiez que tinyagent et n8n partagent bien coolify-internal, ou utilisez l’URL publique HTTPS. |
| Erreur JSON-parse dans la réponse | assurez-vous que votre PROMPT.md rappelle au modèle de ne renvoyer que du JSON valide (pas de commentaires, pas de retour à la ligne). |
| L’agent “oublie” qu’il a un navigateur | contrôle que le serveur Playwright MCP apparaît dans les logs de l’agent au démarrage. |
| L’exécution est trop lente (CPU) | utilisez des quantisations q4_K_M ou réduisez num_ctx dans Ollama ; limitez aussi PORT=8000 + --max-tokens 256 dans la requête. |
tiny-agents serve /app/agent → endpoint /v1.http://tinyagent:8000/v1.Peux tu maintenant me résumer de manière simple avec un maximum de use case précis en mettant en évidence essentiellement les cas liés aux avantages d'une solution full local (et a la confidentialité des données).
| Bénéfice clé | En pratique, ça change quoi ? | Exemples d’usage très concrets |
|---|---|---|
| Aucune donnée ne sort du périmètre | Tous les prompts, fichiers et réponses restent sur votre VPS ; rien n’est envoyé aux serveurs d’OpenAI ou d’un cloud tiers. | • Analyse de contrats confidentiels d’un client. • Génération de fiches patients (données de santé). • Résumés de dépêches internes « Top Secret » pour un comité de direction. |
| Traçabilité totale | Vous contrôlez les logs Docker, la persistance disque (volume /root/.ollama) et les backups. |
• Audit RGPD : vous prouverez que les données n’ont jamais quitté votre infra. • Relecture de code critique sans laisser d’empreinte sur Internet. |
| Personnalisation fine | Vous pouvez modifier les prompts de système, brancher vos propres outils MCP, changer le modèle à la volée. | • Ajout d’un serveur MCP « Filesystem » pour que l’agent lise un dépôt Git privé. • Switch rapide de qwen3:1.7b-q4_0 à un modèle interne entraîné sur vos tickets Jira. |
| Pas de coûts par token | Seul le prix du VPS (ou du serveur on-prem) compte ; aucune facture API variable. | • Traitement massif de 100 000 e-mails historiques pour un projet d’archivage. • Génération quotidienne de rapports marketing sans craindre un dépassement de budget. |
| Latence réseau nulle | Les appels entre n8n ↔ Tiny Agents ↔ Ollama se font en localhost ou réseau privé Docker. | • Autocomplétion de code en IDE via endpoint local : feedback < 100 ms. • Chatbot interne sur intranet d’usine sans connexion Internet. |
| Fonctionne hors-ligne | Une fois le modèle téléchargé, l’IA reste opérationnelle même sans accès Internet. | • Centre de données isolé (« air-gap ») de recherche défense. • Mission terrain avec serveur embarqué (bateau, mine, zone rurale). |
| Conformité légale souveraine | Les données restent dans la même juridiction ; pas de Cloud Act, pas de transfert transfrontalier. | • Cabinet d’avocats français traitant des dossiers sensibles. • Entreprise publique soumise aux règles SecNumCloud / ANSSI. |
| Évolutivité contrôlée | Vous choisissez quand ajouter CPU/GPU ou changer de machine, sans dépendre d’un quota SaaS. | • Montée en charge saisonnière : ajout d’un second VPS et équilibrage Traefik. • POC rapide sur petit CPU, passage en GPU A100 si besoin. |
| Sécurité renforcée | Pare-feu, VPN, segmentation réseau sont sous votre entière responsabilité ; aucun vecteur d’attaque “supply-chain” par API externe. | • Intégration dans un VLAN isolé avec accès uniquement via bastion SSH. • Revue de paquet Docker et signatures avant chaque mise à jour. |
Une stack 100 % locale vous garantit : confidentialité, contrôle, coût fixe et résilience.
Vous gardez les bénéfices d’un agent multi-outils (navigation web, lecture fichiers, automation n8n) sans jamais exposer vos données à un service tiers.
La meme chose en t appuyant sur l article du lien joint et en effectuant d autres recherches sur le Web si nécessaire pour avoir un vrai rapport exploitable sur lequel je pourrai me baser pour des propositions commerciales a des clients.
https://www.journaldunet.com/intelligence-artificielle/1542337-avoir-son-propre-agent-ia-gratuitement-mode-d-emploi/?gbmlus=8486e6fc289daa4df29ef316d4850e241b7df28d0ab014fd7d67165c9ab235db
Rapport : Pourquoi proposer une stack IA 100 % locale (Ollama + Tiny Agents + n8n) à vos clients
(synthèse basée sur l’article du JDN et sur une veille sectorielle 2023-2025)
L’association Ollama (serving LLM), Tiny Agents (orchestration MCP) et n8n (workflows no-code) fournit une alternative souveraine aux API cloud.
Cette approche réduit jusqu’à 100 % les fuites de données vers des tiers, divise par 10 à 50 les coûts récurrents liés aux tokens et simplifie la conformité RGPD / EU AI Act. citeturn1view0
| Point | Détail | Impact commercial |
|---|---|---|
| Explosion des coûts tokens | MCP --> nombreux allers-retours ; Claude 4 coûte 15 $ à 75 $ / M tokens | Facturer au token devient imprévisible ; local = coût fixe (VPS + élec) citeturn1view0 |
| Confidentialité totale | Les données sensibles restent on-device, même en air-gap | Atout différenciant pour secteurs régulés citeturn1view0 |
| Stack la plus simple | Tiny Agents + Ollama + Qwen 3 1.7 B = installation en quelques commandes | Faible time-to-market pour POC payants citeturn1view0 |
| Secteur | Cas d’usage local | Données protégées | Valeur client |
|---|---|---|---|
| Banque / Finance | Analyse de portefeuilles et génération de rapports MiFID II automatisés | Positions clients, transactions | Gain ⌀ 60 h / mois / analyste ; conformité EU AI Act (high-risk) |
| Santé | Résumés de dossiers DICOM + tri d’images médicales | Données de santé (RGPD “données sensibles”) | Evite transfert hors-UE ; accélère diagnostic |
| Industrie | Agent IA sur ligne SCADA : optimisation énergie / détection anomalies | Télé-métrie industrielle confidentielle | -12 % consommation ; maintien air-gap |
| Juridique | Analyse de contrats M&A et génération de clauses | Accords soumis à NDA | Réduit délai de revue de 50 % sans exposer les clauses |
| Retail / e-commerce | Moteur de recommandation offline sur catalogue + CRM | Données achat + PII clients | Aucune fuite vers SaaS ; ROI immédiat via ventes croisées |
| Service public | Chatbot intranet pour démarches RH | Données agents de l’État | Hébergement sur site, conformité SecNumCloud |
| Hypothèse | Cloud API | Stack locale |
|---|---|---|
| 10 M tokens / mois | Claude 4 Sonnet ≈ 150 € | VPS 8 vCPU + 16 Go RAM : 45 € |
| 100 M tokens / mois | ≈ 1 500 € | VPS GPU A100 40 Go + élec : 480 € |
| > sur 12 mois, l’économie potentielle dépasse 12 k € | ||
| (Effet amplifié si le client doit conserver les data > 10 ans) |
Le combo Ollama + Tiny Agents + n8n offre une plateforme clé en main, souveraine et économiquement compétitive pour automatiser les processus clients tout en garantissant la maîtrise complète des données.
Cette proposition résonne particulièrement auprès des secteurs régulés et des entreprises attachées à la confidentialité, mais elle séduit aussi les organisations cherchant à stabiliser leurs coûts et personnaliser leur IA sans dépendre d’un fournisseur cloud.