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
Yazar
REXE Teknoloji Ağ ve Güvenlik Ekibi
Editör
REXE Teknoloji Teknik Yayın Editörü
İlk yayın
Son güncelleme

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.

Sık Sorulan Sorular

n8n ile Zapier arasındaki fark nedir?

n8n self-hosted ve açık kaynaklıdır; Zapier ise bulut tabanlı ve ücretlidir. n8n'de verileriniz kendi sunucunuzda kalır, sınırsız workflow ve execution oluşturabilirsiniz. Zapier daha kullanıcı dostu olabilir ancak aylık execution limitleri ve yüksek maliyetleri vardır. n8n ayrıca JavaScript/Python ile özel kod yazmanıza izin verir.

Webhook URL'im çalışmıyor, dışarıdan erişilemiyor.

WEBHOOK_URL ortam değişkeninin doğru ayarlandığından emin olun (https://n8n.example.com/). Nginx proxy'nin WebSocket bağlantılarını desteklediğini kontrol edin (Upgrade ve Connection başlıkları). Firewall'da 443 portunun açık olduğunu doğrulayın. n8n'de workflow'un 'Active' durumda olduğundan emin olun.

Credentials'larımı kaybettim, şifreleme anahtarını unuttum.

N8N_ENCRYPTION_KEY değiştirilirse mevcut credentials şifresi çözülemez. Bu durumda tüm credentials'ları yeniden oluşturmanız gerekir. Bu nedenle şifreleme anahtarını güvenli bir yerde (şifre yöneticisi, vault) saklamak kritik önem taşır. Yedekleme yaparken bu anahtarı da yedekleyin.

n8n çok fazla bellek kullanıyor, nasıl optimize ederim?

Execution history'yi sınırlayın: EXECUTIONS_DATA_MAX_AGE=168 (7 gün). Büyük veri setleri için binary data'yı dosya sistemine kaydedin: N8N_DEFAULT_BINARY_DATA_MODE=filesystem. Queue mode kullanarak worker sayısını kontrol edin. Gereksiz workflow'ları devre dışı bırakın.

n8n'de hata ayıklama nasıl yapılır?

Workflow editöründe her node'un çıktısını görebilirsiniz. 'Execute Node' ile tek node test edebilirsiniz. Execution listesinden geçmiş çalışmaları inceleyebilirsiniz. Hata node'u ekleyerek hataları yakalayıp Slack/email ile bildirim alabilirsiniz. docker logs n8n komutuyla sistem loglarını kontrol edin.

n8n'i güncellemek güvenli mi, verilerimi kaybeder miyim?

PostgreSQL kullanıyorsanız güncelleme güvenlidir. Güncelleme öncesi veritabanı yedeği alın: docker exec n8n-postgres pg_dump -U n8n n8n > backup.sql. Ardından docker compose pull && docker compose up -d ile güncelleyin. n8n otomatik migration yapar. SQLite kullanıyorsanız ./n8n-data/ dizinini yedekleyin.

İlgili Makaleler

Ağ TrafiğiGelen GbpsGiden Gbps