Ana içeriğe geç
Kategoriye Dön

n8n Kurulumu: Self-Hosted İş Akışı Otomasyonu

n8n Docker kurulumu, webhook entegrasyonları, iş akışı oluşturma, 400+ uygulama bağlantısı, zamanlanmış görevler, credentials yönetimi ve production deployment.

Okuma süresi: 15 dk Self-Hosting
n8notomasyonworkflowself-hostingdockerwebhookentegrasyon

İçindekiler

n8n Kurulumu: Self-Hosted İş Akışı Otomasyonu

n8n, 400'den fazla uygulama ve servisi birbirine bağlayabilen, görsel arayüzlü açık kaynaklı bir iş akışı otomasyon platformudur. Zapier ve Make (Integromat) gibi servislere self-hosted alternatif olarak kendi sunucunuzda çalıştırabilirsiniz. Kod yazmadan karmaşık otomasyonlar oluşturabilir, ya da JavaScript/Python ile özel mantık ekleyebilirsiniz.

n8n Nedir?

n8n ("nodemation" kısaltması), node tabanlı görsel programlama ile iş akışları oluşturmanızı sağlar. Öne çıkan özellikleri:

  • 400+ Entegrasyon: Slack, GitHub, Google Sheets, Notion, Airtable ve daha fazlası
  • Webhook Desteği: HTTP isteklerini tetikleyici olarak kullanma
  • Zamanlanmış Görevler: Cron tabanlı zamanlama
  • Kod Desteği: JavaScript ve Python node'ları
  • Hata Yönetimi: Retry mekanizması ve hata akışları
  • Şifreli Credentials: API anahtarları güvenli şekilde saklanır

Sistem Gereksinimleri

  • Docker ve Docker Compose kurulu sunucu
  • Minimum 1 GB RAM (2 GB önerilir)
  • PostgreSQL (production için önerilir) veya SQLite

Docker ile Temel Kurulum

SQLite ile Hızlı Başlangıç

hljs yaml
# docker-compose.yml
version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    environment:
      - N8N_HOST=n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.example.com/
      - GENERIC_TIMEZONE=Europe/Istanbul
      - N8N_ENCRYPTION_KEY=guclu-sifreleme-anahtari
    volumes:
      - ./n8n-data:/home/node/.n8n
    ports:
      - "127.0.0.1:5678:5678"
hljs bash
# Container'ı başlat
docker compose up -d

# Logları kontrol et
docker logs n8n -f

N8N_ENCRYPTION_KEY credentials'ları şifrelemek için kullanılır. Bu değeri kaybederseniz tüm credentials'larınız erişilemez hale gelir. Güvenli bir yerde saklayın.

PostgreSQL ile Production Kurulum

hljs yaml
version: '3.8'

services:
  postgres:
    image: postgres:15
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: guclu-sifre
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=guclu-sifre
      - N8N_HOST=n8n.example.com
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.example.com/
      - GENERIC_TIMEZONE=Europe/Istanbul
      - N8N_ENCRYPTION_KEY=guclu-sifreleme-anahtari
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=admin-sifresi
    volumes:
      - ./n8n-data:/home/node/.n8n
    ports:
      - "127.0.0.1:5678:5678"

volumes:
  postgres-data:

Nginx Reverse Proxy

hljs nginx
server {
    listen 80;
    server_name n8n.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name n8n.example.com;

    ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:5678;
        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;

        # WebSocket desteği (n8n için gerekli)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600;
    }
}

Temel Workflow Oluşturma

İlk Workflow: Webhook → Slack Bildirimi

  1. New Workflow butonuna tıklayın
  2. + ile node ekleyin → Webhook seçin
    • HTTP Method: POST
    • Path: /slack-notify
  3. + ile yeni node → Slack seçin
    • Operation: Send Message
    • Channel: #genel
    • Message: {{ $json.message }}
  4. Save ve Activate edin
hljs bash
# Webhook'u test et
curl -X POST https://n8n.example.com/webhook/slack-notify \
  -H "Content-Type: application/json" \
  -d '{"message": "Merhaba n8n!"}'

Trigger Türleri

Webhook Trigger

hljs javascript
// Webhook node ayarları
{
  "httpMethod": "POST",
  "path": "my-webhook",
  "responseMode": "onReceived",
  "responseData": "allEntries"
}

Cron (Zamanlama) Trigger

# Cron ifadeleri
0 9 * * 1-5    # Hafta içi her sabah 09:00
*/15 * * * *   # Her 15 dakikada bir
0 0 * * *      # Her gece yarısı
0 8 * * 1      # Her Pazartesi sabah 08:00

Polling Trigger

RSS Feed, Email (IMAP), Database değişiklikleri için
belirli aralıklarla kontrol eder.

Credentials Yönetimi

Settings → Credentials → Add Credential

Örnek: GitHub API
- Credential Type: GitHub API
- Access Token: ghp_xxxxxxxxxxxx
- Test bağlantısı yapın
hljs javascript
// HTTP Request node ile özel API
{
  "url": "https://api.example.com/data",
  "method": "GET",
  "authentication": "genericCredentialType",
  "genericAuthType": "httpHeaderAuth"
}

Popüler Workflow Örnekleri

GitHub → Slack Bildirimi

GitHub Trigger (push event)
  → IF (branch == 'main')
    → Slack ("Yeni deploy: {{ $json.commits[0].message }}")
    → Email (ekibe bildirim)

Günlük Rapor

Cron Trigger (her sabah 09:00)
  → PostgreSQL (dünkü satışları çek)
  → Code (verileri formatla)
  → Google Sheets (rapora ekle)
  → Slack (özet gönder)

Form → CRM Entegrasyonu

Webhook (form submit)
  → Validate (zorunlu alanlar)
  → HubSpot (contact oluştur)
  → Email (hoş geldiniz maili)
  → Slack (satış ekibine bildir)

Queue Mode (Yüksek Yük)

Production ortamında yüksek iş yükü için queue mode kullanın:

hljs yaml
environment:
  - EXECUTIONS_MODE=queue
  - QUEUE_BULL_REDIS_HOST=redis
  - QUEUE_BULL_REDIS_PORT=6379

# Redis servisi ekleyin
redis:
  image: redis:7-alpine
  container_name: n8n-redis
  restart: unless-stopped

Yedekleme

hljs bash
# n8n verilerini yedekle
tar -czf n8n-backup-$(date +%Y%m%d).tar.gz ./n8n-data/

# PostgreSQL yedekleme
docker exec n8n-postgres pg_dump -U n8n n8n > n8n-db-$(date +%Y%m%d).sql

# Otomatik yedekleme
cat > /etc/cron.daily/n8n-backup << 'EOF'
#!/bin/bash
docker exec n8n-postgres pg_dump -U n8n n8n | \
  gzip > /backups/n8n-$(date +%Y%m%d).sql.gz
find /backups -name "n8n-*.sql.gz" -mtime +30 -delete
EOF

REXE VPS sunucularında n8n ile tüm iş süreçlerinizi otomatize edebilirsiniz. 2 GB RAM ile yüzlerce workflow çalıştırabilirsiniz.