Self-Hosting ve Production Deployment
Kendi sunucunda n8n çalıştırmak: Docker Compose, PostgreSQL, reverse proxy, yedekleme ve güncelleme stratejileri.
Bu bölümde
n8n Cloud ayda 20-50€ ödediğiniz, ayrıca execution sayısına göre limitli bir servistir. Kendi sunucunuzda barındırırsanız (self-host): execution limiti yok, verileriniz size ait, istediğiniz kadar workflow kurarsınız, aylık maliyet yalnızca sunucu kirasıdır (genelde 5-15€/ay VPS yeterli). Karşılığında: kurulumu, güncellemeyi, yedeklemeyi ve HTTPS'i kendiniz yönetirsiniz. Bu bölümde production-grade bir self-host kurulumunu uçtan uca yapacaksınız: Docker Compose ile n8n + Postgres + Redis, Nginx/Caddy ile HTTPS, environment yönetimi, otomatik yedekleme ve sürüm güncelleme stratejisi.
Konular
- Docker Compose ile n8n + Postgres + Redis
- Environment değişkenleri ve persistent volume
- Nginx / Caddy ile HTTPS reverse proxy
- Domain ve subdomain konfigürasyonu
- Yedekleme: workflow JSON + credential export
- Sürüm güncelleme ve geri alma
Sunucu seçimi: VPS, ne kadar RAM, hangi sağlayıcı?
n8n için en az 2 vCPU + 4 GB RAM önerilir; 8 GB RAM olursa AI workflow'larda çok daha rahat edersiniz. Hetzner CX22 (4€/ay, 2 vCPU, 4 GB) küçük-orta için en uygun maliyetli seçenek. DigitalOcean Droplet, Contabo VPS, AWS Lightsail da uygun. SSD/NVMe disk olmazsa olmaz — workflow execution log'ları hızla büyür. Lokasyon: kullanıcılarınıza en yakın bölge (Frankfurt, Helsinki Türkiye için iyi). Sunucuya Ubuntu 22.04 LTS kurun, başka şey gerekmez.
Docker Compose ile temel kurulum: n8n + Postgres
Production'da SQLite (varsayılan) yerine PostgreSQL kullanın — concurrent execution'larda dosya kilidi sorunu yaşamazsınız. Tek bir docker-compose.yml ile her ikisini ayağa kaldırın: services bölümünde 'postgres' (image: postgres:16, volume mount, healthcheck) ve 'n8n' (image: docker.n8n.io/n8nio/n8n, depends_on: postgres, environment: DB_TYPE=postgresdb, DB_POSTGRESDB_HOST, USER, PASSWORD, DATABASE). N8N_HOST, N8N_PORT, N8N_PROTOCOL=https ve WEBHOOK_URL'i kendi domain'inizle eşleyin. 'docker compose up -d' ile başlatın.
N8N_ENCRYPTION_KEY ve environment yönetimi
n8n credentials'larını şifrelemek için N8N_ENCRYPTION_KEY environment değişkenini KULLANMAK ZORUNDASINIZ — atamazsanız ilk başlatmada bir tane üretir ama bunu yedeklemezseniz, sunucu çökerse hiçbir credential'ı geri alamazsınız. Üretmek için: `openssl rand -hex 32`. Bu key'i .env dosyasına yazın, .env'i git'e KOYMAYIN (.gitignore'a ekleyin), birden fazla yere yedekleyin (1Password/Bitwarden + offline). Diğer önemli env'ler: GENERIC_TIMEZONE=Europe/Istanbul, N8N_LOG_LEVEL=info (debug değil — disk dolar), EXECUTIONS_DATA_PRUNE=true + EXECUTIONS_DATA_MAX_AGE=336 (14 gün sonra eski execution'ları sil).
HTTPS: Caddy ile 2 satırda, Nginx ile klasik yöntemle
n8n production'da mutlaka HTTPS arkasında çalışmalı (webhook'lar HTTP'ye izin vermez, OAuth callback'leri HTTPS ister). En kolay yol Caddy: docker-compose'a caddy servisi ekleyin, Caddyfile'a 'n8n.yourdomain.com { reverse_proxy n8n:5678 }' yazın — bitti. Let's Encrypt sertifikası otomatik gelir, otomatik yenilenir. Klasik tercih Nginx ise: certbot ile sertifika alın, nginx config'ine server bloğu yazın (listen 443 ssl, proxy_pass http://n8n:5678, websocket için Upgrade/Connection header'ları). Domain DNS A kaydını sunucu IP'sine yönlendirmeyi unutmayın.
Queue mode: Redis + worker'larla yatay ölçeklendirme
Tek instance n8n eş zamanlı 10-20 workflow'u rahat koşturur. Daha yoğun yük için queue mode'a geçin: ana n8n 'webhook receiver' olur, gelen execution'ları Redis kuyruğuna atar, ayrı worker container'lar kuyruktan çekip çalıştırır. Compose'a ekleyin: 'redis' servisi (image: redis:7-alpine), n8n env'ine EXECUTIONS_MODE=queue, QUEUE_BULL_REDIS_HOST=redis, ayrı 'n8n-worker' servisi (command: n8n worker, replicas: 3). Bir worker patlasa diğerleri devam eder; trafik artarsa worker sayısını arttırırsınız. AI workflow'larında çok kritik çünkü LLM yanıtları dakikalarca sürebilir.
Yedekleme: Postgres dump + workflow JSON + .env
Üç şeyi düzenli yedeklemezseniz felaket anında her şeyi kaybedersiniz. (1) PostgreSQL: günlük cron ile 'pg_dump' → S3/Backblaze B2'ye yükle, 30 gün sakla. (2) Workflow JSON'ları: 'n8n export:workflow --all --output=/backup' ile günlük dışa aktarın — git repo'ya commit ederseniz versiyon takibi de elde edersiniz. (3) .env dosyası ve N8N_ENCRYPTION_KEY: parola yöneticisinde + offline. Geri yükleme tatbikatını da en az 3 ayda bir yapın — yedeğin var sandığınız ama bozuk olduğu için geri dönemediğiniz senaryo çok yaygın.
Sürüm güncelleme: güvenli upgrade akışı
n8n haftada bir minor sürüm çıkarır, breaking değişiklikler nadirdir ama olur. Güvenli upgrade akışı: (1) Önce release notes'u okuyun (özellikle MAJOR sürümlerde). (2) Postgres + workflow yedeği alın. (3) docker-compose.yml'de image tag'i sabit tutun (`n8nio/n8n:1.78.1` gibi — `latest` üretimde TEHLİKELİ). (4) `docker compose pull && docker compose up -d` çalıştırın. (5) Editor açılıyor, kritik workflow'u manuel test edin, son 1 saatte execution başarı oranı bozulmadıysa OK. Sorun varsa eski tag'e geri dönün — Postgres geriye uyumlu olmadığı durumlar için yedekten restore. Major sürümlerde önce staging ortamında 1 hafta dene.
İzleme: uptime, kaynak ve sağlık kontrolü
Self-host'un en büyük riski: bir gün sunucu çöker ve siz farkına 2 gün sonra varırsınız. Minimum izleme: (1) Uptime kuma veya BetterStack ile n8n.yourdomain.com/healthz endpoint'ini 1 dakikada bir ping'leyin, düşerse Telegram'a bildir. (2) Sunucu metrikleri: Hetzner/DigitalOcean konsolunda alarm kur (CPU > %90, disk > %80, RAM > %85). (3) Log seviyesi: n8n'in stdout'unu docker logs ile veya Loki+Grafana'ya yönlendirin. (4) Execution başarı oranı: Bölüm 11'deki audit log tablosundan günlük 'başarısız oran %5'i geçtiyse uyar' alert'i kurun. Bu dört ayak olmadan üretim sayılmaz.
Bu bölümün workflow'u (n8n editör görünümü)