Category: Technology

  • ⚡ Votre agent SQL coûte-t-il trop cher ? Le problème vient peut-être de votre approche…

    ⚡ Votre agent SQL coûte-t-il trop cher ? Le problème vient peut-être de votre approche…

    Construire un agent SQL avec un LLM : deux approches possibles

    Quand on veut connecter un LLM à une base relationnelle, il y a un choix clé : comment donner le contexte du schéma SQL à l’agent.


    1️⃣ Tools on Demand

    L’agent ne connaît rien au départ. Il appelle des outils uniquement quand il en a besoin :

    • 🔎 Get_Tables_List → récupérer la liste des tables
    • 📋 Get_Table_Definition → connaître les colonnes d’une table
    • ▶️ Execute_SQL_Query → exécuter la requête finale

    ⚠️ Attention : si l’agent appelle plusieurs fois Get_Table_Definition pour préparer sa requête, le “window context” grossit à chaque étape et peut dépasser celui du “Schema Dump” puisque le “system prompt” est réinjecté à chaque fois → les coûts augmentent.

    ✅ Avantages

    • Toujours à jour (schéma récupéré dynamiquement)
    • Scalable pour de très grosses bases
    • Peu coûteux si l’agent ne fait que quelques appels

    ❌ Inconvénients

    • Peut devenir plus cher/plus lent si l’agent multiplie les appels

    2️⃣ Schema Dump (one-shot)

    Au début de la session, on charge toutes les définitions de tables dans la mémoire de l’agent. Il peut ensuite générer ses requêtes directement, sans repasser par les outils.

    ✅ Avantages

    • Plus rapide et parfois moins cher (un seul chargement initial)
    • Simple pour les bases petites/moyennes

    ❌ Inconvénients

    • Pas idéal pour les énormes DB (tokens explosent)
    • Pas automatiquement à jour si le schéma évolue

    📊 Exemples concrets de comparaison

    Requête simple (1 table)

    Tools on Demand: 3 659 Tokens

    Schema Dump: 8 195 Tokens

    ApprocheNombre de tokens
    Tools on Demand3 659 tokens
    Schema Dump8 195 tokens

    → Tools on Demand gagne de plus de 50% !

    Requête complexe (4 tables)

    Tools on Demand: 9 485 Tokens

    Schema Dump: 8 636 Tokens

    ApprocheNombre de tokens
    Tools on Demand9 485 tokens
    Schema Dump8 636 tokens

    → Schema Dump devient plus efficace pour les requêtes multi-tables.


    👉 En résumé

    • Si la requête SQL implique beaucoup de tables → Schema Dump est souvent plus efficace
    • Si la requête est simple (peu de tables) → Tools on Demand est plus économique
    • Pour les très grosses bases → Tools on Demand reste incontournable

    💬 Et vous, quelle approche utilisez-vous ?

    Plutôt Tools on Demand ou Schema Dump ?

    👇 Partagez votre expérience en commentaire :

    • Avez-vous testé les deux approches ?
    • Quels écarts de coûts avez-vous observés ?

    Besoin d’aide ? N’hésitez pas à me contacter : pymecatech.com

  • Sécurisez votre VPS pour héberger N8N avec Coolify : Guide pratique

    Sécurisez votre VPS pour héberger N8N avec Coolify : Guide pratique

    Sécurisez votre VPS pour héberger N8N avec Coolify

    Intro (public visé : développeurs freelance / usage perso — niveau intermédiaire)

    Tu veux héberger N8N sur un VPS sans exposer l’interface d’administration au public, tout en gardant uniquement les webhooks nécessaires accessibles ? Ce guide décrit une configuration pragmatique et reproductible : accès admin privé via Tailscale, proxy/SSL géré par Traefik avec challenge DNS (Cloudflare), et exposition sélective des webhooks via Cloudflare Tunnel.

    Note importante : Ce guide partage une configuration pragmatique qui a fonctionné; considérez-le comme point de départ, pas comme un modèle de production.

    TL;DR

    • Accès admin : Tailscale (réseau privé) + Tailscale SSH (optionnel) pour SSH sans ouvrir le port 22.
    • Réseau & firewall : Bloque les ports publiques au niveau du provider, et crée des règles UFW limitées pour le trafic interne entre containers/Tailscale.
    • HTTPS : Traefik + ACME DNS-01 (Cloudflare) pour obtenir des certificats sans exposer les ports HTTP.
    • Webhooks publics : Cloudflare Tunnel (cloudflared) pour exposer uniquement les routes HTTP des webhooks; ajoute tokens/IP whitelists/WAF pour durcir.

    Objectif

    Fournir une méthode simple pour :

    • rendre l’interface N8N accessible uniquement depuis ton réseau privé Tailscale,
    • exposer uniquement les endpoints webhooks nécessaires à l’extérieur via Cloudflare Tunnel,
    • conserver des certificats TLS valides via Traefik + ACME DNS-01 (Cloudflare).

    Prérequis

    • VPS (Ubuntu 22.04+ recommandé) avec accès root
    • Nom de domaine (Cloudflare recommandé pour DNS + API)
    • Coolify installé (Traefik fourni par Coolify)
    • Comptes : Tailscale, Cloudflare Zero Trust

    Options d’hébergement:

    • Hostinger : Vous pouvez utiliser mon code “pymecatech” pour avoir 20% de réduction
    • DigitalOcean : Interface simple, documentation excellente
    • Hetzner : Excellent rapport qualité-prix
    • Linode (Akamai) : Performance stable, support technique réputé
    • Vultr : Déploiement rapide, nombreuses localisations
    • OVHcloud : Hébergeur français, conformité RGPD

    Coolify

    Coolify est une alternative open-source à Vercel/Netlify qui vous permet de déployer facilement vos applications sur votre propre infrastructure. C’est un outil de déploiement self-hosted qui simplifie la gestion de vos services avec une interface web intuitive.

    Si vous n’avez pas encore préinstallé Coolify sur votre VPS, utilisez ceci :

    Réf : https://coolify.io/docs/get-started/installation


    1 – Installer et configurer Tailscale

    Avant de bloquer tous les ports de votre VPS afin de le rendre sécuritaire, il faut installer Tailscale afin de pouvoir y accéder lorsque le firewall bloquera tous les ports en entrée.

    Configuration du compte Tailscale

    1. Rendez-vous sur tailscale.com et créez un compte gratuit
    2. Connectez-vous avec votre compte Google, Microsoft ou GitHub
    3. Une fois connecté, vous aurez accès à votre tableau de bord Tailscale

    Installation sur le VPS

    Configuration de Tailscale

    Authentifiez vous avec l’URL fournie dans le terminal.

    Copier l’URL que vous avez dans votre terminal et collez-le dans un navigateur web. Ceci permettra d’authetifier votre VPS sur votre réseau Tailscale.

    Optionnel : Améliorez la sécurité de votre SSH grâce à Tailscale SSH.
    Cette fonctionnalité délègue l’authentification à votre fournisseur d’identité Tailscale existant (par ex. Google ou GitHub), ce qui élimine la nécessité de gérer séparément les utilisateurs Linux et les clés SSH.

    Démarrez Tailscale avec l’option --ssh :

    Recommendation(optionnel) : Renommez votre serveur dans Tailscale. De cette manière, vous n’aurez plus besoin de vous souvenir de son adresse IP Tailscale. Lorsque vous serez connecté à votre Tailscale, vous pourrez utiliser le nom que vous aurez définis.
    Sur votre compte Tailscale allez dans la section “Machine” puis sélectionnez votre serveur –>”…”–>”Edit machine name”

    Recommendation(optionnel) : “Disable key expiry”
    À la fin de ce tutoriel, vous pourrez vous connecter à votre VPS seulement depuis un ordinateur connecté à Tailscale. Si la clef de votre serveur expire, il ne sera plus connecté à votre réseau Tailscale et vous ne pourrez plus vous connecter.
    Si vous désirez quand même que la clef expire automatiquement pour des raisons de sécurité, assurez-vous que votre fournisseur VPS vous offre un moyen de se connecter via un “Web Terminal”.

    Sur votre compte Tailscale allez dans la section “Machine” puis sélectionnez votre serveur –>”…”–>”Disable key expiry”

    Obtenir votre adresse IP Tailscale

    Maintenant, vous pouvez vous connecter sécuritairement à votre VPS depuis n’importe quel appareil connecté à votre réseau Tailscale.

    Étape 2 : Sécurisation de votre VPS avec le firewall local UFW

    Vous pouvez vous référer à cette article : https://tailscale.com/kb/1077/secure-server-ubuntu

    Configuration

    Inspectez les règles en place :

    Vous devriez avoir ceci :

    Effacez toutes les règles d’UFW :

    Si vous avez d’autres règles, vous pouvez utiliser la commande

    sudo ufw delete <numéro de la règle à supprimer>
    

    Étape 3 : Configuration Docker et réseaux

    Identification du Docker host IP

    Prenez en note l’adresse qui est retournée par cette commande

    Identification des réseaux Docker de Coolify

    Recherchez les réseaux avec les noms bridge et coolify

    Utiliser docker inspect pour trouver les adresses

    Dans la sortie, localisez le champ IPAM → Config → Subnet

    Ajout des règles UFW pour la communication entre conteneurs

    Exemple :

    Redémarrez UFW :

    Vérification

    Vous devriez avoir quelque chose comme ça :

    textTo                         Action      From
    --                         ------      ----
    Anywhere on tailscale0     ALLOW IN    Anywhere                  
    10.0.0.1                   ALLOW IN    10.0.0.0/24               
    10.0.0.1                   ALLOW IN    10.0.1.0/24               
    Anywhere (v6) on tailscale0 ALLOW IN    Anywhere (v6)
    

    Accès à votre VPS

    Connectez-vous à Coolify via Tailscale :

    http://<votre IP Tailscale>:8000/

    **Firewall du VPS**

    Coolify fonctionne sur Docker, qui utilise des règles iptables basées sur le NAT pouvant contourner les pare-feu Linux traditionnels comme UFW.
    https://coolify.io/docs/knowledge-base/server/firewall#closing-ports-using-a-firewall

    En conséquence, le blocage de ports uniquement via UFW n’est pas efficace.
    Il faut donc fermer les ports au niveau de votre VPS.

    Félicitation vous avez un VPS qui est accessible seulement depuis Tailscale.

    Maintenant, si vous installez N8N, il y a de fortes chances que vous aurez besoin d’avoir des URL webhook acessibles depuis l’internet afin que vos workflow fonctionnent correctement.

    Étape 4 :Utilisation de votre nom de domaine

    Vous pouvez utiliser de vrais noms de domaine au lieu d’adresses IP/Nom Tailscale. Cependant, le MagicDNS de Tailscale ne permet pas d’ajouter des enregistrements DNS personnalisés, leur documentation recommande d’ajouter l’adresse IP Tailscale du serveur dans les enregistrements de votre fournisseur DNS. De cette façon, coolify.mydomaine.com pointe directement vers l’adresse IP Tailscale de votre VPS. Bien sûr, on pourrait aussi configurer un serveur DNS personnalisé dans le réseau local, mais pour l’instant c’est hors de la portée de ce tutoriel.

    L’image ci-dessous montre la configuration avec le DNS CloudFlare. La procédure devrait être très similaire si vous utilisez un autre fournisseur DNS.

    Utilisation de HTTPS

    À ce stade, http://coolify.<mydomaine>.com devrait fonctionner, mais pas HTTPS. Cela peut être acceptable dans un réseau local, mais ce n’est pas recommandé.

    Par défaut, la configuration Traefik de Coolify utilise Let’s Encrypt avec des HTTP challenges, qui nécessitent un accès public. Le HTTP challenges ne pourra pas fonctionner puisque le Firewall du VPS bloque tous les ports en entrée.
    À la place, j’ai configuré l’utilisation de DNS challenges avec Cloudflare (source).

    Générer un jeton d’API Cloudflare

    Créez un API Token dans Cloudflare avec les permissions suivantes :

    • Zone / DNS / Edit : permet à Traefik d’ajouter des enregistrements DNS TXT pour le challenge DNS-01.
    • Zone / Zone / Read : permet à Traefik de lire les zones DNS.

    Étapes :

    1. Accédez à votre tableau de bord Cloudflare.
    2. Naviguez vers : Mon profil > API Tokens > Create Custom Token
    3. Configurez les permissions comme suit :
      • Zone / DNS / Edit
      • Zone / Zone / Read
    4. Restreignez le jeton à votre domaine (<mydomain>.com) pour plus de sécurité 🔒

    Dans la configuration du proxy de Collify (Traefik), ajoutez la ligne suivante :

    Dans la même écran, remplacez les lignes:

      - '--certificatesresolvers.letsencrypt.acme.httpchallenge=true'
      - '--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=http'

    par

    - '--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare'
    - '--certificatesresolvers.letsencrypt.acme.dnschallenge.delaybeforecheck=0'

    **Redémarrez le proxy**

    Étape 5 : CloudFlare Tunnel pour exposer seulement vos Webhook N8N

    Maintenant, vous pouvez accéder à tous vos ressource avec HTTPS depuis le réseau Tailscale. Cependant, vos webhook N8N ne sont pas accessibles depuis l’internet. Il faut donc les exposer sécuritairement avec un CloudFlare Tunnel.

    Séparer et protéger les webhooks N8N de l’interface de connexion (Login UI)

    Créer un CloudFlare Tunnel:

    • Allez sur Cloudflare Zero Trust dashboard
    • Allez à Zero Trust → Networks → Tunnels
    • Cliquez “Create a Tunnel”
    • Sélectionnez “Cloudflared”, et donnez un nom (j’ai nommé le mien “webhook”).

    Choisissez votre environnement. La plus part des VPS utilisent Unbuntu, il faut donc choisir l’environnement “Debian”. Puis in faut exécuter la commande d’installation dans le terminale de votre VPS

    Configurez votre Tunnel pour exposer vos Webhook seulment

    Activez le SSL sur votre CloudFlare – mode : Full (Strict)

    Configurer le container N8N

    Ajouter les “labels” suivants :

    labels: - traefik.enable=true # Webhooks - traefik.http.routers.n8n-webhook-http.entrypoints=http - traefik.http.routers.n8n-webhook-http.rule=Host(`webhook.yourdomain.com`) && (PathPrefix(`/webhook/`) || PathPrefix(`/webhook-test/`)) - traefik.http.routers.n8n-webhook-http.service=n8n-webhook-service - traefik.http.routers.n8n-webhook-https.entrypoints=https - traefik.http.routers.n8n-webhook-https.rule=Host(`webhook.yourdomain.com`) && (PathPrefix(`/webhook/`) || PathPrefix(`/webhook-test/`)) - traefik.http.routers.n8n-webhook-https.service=n8n-webhook-service - traefik.http.routers.n8n-webhook-https.tls=true - traefik.http.routers.n8n-webhook-https.tls.certresolver=letsencrypt - traefik.http.services.n8n-webhook-service.loadbalancer.server.port=5678

    Maintenant il faut configurer N8N afin qu’il génère le bon URL pour les Webhook.

    Pour ce faire il faut ajouter la variable d’environnement WEBHOOK_URL avec la valeur que vous avez configuré dans CloudFlare.

    **Redémarrez votre service N8N**

    Maintenant N8N génère le bon URL pour les Webhook.

    N’oubliez pas, les Webhook sont maintenant accessible depuis l’internet, appliquez des mesures de contrôles:

    • Bearer Token: Exigez un jeton secret dans l’en-tête Authorization.
    • IP Whitelisting: Limitez les adresses IP sources autorisées dans les règles de pare-feu de Cloudflare.
    • Cloudflare WAF: Mettez en place des règles personnalisées pour bloquer le trafic suspect ou abusif.

    D’autre méthodes permettent de sécuriser :

    https://github.com/coollabsio/coolify/discussions/4031#discussioncomment-11102806

    https://community.n8n.io/t/how-i-secured-my-n8n-instance-with-cloudflare-zero-trust-no-open-ports-no-public-ip-further-edits-to-come/119834

    https://dev.to/dalenguyen/free-self-host-ai-agent-workflows-with-n8n-and-cloudflare-tunnel-2bff

    https://kjetilfuras.com/self-host-n8n-with-cloudflare-zero-trust/

    https://www.youtube.com/watch?v=HZFNt-Grw0U