DOC
Accueil/ Projets/ KOBIKE Tracking Notifier/ Guide 06 - Renseigner les credentials dans n8n (réseau Docker interne / Coolify)

Guide 06 - Renseigner les credentials dans n8n (réseau Docker interne / Coolify)

Objectif : configurer dans n8n les accès à PostgreSQL, SMTP, Shopify/Shifter et le secret du webhook, sachant que n8n, PostgreSQL et NocoDB tournent en conteneurs sur la même machine et le même réseau Docker (VPS via Coolify).


0. Le point clé à comprendre : localhost ≠ la base

Même si tout est « sur la même machine », chaque service tourne dans son propre conteneur. Depuis le conteneur n8n :

  • localhost / 127.0.0.1 = le conteneur n8n lui-même → ❌ ne pointe PAS vers Postgres.
  • L'IP publique du VPS = fait sortir puis rentrer par Internet → ❌ lent, et souvent bloqué (port non exposé).
  • Le bon host = le nom du service/conteneur Postgres sur le réseau Docker interne. Docker fournit un DNS interne : n8n résout ce nom vers l'IP privée du conteneur Postgres.

Règle : host = nom du conteneur/service Postgres, port 5432 (port interne, pas besoin qu'il soit exposé publiquement).


1. Pré-requis : n8n et Postgres sur le MÊME réseau Docker

Le DNS interne ne fonctionne que si les deux conteneurs partagent un réseau.

Vérifier (en SSH sur le VPS)

# Nom/reseau du conteneur Postgres
docker ps --format '{{.Names}}' | grep -i postgres
docker inspect <nom_conteneur_postgres> -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}'
docker inspect <nom_conteneur_n8n>       -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}'

Les deux doivent afficher au moins un réseau en commun.

Dans Coolify

  • Déployer n8n et Postgres dans le même Projet aide, mais ne suffit pas toujours.
  • Sur chaque ressource (n8n et Postgres), activer l'option « Connect to Predefined Network » (Configuration → Network). Cela les met sur le réseau partagé de Coolify et les rend résolubles par nom.
  • Redéployer après activation.

Test rapide de résolution

docker exec -it <nom_conteneur_n8n> sh -c "getent hosts <host_postgres> || nslookup <host_postgres>"

Si ça résout une IP 10.x / 172.x, le réseau est bon.


2. Trouver les valeurs Postgres dans Coolify

Ouvrir la ressource PostgreSQL dans Coolify → onglet où figurent les connexions :

  • Internal URL / Connection string interne : de la forme postgres://<user>:<password>@<host_interne>:5432/<database> → c'est cette URL qu'il faut décomposer (pas l'External/Public).
  • Host interne (<host_interne>) : souvent l'UUID du service ou le nom du conteneur généré par Coolify. C'est la valeur à mettre dans le champ Host de n8n.
  • User, Password, Database : affichés sur la même page.

Astuce : le champ à copier est le host de l'URL interne, jamais l'IP publique ni localhost.


3. Créer la credential PostgreSQL dans n8n (pas à pas)

  1. Dans n8n : menu de gauche → CredentialsAdd credential (ou, depuis un node Postgres, « Create New Credential »).
  2. Type : Postgres.
  3. Remplir :
    Champ Valeur
    Host <host_interne> (nom/UUID du service Coolify - pas localhost)
    Database <database>
    User <user>
    Password <password>
    Port 5432
    SSL Disable (connexion interne au réseau Docker)
  4. Cliquer Save - n8n exécute un test de connexion. Un ✅ = OK.
  5. Dans le workflow, chaque node Postgres (Upsert client, etc.) → sélectionner cette credential à la place du placeholder Postgres Coolify.

4. Credential SMTP (envoi d'email)

Node Send Email → Create New Credential → type SMTP :

Champ Valeur
Host serveur SMTP (ex. smtp.gmail.com, ou un SMTP transactionnel)
Port 587 (STARTTLS) ou 465 (SSL)
User / Password identifiants SMTP (pour Gmail : mot de passe d'application, pas le mot de passe du compte)
SSL/TLS selon le port

Alternative : utiliser le node Gmail avec OAuth2 si tu passes par un compte Google Workspace.


5. Credentials Shopify & Shifter (API externes)

Ces appels sortent sur Internet (donc host public, normal ici) :

  • Shopify : le plus simple est un node HTTP Request avec un header X-Shopify-Access-Token. Pour ne pas écrire le token en clair dans le node, créer une credential Header Auth (Name : X-Shopify-Access-Token, Value : shpat_...) et la référencer. Voir guide 04.
  • Shifter : idem une fois l'accès obtenu (Header Auth ou Basic Auth selon ce que fournit Shifter). Voir guide 05.

6. Secret du webhook (déclencheur HiFlow)

Le workshop attend un en-tête X-Webhook-Token (node « Valider le token »). Ne pas coder le secret en dur :

  1. Définir une variable d'environnement sur le conteneur n8n (via Coolify → n8n → Environment Variables), ex. WEBHOOK_TOKEN=une_valeur_longue_aleatoire.
  2. Dans le node « Valider le token », comparer à ={{ $env.WEBHOOK_TOKEN }}.
  3. Renseigner le même secret côté HiFlow (en-tête sortant). Voir guide 03.

7. Sécurité & bonnes pratiques

  • Clé de chiffrement n8n : n8n chiffre les credentials au repos avec N8N_ENCRYPTION_KEY. Définir cette variable et la sauvegarder (Coolify → Environment). Si elle change/est perdue, toutes les credentials deviennent illisibles.
  • Jamais de secret en clair dans un node ou un workflow exporté : toujours passer par une credential ou une variable d'environnement.
  • Postgres non exposé publiquement : garder le port 5432 uniquement sur le réseau interne (ne pas publier de port public dans Coolify).
  • Sauvegardes : sauvegarder la base n8n (workflows + credentials chiffrées) et la clé de chiffrement ensemble.

8. Dépannage (erreurs fréquentes)

Erreur dans n8n Cause probable Solution
ECONNREFUSED 127.0.0.1:5432 Host = localhost Mettre le nom du service Postgres
getaddrinfo ENOTFOUND <host> Conteneurs pas sur le même réseau, ou mauvais nom Activer « Connect to Predefined Network » sur les deux, vérifier le nom (§1)
timeout / pas de réponse Tentative via IP publique / port non exposé Utiliser le host interne + port 5432
password authentication failed User/password de l'URL externe ≠ interne Reprendre les identifiants de l'Internal URL Coolify
no pg_hba.conf entry ... SSL off SSL mal réglé Passer SSL sur Disable (interne)

Checklist

  • n8n et Postgres sur le même réseau Docker (test getent hosts OK).
  • Credential Postgres : host = service interne, port 5432, SSL off, test ✅.
  • Credential SMTP testée (email de test reçu).
  • N8N_ENCRYPTION_KEY définie et sauvegardée.
  • WEBHOOK_TOKEN défini et référencé via $env.
  • Aucun secret en clair dans les nodes.