n8n : workflow automation self-hosted

n8n : workflow automation self-hosted

n8n est un outil d'automatisation visuel open-source, type Zapier / Make. 400+ integrations, code execution, webhooks. Connectez vos APIs et automatisez les taches repetitives sans coder ou en JS leger.

Introduction

n8n (prononce "n-eight-n") :

  • Editeur visuel (drag & drop) pour creer des workflows
  • 400+ nodes prets (Gmail, Slack, GitHub, Stripe, Notion, PostgreSQL...)
  • Custom code en JavaScript / Python
  • Webhooks entrants et sortants
  • Schedules (cron)
  • AI nodes (OpenAI, Anthropic, etc.)
  • Multi-tenant (Workflows + Credentials)
  • Mode self-hosted (gratuit) ou cloud

Cas d'usage : sync CRM, alertes Slack, ETL leger, automation marketing, scraping, traitement de mails.

Prerequis

  • VPS Linux 2 vCPU, 2 Go RAM
  • Docker + Docker Compose
  • Nom de domaine
  • Acces root

Etape 1 : Structure

sudo mkdir -p /opt/n8n
cd /opt/n8n

Etape 2 : docker-compose.yml

sudo nano docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    environment:
      - N8N_HOST=n8n.votre-domaine.fr
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.votre-domaine.fr/
      - GENERIC_TIMEZONE=Europe/Paris
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=secret-fort
      - N8N_ENCRYPTION_KEY=cle-aleatoire-32-chars
    volumes:
      - n8n_data:/home/node/.n8n
      - ./files:/files
    depends_on:
      - postgres
    ports:
      - "127.0.0.1:5678:5678"

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: secret-fort
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  n8n_data:
  postgres_data:

Generez N8N_ENCRYPTION_KEY :

openssl rand -hex 16

Etape 3 : Demarrer

sudo docker compose up -d
sudo docker compose logs -f

Etape 4 : Reverse proxy Nginx

server {
    listen 443 ssl http2;
    server_name n8n.votre-domaine.fr;
    
    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
    }
}
sudo certbot --nginx -d n8n.votre-domaine.fr

Etape 5 : Premier acces

Visitez https://n8n.votre-domaine.fr. Creez le compte owner (premier utilisateur).

Etape 6 : Premier workflow

Workflows > New > Add first step.

Exemple : surveiller un GitHub repo et poster sur Slack quand une issue est ouverte.

  1. Node trigger : GitHub Trigger > event issues > authentifiez avec un Personal Access Token
  2. Node action : Slack > authentifiez via OAuth ou webhook URL
  3. Configurez le message : New issue in {{$json.repository.name}} : {{$json.issue.title}}

Cliquez Execute Workflow pour tester, puis Active pour passer en prod.

Etape 7 : Webhook trigger

Pour recevoir des donnees de l'exterieur :

  1. Ajoutez un node Webhook
  2. Notez l'URL generee (production URL)
  3. Methode : POST
  4. Active

Testez :

curl -X POST https://n8n.votre-domaine.fr/webhook/abc123 \
    -H "Content-Type: application/json" \
    -d '{"name":"test","value":42}'

n8n declenchera le workflow.

Etape 8 : Schedule trigger

Pour executer toutes les heures :

  1. Node Schedule Trigger
  2. Rule : Hours
  3. Hours Between Triggers : 1

Pour cron precis :

  1. Mode : Cron Expression
  2. Expression : 0 9 * * MON-FRI (9h du lundi au vendredi)

Etape 9 : Code custom

Node Code :

const items = $input.all();
const result = items.map(item => ({
  json: {
    upper: item.json.name.toUpperCase(),
    timestamp: new Date().toISOString()
  }
}));
return result;

Acces aux nodes precedents : $('NodeName').first().json.field.

Etape 10 : AI nodes (Anthropic / OpenAI)

n8n integre des nodes LLM :

  1. Ajoutez le node OpenAI ou Anthropic
  2. Configurez votre API key
  3. Choisissez le modele (gpt-4, claude-3-5-sonnet, etc.)
  4. Construisez le prompt avec interpolation : {{$json.email_body}}

Cas d'usage : resume automatique de mails, classification, generation de reponses.

Etape 11 : Credentials securises

n8n stocke vos credentials chiffres avec N8N_ENCRYPTION_KEY.

Settings > Credentials. Type d'auth :

  • API Key
  • OAuth2 (Google, Slack, etc.)
  • Basic Auth
  • HTTP Bearer Token
  • SSH Private Key

⚠️ Sauvegardez l'encryption key. Sans elle, impossible de recuperer les credentials d'une sauvegarde.

Etape 12 : Backup

PostgreSQL :

sudo docker compose exec postgres pg_dump -U n8n n8n | gzip > n8n-db-$(date +%F).sql.gz

Volume Docker :

sudo docker run --rm -v opt-n8n_n8n_data:/data -v $PWD:/backup busybox tar czf /backup/n8n-data-$(date +%F).tar.gz /data

⚠️ Sauvegardez aussi docker-compose.yml et notez N8N_ENCRYPTION_KEY.

Etape 13 : Mise a jour

cd /opt/n8n
sudo docker compose pull
sudo docker compose up -d

n8n applique automatiquement les migrations DB.

Depannage

Workflow ne se declenche pas

  • Verifiez qu'il est Active
  • Webhook : utilisez l'URL Production (pas Test)
  • Cron : verifiez le timezone (GENERIC_TIMEZONE)

"Encryption key changed"

Vous avez perdu la cle d'encryption. Sans elle, impossible de dechiffrer les credentials stockes. Re-creez-les manuellement.

OOM kill

Augmentez la RAM. n8n peut etre gourmand sur des workflows lourds. Limitez via :

deploy:
  resources:
    limits:
      memory: 2G

Webhook timeout sur Cloudflare

Augmentez le timeout Cloudflare ou utilisez le webhook URL direct (pas Cloudflare).

"Cannot connect to database"

docker compose logs postgres

Verifiez les credentials et que postgres est UP avant n8n.

Commandes utiles

# Logs
sudo docker compose logs -f n8n

# Restart
sudo docker compose restart n8n

# Voir les workflows actifs (via REST API)
curl -X GET https://n8n.votre-domaine.fr/api/v1/workflows \
    -H "X-N8N-API-KEY: VOTRE_KEY"

# Activer/desactiver via API
curl -X POST https://n8n.votre-domaine.fr/api/v1/workflows/123/activate \
    -H "X-N8N-API-KEY: VOTRE_KEY"

# Export/Import
n8n export:workflow --all --output=workflows.json
n8n import:workflow --input=workflows.json

Conclusion

n8n vous offre :

  • Automatisation sans code (ou avec JS leger)
  • Plus de 400 integrations
  • Webhooks et schedules robustes
  • AI nodes pour automatisation intelligente
  • Self-hosted = controle total des donnees

Pour aller plus loin :

  • Combinez avec Bookstack pour documenter vos workflows
  • Activez Queue mode (Redis) pour de la scalabilite
  • Pour de la production critique, considerez n8n Cloud (managed)

Ressources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members