TürkiyeVPS

n8n Kurulumu: VPS'e Docker ile n8n Kurma

Kendi n8n otomasyon sunucunuzu kurmak için adım adım rehber: Docker Engine kurulumu, docker compose dosyası, Nginx ters vekil, ücretsiz SSL, güncelleme ve yedekleme.

7 dk okuma

n8n, uygulamaları birbirine bağlayıp iş akışlarını otomatikleştirmenizi sağlayan açık kaynaklı bir araçtır. Bir formdan gelen veriyi tabloya yazmak, e-postaları sınıflandırmak, bir yapay zekâ modeline soru gönderip cevabı Telegram'a iletmek gibi işleri sürükle-bırak düğümlerle kurarsınız. Bulut sürümü yerine kendi sunucunuzda çalıştırdığınızda verileriniz sizde kalır ve iş akışı sayısı gibi sınırlarla uğraşmazsınız.

Bu rehberde Ubuntu 24.04 çalışan bir VPS üzerine n8n'i Docker ile kuracağız. Kuracağımız yapı şöyle:

  1. Docker Engine, Docker'ın resmî paket deposundan kurulur.
  2. n8n, bir docker compose dosyasıyla çalışır ve yalnızca sunucunun içinden erişilebilen 127.0.0.1:5678 adresini dinler.
  3. Nginx, dışarıdan gelen istekleri karşılar ve n8n'e iletir.
  4. Certbot, ücretsiz Let's Encrypt sertifikasıyla HTTPS'i etkinleştirir.

1. Sunucuyu hazırlayın

SSH ile bağlanın ve paketleri güncelleyin:

sudo apt update && sudo apt upgrade -y

Yeni bir sunucuysa önce Linux sunucu güvenliği rehberimizdeki temel adımları (SSH anahtarı, root girişini kapatma, güvenlik duvarı) uygulamanızı öneririz. Ayrıca n8n'e vereceğiniz alt alan adı için DNS panelinizde bir A kaydı oluşturun; örneğin n8n.ornek.com → VPS'in IP adresi. Kaydın yayılması birkaç dakika sürebilir.

2. Docker Engine'i kurun

Ubuntu depolarındaki docker.io paketi de çalışır, ancak güncel sürüm ve docker compose eklentisi için Docker'ın kendi deposunu kullanmak daha iyidir:

sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Kurulumu kontrol edin:

sudo docker run --rm hello-world
docker compose version

hello-world kapsayıcısı bir karşılama mesajı yazdırıp kapanıyorsa Docker hazırdır.

Komutları sudo olmadan çalıştırmak için kullanıcınızı docker grubuna ekleyebilirsiniz (sudo usermod -aG docker $USER). Ancak bu grup pratikte root yetkisi demektir; bu rehberde sudo ile devam ediyoruz.

3. docker compose dosyasını yazın

n8n için bir klasör oluşturun ve içine compose dosyasını yazın:

sudo mkdir -p /opt/n8n
cd /opt/n8n
sudo nano compose.yaml

İçeriği (alan adını kendinizinkiyle değiştirin):

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=n8n.ornek.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.ornek.com/
      - N8N_PROXY_HOPS=1
      - GENERIC_TIMEZONE=Europe/Istanbul
      - TZ=Europe/Istanbul
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

Ayarların anlamı:

  • 127.0.0.1:5678:5678: n8n yalnızca sunucunun kendi içinden erişilebilir. Bu önemlidir, çünkü Docker'ın yayınladığı portlar UFW kurallarını atlayabilir; 5678:5678 yazsaydınız n8n güvenlik duvarına rağmen internete açılabilirdi.
  • N8N_HOST ve N8N_PROTOCOL: n8n'in kendi adresini doğru oluşturması için gerekir.
  • WEBHOOK_URL: Webhook ve form düğümlerinin dışarıya gösterdiği adres. Ters vekil arkasında bunu ayarlamazsanız webhook adresleri http://localhost:5678 gibi işe yaramaz bir değerle görünür.
  • N8N_PROXY_HOPS=1: n8n'e önünde bir ters vekil olduğunu söyler; böylece ziyaretçi IP'si X-Forwarded-For başlığından okunur.
  • GENERIC_TIMEZONE: Zamanlanmış (Schedule) düğümlerin hangi saat dilimine göre çalışacağını belirler. Ayarlamazsanız iş akışlarınız Türkiye saatine göre değil, varsayılan saat dilimine göre tetiklenir.
  • n8n_data birimi: İş akışları, kimlik bilgileri, SQLite veritabanı ve şifreleme anahtarı /home/node/.n8n içinde tutulur. Bu birim kaybolursa her şey kaybolur.

N8N_SECURE_COOKIE hakkında

n8n, oturum çerezini varsayılan olarak yalnızca HTTPS üzerinden gönderir. Bu yüzden n8n'e http://IP:5678 gibi şifresiz bir adresten girmeye çalışırsanız "secure cookie" uyarısı alır ve giriş yapamazsınız. Bazı rehberler N8N_SECURE_COOKIE=false eklemeyi önerir; bu, şifrenizin ve oturumunuzun ağda açık metin olarak gitmesine izin verir. Doğru çözüm, aşağıdaki adımlarla HTTPS kurmaktır. Bu değişkeni yalnızca kısa bir yerel deneme için, sonra geri almak üzere kullanın.

n8n'i başlatın:

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

Günlüklerde n8n'in hazır olduğunu belirten satırı gördüğünüzde Ctrl+C ile günlük izlemeden çıkabilirsiniz; kapsayıcı çalışmaya devam eder. curl -I http://127.0.0.1:5678 komutu bir HTTP yanıtı döndürmelidir.

4. Nginx ile ters vekil kurun

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/n8n
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;
    }
}

Upgrade ve Connection başlıkları websocket bağlantısı içindir. n8n editörü, iş akışı çalışırken sonuçları tarayıcıya bu bağlantı üzerinden gönderir; bu satırlar eksikse editör "Connection lost" uyarısı verir ve çalışan iş akışının çıktısı ekrana gelmez. proxy_read_timeout uzun süren isteklerin yarıda kesilmesini önler.

Siteyi etkinleştirin:

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5. Güvenlik duvarı ve SSL

UFW kullanıyorsanız yalnızca SSH ve web trafiğine izin verin. 5678 portunu açmanıza gerek yok:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Let's Encrypt sertifikasını alın:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.ornek.com

Certbot, HTTPS ayarlarını Nginx dosyanıza ekler ve otomatik yenilemeyi kurar. Artık https://n8n.ornek.com adresine girip ilk yönetici hesabınızı oluşturabilirsiniz. Bu hesabı hemen oluşturun: kurulum sayfası açık kaldığı sürece adresi bilen herkes sahip hesabını sizden önce açabilir.

n8n'i güncellemek

n8n sık sürüm çıkarır. Güncellemek için compose klasöründe şu komutları çalıştırın:

cd /opt/n8n
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune -f

Verileriniz birimde durduğu için kapsayıcının yeniden oluşturulması iş akışlarınızı silmez. Yine de büyük sürüm geçişlerinden önce yedek alın ve n8n'in sürüm notlarındaki uyumsuzluk (breaking changes) bölümünü okuyun. Belirli bir sürümde sabit kalmak isterseniz imaj adına etiket ekleyebilirsiniz; örneğin docker.n8n.io/n8nio/n8n:1.x.y gibi.

Yedekleme

En önemli şey n8n_data birimidir. Docker compose, birim adının başına klasör adını ekler; gerçek adı görmek için:

sudo docker volume ls

Klasör /opt/n8n ise ad büyük olasılıkla n8n_n8n_data olur. Tutarlı bir yedek için n8n'i kısa süreliğine durdurup birimi arşivleyin:

cd /opt/n8n
sudo docker compose stop
sudo docker run --rm -v n8n_n8n_data:/data -v /opt/n8n:/backup alpine tar czf /backup/n8n-yedek-$(date +%F).tar.gz -C /data .
sudo docker compose start

Arşivi sunucunun dışına da kopyalayın; aynı diskte duran yedek, disk arızasında işe yaramaz. Birimin içindeki config dosyasında n8n'in şifreleme anahtarı bulunur. Kayıtlı kimlik bilgileri (API anahtarları, şifreler) bu anahtarla şifrelenir; anahtar olmadan yedeği geri yükleseniz bile kimlik bilgilerini kullanamazsınız.

İş akışlarını ayrıca JSON olarak dışa aktarmak isterseniz:

sudo docker exec n8n n8n export:workflow --all --output=/home/node/.n8n/workflows.json

Ne kadar RAM gerekir?

Az sayıda basit iş akışı için n8n en az 1 GB RAM ile çalışır, ancak bu sınırda bir değerdir; özellikle büyük JSON verileri işlenirken veya aynı anda birkaç iş akışı çalışırken bellek yetmeyebilir. 2 GB ve üzeri rahat bir başlangıçtır. Büyük dosyalar, çok sayıda eşzamanlı çalışma ya da aynı sunucuda yerel yapay zekâ modeli gibi ek servisler varsa daha fazlasını planlayın. Kaynakların başkalarıyla paylaşılmamasını istiyorsanız VDS paketleri daha öngörülebilir performans sunar.

Kurulumla uğraşmak istemiyorsanız n8n & AI VPS paketlerine de bakabilirsiniz: ödemeden sonra ekibimiz sunucuya sizin seçiminize göre n8n, OpenWebUI, AI Agent veya Cloudron kurar ve sunucuyu kullanıma hazır şekilde teslim eder. Kendiniz kurmak isterseniz bu rehberdeki adımlar, root erişimli herhangi bir TürkiyeVPS VPS'inde aynen çalışır.

Sık Sorulan Sorular

n8n'i Docker olmadan kurabilir miyim?

Evet, Node.js kurup npm install -g n8n ile de çalıştırabilirsiniz. Ancak Node.js sürüm uyumu, güncelleme ve servis yönetimi işini kendiniz üstlenirsiniz. Docker ile güncelleme iki komuttan ibarettir ve n8n'in kendisi de Docker kurulumunu önerir.

Editör "Connection lost" uyarısı veriyor, neden?

Genellikle Nginx'te websocket başlıkları eksiktir. proxy_http_version 1.1, Upgrade ve Connection "upgrade" satırlarının location bloğunda olduğunu kontrol edin, ardından sudo nginx -t ve sudo systemctl reload nginx çalıştırın.

Webhook adresleri localhost olarak görünüyor, nasıl düzeltirim?

compose dosyasındaki WEBHOOK_URL değerini alan adınızla, sonunda / olacak şekilde ayarlayın ve sudo docker compose up -d ile kapsayıcıyı yeniden oluşturun.

SQLite yeterli mi, PostgreSQL kullanmalı mıyım?

Kişisel kullanım ve küçük ekipler için varsayılan SQLite genellikle yeterlidir. Çok sayıda çalıştırma geçmişi tutuyorsanız veya n8n'i birden fazla süreçle (queue mode) çalıştırmayı düşünüyorsanız PostgreSQL daha uygun olur.

Sunucuyu yeniden başlatınca n8n kendiliğinden açılır mı?

Evet. Docker servisi açılışta başlar ve compose dosyasındaki restart: unless-stopped ayarı sayesinde n8n kapsayıcısı da otomatik olarak yeniden çalışır.