n8n Nedir? n8n Kurulumu: VDS Sunucuya Docker, Nginx ve SSL ile Adım Adım
n8n nedir, ne işe yarar, n8n Cloud ile kendi sunucunuz arasındaki fark ne? VDS'e Docker Compose ile n8n kurulumu, Nginx ters vekil, ücretsiz SSL, ilk iş akışı, güncelleme, yedek ve sık karşılaşılan hatalar.

n8n, birbirinden bağımsız uygulamaları sürükle bırak akışlarla birbirine bağlayan bir iş akışı otomasyon aracıdır. "Formdan yeni kayıt gelince Google Sheets'e yaz ve Telegram'dan haber ver", "her sabah 09:00'da satış raporunu e-postayla gönder", "gelen müşteri e-postasını yapay zekâyla özetleyip ilgili kişiye ata" gibi işler kod yazmadan, kutuları birbirine bağlayarak kurulur. Bu rehberde n8n nedir, ne işe yarar, bulut sürümü ile kendi sunucunuza kurmak arasındaki fark ne, ardından n8n kurulumu adımlarını bir VDS'te Docker Compose, Nginx ve ücretsiz SSL ile baştan sona anlatıyoruz.
n8n arayüz ekran görüntüleri bu yazı için gerçek bir n8n 2.45.7 kurulumunda alınmıştır. Terminal ve yapılandırma dosyası görselleri komutların beklenen çıktısını gösteren temsilî çizimlerdir. Örneklerde alan adı olarak n8n.ornek.com, sunucu IP'si olarak 203.0.113.10 kullandık.
n8n Nedir, Ne İşe Yarar?
n8n'de her otomasyon bir iş akışıdır (workflow). İş akışı, bir tetikleyiciyle (trigger) başlar ve birbirine bağlı düğümlerden (node) oluşur:
- Tetikleyici: Akışı başlatan olaydır. Belirli bir saat (Schedule Trigger), bir web isteği (Webhook), yeni bir e-posta, bir formun gönderilmesi ya da bir uygulamadaki yeni kayıt olabilir.
- Düğümler: Her biri tek bir iş yapar: bir API'ye istek göndermek, veriyi filtrelemek, bir koşula göre dallanmak, e-posta göndermek, veritabanına yazmak, bir yapay zekâ modeline soru sormak.
- Bağlantılar: Bir düğümün çıktısı sonraki düğümün girdisi olur. Veri akış boyunca JSON olarak taşınır.
n8n'in yüzlerce hazır entegrasyonu vardır; hazır düğümü olmayan her servise HTTP Request düğümüyle bağlanabilirsiniz. Gerektiğinde Code düğümünde JavaScript ya da Python yazabilirsiniz. Son sürümlerde yapay zekâ ajanları kurmak için ayrı düğümler de bulunur.
Sık kullanılan örnekler:
- Web sitesi formundan gelen talepleri CRM'e ve ekip sohbet kanalına aktarmak.
- E-ticaret siparişlerini muhasebe tablosuna ve kargo sistemine işlemek.
- Sosyal medya, RSS ya da haber kaynaklarını izleyip özet göndermek.
- Sunucu ve site izleme: bir adres yanıt vermediğinde uyarı göndermek.
- Gelen e-postaları sınıflandırıp yanıt taslağı hazırlamak.
n8n Cloud mu, Kendi Sunucunuz mu?
n8n'i iki şekilde kullanabilirsiniz: n8n'in kendi barındırdığı ücretli n8n Cloud ya da yazılımı kendi sunucunuza kurduğunuz kendi barındırma (self-hosted).
| n8n Cloud | Kendi sunucunuzda (VDS) | |
|---|---|---|
| Kurulum ve güncelleme | n8n yapar | Siz yaparsınız |
| Ücret | Aylık abonelik, çalıştırma sayısına göre paketler | Yazılım ücretsiz, yalnızca sunucu ücreti |
| Çalıştırma sınırı | Pakete göre | Sunucunuzun gücüyle sınırlı |
| Verinin yeri | n8n'in altyapısı | Kendi sunucunuz |
| Gereken bilgi | Yok | Temel Linux ve Docker |
Kendi sunucunuzda çalışan sürüm n8n'in Sustainable Use License adlı lisansıyla dağıtılır. Bu lisans, yazılımı kendi işletmenizin iç işleri için ya da kişisel ve ticari olmayan amaçlarla kullanmanıza ve değiştirmenize izin verir. n8n'i bir ürün gibi başkalarına ücretli hizmet olarak sunmak ise lisans kapsamında değildir; böyle bir planınız varsa lisans metnini okuyun. Bazı kurumsal özellikler (ör. SSO, gelişmiş yetki yönetimi) ayrı bir kurumsal lisans gerektirir.
Başlamadan Önce: Gereksinimler
- Sunucu: Ubuntu 24.04 ya da Debian 13 yüklü bir Linux VDS. Küçük ve orta ölçekli kullanım için 2 vCPU ve 4 GB RAM rahat bir başlangıçtır; çok sayıda eş zamanlı akış, büyük dosya işleme ya da yapay zekâ düğümleri kullanacaksanız 8 GB RAM planlayın.
- Alan adı: n8n'e
https://n8n.ornek.comgibi bir adresle erişeceksiniz. Alan adınızın DNS panelinde bu alt alan adı için sunucu IP'nizi gösteren bir A kaydı oluşturun. Nasıl yapılacağını DNS kayıtları rehberimizde bulabilirsiniz. - Docker ve Docker Compose: Sunucuda kurulu olmalı. Kurulum adımları Docker kurulumu rehberimizde.
- Temel güvenlik: SSH anahtarı ve güvenlik duvarı ayarlarını n8n'den önce yapın; Ubuntu sunucu güvenliği rehberimiz adım adım anlatır. Sunucuya nasıl bağlanacağınızı bilmiyorsanız önce SSH ile sunucuya bağlanma rehberimizi okuyun.
1. Adım: Proje Klasörünü ve Ayar Dosyasını Hazırlayın
Sunucuya SSH ile bağlanıp n8n için bir klasör oluşturun:
sudo mkdir -p /opt/n8n/local-files
cd /opt/n8n
Aynı klasörde .env adlı bir dosya oluşturun (sudo nano .env):
N8N_HOST=n8n.ornek.com
GENERIC_TIMEZONE=Europe/Istanbul
N8N_ENCRYPTION_KEY=buraya-uzun-rastgele-bir-anahtar-yazin
N8N_ENCRYPTION_KEY, n8n'e kaydettiğiniz şifreleri, API anahtarlarını ve diğer kimlik bilgilerini veritabanında şifrelemek için kullanılır. Rastgele bir değer üretmek için:
openssl rand -hex 32
Bu anahtarı güvenli bir yere de not edin. Kaybederseniz yedekten geri yüklediğiniz n8n, kayıtlı kimlik bilgilerinizi çözemez. Dosyayı yalnızca root'un okuyabileceği hâle getirin: sudo chmod 600 .env.
2. Adım: compose.yaml Dosyasını Yazın
sudo nano compose.yaml ile şu dosyayı oluşturun:
services:
n8n:
image: n8nio/n8n:stable
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_PROXY_HOPS=1
- N8N_WEBHOOK_URL=https://${N8N_HOST}/
- N8N_EDITOR_BASE_URL=https://${N8N_HOST}/
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- NODE_ENV=production
- N8N_RESTRICT_FILE_ACCESS_TO=/files
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:

Satırların anlamı:
127.0.0.1:5678:5678: n8n yalnızca sunucunun içinden erişilebilir olur; internete Nginx üzerinden, HTTPS ile açılır. Bu satırı5678:5678yazarsanız Docker portu doğrudan internete açar ve UFW ya da panel güvenlik duvarı bunu engellemez. Nedenini Docker rehberimizin "güvenlik duvarı tuzağı" bölümünde anlattık.N8N_WEBHOOK_URL: Webhook düğümlerinin dışarıya göstereceği adres. n8n 2.30 ve sonrasında bu ad kullanılır; daha eski sürümlerde değişkenin adıWEBHOOK_URL'dir.N8N_PROXY_HOPS=1: n8n'in önünde bir ters vekil sunucu (Nginx) olduğunu bildirir; ziyaretçi IP'leri ve HTTPS bilgisi doğru okunur.GENERIC_TIMEZONE: Zamanlanmış akışların saat dilimi. Yazmazsanız n8n New York saatine göre çalışır ve "09:00" akışınız Türkiye saatiyle başka bir saatte tetiklenir.n8n_data: n8n'in veritabanı (varsayılan SQLite), ayarları ve şifreleme anahtarı bu volume'da durur. Yedeklemeniz gereken asıl yer burasıdır../local-files:/files: Akışlarınızın dosya okuyup yazabileceği klasör. Dosya düğümlerinde/files/...yolunu kullanın.
3. Adım: n8n'i Başlatın
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs -f n8n

Günlükte Editor is now accessible via satırını gördüğünüzde n8n çalışıyordur. Günlüğü izlemeyi Ctrl + C ile bırakın; kapsayıcı arka planda çalışmaya devam eder. Sunucunun içinden test edin:
curl -I http://127.0.0.1:5678
HTTP/1.1 200 OK yanıtı n8n'in hazır olduğunu gösterir.
n8n'i Docker olmadan,
npm install -g n8nile doğrudan sunucuya kurmak da mümkündür ama artık önerilmiyor: n8n 2.45 konteyner dışında çalıştırıldığında günlüğe "Running n8n outside a container is deprecated" uyarısını yazıyor ve gelecekteki sürümlerin resmi Docker imajını zorunlu kılacağını bildiriyor. Bu uyarıyı ekran görüntüleri için kurduğumuz test ortamında biz de gördük.
4. Adım: Nginx ve Ücretsiz SSL ile Yayına Alın
n8n'in editörü ve webhook'ları kalıcı bağlantılar (WebSocket ve sunucu olayları) kullandığı için Nginx yapılandırmasında bu başlıkların iletilmesi gerekir. Nginx ve Certbot'u kurun:
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
/etc/nginx/sites-available/n8n dosyasını oluşturun:
server {
listen 80;
server_name n8n.ornek.com;
client_max_body_size 50m;
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_buffering off;
proxy_read_timeout 3600s;
}
}

Siteyi etkinleştirin, yapılandırmayı test edin ve SSL sertifikasını alın:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d n8n.ornek.com
Certbot sertifikayı alır, Nginx'e 443 bloğunu ekler ve HTTP'yi HTTPS'e yönlendirir. Sertifika doğrulaması için 80 ve 443 portlarının güvenlik duvarında açık olması gerekir:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Panelinizdeki güvenlik duvarını kullanıyorsanız orada da web portlarına (80, 443) izin verin. 5678 portunu dışarıya açmayın; n8n'e yalnızca Nginx üzerinden erişilmelidir. Nginx ve SSL kurulumunun ayrıntıları için LEMP kurulum rehberimize bakabilirsiniz.
5. Adım: Sahip Hesabını Oluşturun
Tarayıcıda https://n8n.ornek.com adresini açın. İlk açılışta n8n sizden sahip (owner) hesabı oluşturmanızı ister:

E-posta adresinizi, adınızı ve güçlü bir şifre girin. Bu hesap n8n'in tam yetkili yöneticisidir. Kurulumdan hemen sonra Settings > Personal bölümünden iki adımlı doğrulamayı (2FA) açmanızı öneririz; n8n'e kaydettiğiniz tüm API anahtarları bu hesabın arkasındadır.
6. Adım: İlk İş Akışınızı Kurun
Gerçek bir örnek yapalım: her sabah 09:00'da Türkiye Cumhuriyet Merkez Bankası'nın herkese açık günlük kur dosyasını çekip dolar ve euro satış kurunu ayıklayan bir akış. Bu yazının ekran görüntüleri tam olarak bu akışla alındı.
- Create Workflow ile yeni bir iş akışı açın.
- Add first step ile tetikleyici olarak On a schedule (Schedule Trigger) seçin ve çalışma saatini 09:00 yapın.
- Sağdaki + düğmesinden HTTP Request düğümünü ekleyin. Method
GET, URLhttps://www.tcmb.gov.tr/kurlar/today.xmlolsun. Options > Response bölümünde yanıt biçimini Text seçin. - XML düğümünü ekleyin ve XML to JSON modunda bırakın; kur dosyası JSON'a çevrilir.
- Edit Fields (Set) düğümü ekleyip yalnızca ihtiyacınız olan alanları tanımlayın. Örneğin
usd_satisalanının değeri:{{ $json.Tarih_Date.Currency.find(c => c.Kod === 'USD').ForexSelling }} - Execute workflow düğmesiyle akışı elle çalıştırıp her düğümün çıktısını kontrol edin.

Bir düğüme çift tıkladığınızda solda gelen veriyi (INPUT), ortada ayarları, sağda çıktıyı (OUTPUT) görürsünüz. Önceki düğümlerden gelen alanları sürükleyip bırakarak {{ $json.alan }} biçiminde ifadeler oluşturabilirsiniz.


Sonucu bir sonraki adımda e-postayla, Telegram ya da Slack mesajıyla gönderebilir veya bir tabloya yazabilirsiniz. Akış beklediğiniz gibi çalıştığında sağ üstteki Publish düğmesiyle yayına alın. n8n 2.x'te yayımlanmamış bir akışın zamanlayıcısı ve webhook'u çalışmaz; editörde yaptığınız değişiklikler de siz yeniden yayımlayana kadar canlı akışı etkilemez. Geçmiş çalıştırmaları Executions sekmesinden izleyebilirsiniz.

Güncelleme ve Yedekleme
n8n neredeyse her hafta yeni bir sürüm yayımlar. stable etiketi üretim için önerilen sürümdür. Güncellemek için:
cd /opt/n8n
sudo docker compose pull
sudo docker compose down
sudo docker compose up -d
Büyük sürüm geçişlerinden (ör. 1.x'ten 2.x'e) önce n8n'in sürüm notlarındaki kırıcı değişiklikleri okuyun.
Yedek almak için iki şeyi saklamanız yeterlidir: n8n_data volume'u ve .env dosyanızdaki şifreleme anahtarı. Volume'u bir arşive almanın basit yolu:
sudo docker compose stop
sudo docker run --rm -v n8n_n8n_data:/veri -v /opt/n8n:/yedek alpine tar czf /yedek/n8n-yedek-$(date +%F).tar.gz -C /veri .
sudo docker compose start
Volume'un tam adını sudo docker volume ls ile kontrol edin (klasör adına göre n8n_n8n_data gibi bir ön ek alır). Yedek dosyasını sunucunun dışında da saklayın; aynı sunucudaki yedek, disk arızasında sizi korumaz. İş akışlarınızı ayrıca editördeki Download seçeneğiyle JSON olarak dışa aktarabilirsiniz.
Güvenlik İçin Kontrol Listesi
- 5678 portu yalnızca 127.0.0.1'e bağlı olsun, n8n'e yalnızca HTTPS üzerinden erişilsin.
- Sahip hesabında 2FA açık olsun, şifre güçlü ve benzersiz olsun.
- Webhook adreslerini gizli tutun. Herkese açık bir webhook'un arkasında önemli bir işlem varsa Webhook düğümünün Authentication ayarından bir başlık ya da temel kimlik doğrulama ekleyin.
- Code düğümünde dış kaynaklı kod çalıştırmayın. İnternetten kopyaladığınız akışları içe aktarmadan önce içeriğini okuyun.
- Güncel kalın. Güvenlik düzeltmeleri yeni sürümlerle gelir.
- Yedeği ve şifreleme anahtarını ayrı yerlerde saklayın.
Sık Karşılaşılan Hatalar

- "Your n8n server is configured to use a secure cookie" uyarısı. n8n'i
http://203.0.113.10:5678gibi HTTPS olmayan bir adresle açtığınızda görülür. Doğru çözüm, yukarıdaki gibi alan adı ve SSL kullanmaktır.N8N_SECURE_COOKIE=falseile uyarıyı kapatmak yalnızca yerel denemeler için uygundur; internete açık bir sunucuda şifreniz düz metin bağlantıdan geçer. - Webhook adresi
localhost:5678görünüyor.N8N_WEBHOOK_URLtanımlı değildir ya da n8n'in eski bir sürümünü kullanıyorsunuz ve değişkenin adıWEBHOOK_URLolmalıdır. - Editör açılıyor ama "Connection lost" uyarısı veriyor. Nginx yapılandırmasında
UpgradeveConnectionbaşlıkları eksiktir. - Zamanlanmış akış yanlış saatte çalışıyor.
GENERIC_TIMEZONE=Europe/Istanbultanımlayın ve kapsayıcıyı yeniden başlatın. - Kapsayıcı yeniden başlayınca her şey silindi.
n8n_datavolume'u tanımlanmamıştır; veriler kapsayıcının içinde kalıp silinmiştir. - "Credentials could not be decrypted" hatası. Yedekten geri yüklenen n8n farklı bir şifreleme anahtarıyla çalışıyordur. Eski
N8N_ENCRYPTION_KEYdeğerini geri yazın.
Özet
- n8n, uygulamaları tetikleyici ve düğümlerle birbirine bağlayan, kendi sunucunuza kurabileceğiniz bir otomasyon aracıdır.
- VDS'te en temiz kurulum: Docker Compose, yalnızca 127.0.0.1'e bağlanan 5678 portu, önde Nginx ve Certbot ile ücretsiz SSL.
GENERIC_TIMEZONE,N8N_WEBHOOK_URLveN8N_ENCRYPTION_KEYayarlarını baştan doğru yapın.- Yedek =
n8n_datavolume'u + şifreleme anahtarı. Güncellemeyidocker compose pullile yapın.
7/24 çalışan otomasyonlarınız için tam root yetkili, NVMe diskli ve Türkiye lokasyonlu VDS paketlerimize göz atabilirsiniz.
Kaynaklar
Sıkça Sorulan Sorular
n8n nedir, ne işe yarar?
n8n, uygulamaları ve servisleri tetikleyici ve düğümlerden oluşan iş akışlarıyla birbirine bağlayan bir otomasyon aracıdır. Form kayıtlarını tabloya yazmak, zamanlanmış raporlar göndermek, API'lerden veri çekmek ya da e-postaları yapay zekâyla sınıflandırmak gibi işler kod yazmadan kurulur.
n8n ücretsiz mi?
Kendi sunucunuza kurduğunuz sürüm Sustainable Use License ile dağıtılır ve kendi işletmenizin iç işleri ya da kişisel kullanım için ücretsizdir; yalnızca sunucu ücreti ödersiniz. n8n'in barındırdığı n8n Cloud ise aylık aboneliklidir. n8n'i başkalarına ücretli hizmet olarak sunmak lisans kapsamında değildir.
n8n için ne kadar RAM gerekir?
Küçük ve orta ölçekli kullanım için 2 vCPU ve 4 GB RAM rahat bir başlangıçtır. Çok sayıda eş zamanlı akış, büyük dosya işleme veya yapay zekâ düğümleri kullanacaksanız 8 GB RAM planlayın.
n8n'i VDS'e kurmanın en kolay yolu nedir?
Docker Compose ile resmi n8nio/n8n imajını çalıştırmaktır. Portu yalnızca 127.0.0.1'e bağlayın, önüne Nginx koyun ve Certbot ile ücretsiz SSL alın. n8n 2.45 konteyner dışında çalıştırıldığında bunun ileride desteklenmeyeceği uyarısını veriyor.
Your n8n server is configured to use a secure cookie hatası nasıl çözülür?
Bu uyarı n8n'i HTTPS olmadan bir alan adı ya da IP adresiyle açtığınızda görülür. Doğru çözüm alan adı ve SSL kullanmaktır. N8N_SECURE_COOKIE=false ile uyarıyı kapatmak yalnızca yerel denemeler için uygundur.
n8n yedeği nasıl alınır?
n8n'in veritabanı, ayarları ve şifreleme anahtarı n8n_data volume'undadır; bu volume'u arşivleyin ve N8N_ENCRYPTION_KEY değerini ayrıca saklayın. Anahtar olmadan geri yüklenen n8n kayıtlı kimlik bilgilerini çözemez. İş akışlarını editörden JSON olarak da dışa aktarabilirsiniz.


