Table des matières
Mon OAuth Google marchait très bien sur n8n, hébergé sur le Coolify que je monte dans le guide VPS. Et un jour, en voulant connecter un nouveau credential YouTube : Erreur 400 invalid_request. Aucune explication claire de Google.
Le symptôme
Quand tu cliques "Sign in with Google" dans n8n, Google te bloque avec :
"You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy"
Le détail qui tue, c'est dans l'URL d'erreur :
redirect_uri=n8n.example.com/rest/oauth2-credential/callbackIl manque https://. Google compare avec l'URI configurée dans ta Cloud Console (https://n8n.example.com/...), ça matche pas, il rejette.
La cause
Le template Coolify par défaut pour n8n inverse deux variables dans le docker-compose :
# Le template bugué
- 'N8N_EDITOR_BASE_URL=${SERVICE_FQDN_N8N}' # FQDN = sans https
- 'WEBHOOK_URL=${SERVICE_FQDN_N8N}' # pareil
- 'N8N_HOST=${SERVICE_URL_N8N}' # URL = avec https (mauvais ici)SERVICE_FQDN = juste le hostname. SERVICE_URL = avec le protocole. Le template les utilise à l'envers.
Ça marchait avant parce que les anciennes versions de n8n toléraient une URL sans protocole. Depuis la v2, le parsing est plus strict.
Le piège

J'ai d'abord modifié les variables d'environnement dans l'interface Coolify. Redeploy. Rien. Le printenv dans le container montrait toujours les anciennes valeurs.
Le docker-compose écrase les variables de l'interface. C'est là qu'il faut modifier.
C'est un cas particulier d'une cause plus générale, celle que je mets en tête de ma liste dans ce qui marche en dev mais pas en prod : les variables d'environnement qui ne valent pas ce que tu crois.
Le fix
Dans Coolify, va dans le docker-compose de ton service n8n. Remplace ces 3 lignes :
# Avant
- 'N8N_EDITOR_BASE_URL=${SERVICE_FQDN_N8N}'
- 'WEBHOOK_URL=${SERVICE_FQDN_N8N}'
- 'N8N_HOST=${SERVICE_URL_N8N}'
# Après
- 'N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N}'
- 'WEBHOOK_URL=${SERVICE_URL_N8N}'
- 'N8N_HOST=${SERVICE_FQDN_N8N}'Ensuite :
- Redeploy depuis Coolify
- Vérifie avec
printenv | grep N8N_EDITORque la valeur commence parhttps:// - Supprime le credential Google/YouTube dans n8n et recrée-le, car n8n verrouille l'URL OAuth à la création
À garder en tête
En modifiant le docker-compose, tu t'écartes du template officiel Coolify. Le jour où Coolify corrige ce bug dans son template, tes modifs manuelles seront toujours là. Si un jour quelque chose casse après une MAJ, la méthode simple : installe une instance n8n vierge via Coolify, compare son docker-compose avec le tien, et réaligne. Ta base Postgres et tes données ne sont pas touchées par le docker-compose, c'est juste de la config.
Mise à jour : Coolify a corrigé, mais pas partout
Depuis, le template a bougé. Le n8n.yaml officiel de Coolify est aujourd'hui exactement dans l'état que je décrivais comme correct :
- 'N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N}'
- 'WEBHOOK_URL=${SERVICE_URL_N8N}'
- 'N8N_HOST=${SERVICE_FQDN_N8N}'Si tu déploies n8n via ce template aujourd'hui, tu n'as rien à faire. Le bug est mort.
Sauf que Coolify propose deux templates n8n. Et le second, n8n-with-postgresql, celui que tu prends si tu veux ta base Postgres dédiée, garde encore N8N_HOST=${SERVICE_URL_N8N}. Donc le protocole en trop, donc la même erreur 400 au bout du chemin.
Le fix décrit plus haut reste valable pour ce template-là. Une ligne à changer au lieu de trois.
Si tu appliques ce fix sur le template simple, tu te retrouves dans le cas que j'évoquais juste au-dessus : des modifications manuelles qui restent en place alors que l'upstream est déjà corrigé. Rien ne casse, les valeurs sont identiques. Mais c'est exactement le moment de comparer avec une instance vierge et de réaligner.
Besoin d’un coup de main pour cette partie technique ?
Je sais que parfois, même bien expliqué, un workflow reste intimidant.
Si tu préfères qu’on le mette en place ensemble, contacte-moi : je suis freelance en automatisation, et je peux t’aider à passer de “je devrais le faire” à “c’est déjà en place”.
Sinon, continue de piocher dans les ressources du site, elles sont faites pour ça ✌️
Commentaires